본문 바로가기

Algorithm9

코사인 유사도와 코사인 거리 개념 및 딥러닝에서의 활용 | PyTorch 예제 포함 1. 코사인 유사도(Cosine Similarity)란?코사인 유사도는 두 벡터 간의 방향 유사도를 측정하는 지표로, 주로 텍스트 유사도 분석, 문장 임베딩 비교, 이미지 임베딩 비교 등에서 활용됩니다. 벡터의 크기보다는 방향성에 초점을 맞추는 것이 특징입니다.공식:cos_sim(A, B) = (A · B) / (||A|| * ||B||) A와 B는 각각의 벡터이며, ·는 내적(dot product), ||A||는 A의 놈(norm, 길이)입니다. 값의 범위는 -1 ~ 1입니다. 1에 가까울수록 방향이 유사하고 반대로 -1에 가까울 수록 두 벡터의 방향이 서로 다름을 의미합니다.2. 코사인 거리(Cosine Distance)란?코사인 거리란 코사인 유사도를 거리 개념으로 변환한 것으로, 다음과 같이.. 2025. 4. 30.
DFS(깊이 우선 탐색) 알고리즘: 동작 원리와 Python 코드 구현 깊이 우선 탐색 (DFS)란?Depth-First Search (DFS)는 트리와 그래프 데이터 구조를 탐색하는 기본 알고리즘입니다. 각 경로를 가능한 한 깊게 탐색한 후 백트래킹하는 방식으로 동작하여 경로 찾기, 위상 정렬, 사이클 검출 등에 적합합니다.DFS 알고리즘 설명DFS는 재귀(암시적 호출 스택)나 명시적 스택 자료구조를 사용하여 구현할 수 있습니다. 핵심 아이디어는 다음과 같습니다:루트(또는 임의의 시작 노드)에서 시작합니다.노드를 방문하고 방문 표시합니다.방문하지 않은 인접 노드를 재귀적 또는 반복적으로 방문합니다.알고리즘 단계 (이진 트리 - 재귀)현재 노드를 방문합니다.왼쪽 서브트리를 재귀적으로 탐색합니다.오른쪽 서브트리를 재귀적으로 탐색합니다.알고리즘 단계 (일반 그래프 - 스택 기반.. 2025. 4. 29.
BFS(너비 우선 탐색) 알고리즘: 동작 원리와 Python 코드 구현 너비 우선 탐색 (Breadth-First Search)란?Breadth-First Search (BFS)는 현재 깊이 수준에 있는 모든 노드를 탐색한 후 다음 깊이 수준의 노드를 탐색하는 그래프 순회 알고리즘입니다. 가중치가 없는 그래프에서 최단 경로 문제를 해결하거나, 트리 탐색 및 연결 요소 분석 등에 널리 사용됩니다.BFS 알고리즘 설명BFS는 큐(queue) 자료구조를 사용하여 다음에 탐색할 노드를 추적합니다. 핵심 아이디어는 다음과 같습니다:시작 노드를 방문하고 큐에 추가합니다.큐가 비어있지 않은 동안:큐의 앞쪽에서 노드를 꺼냅니다.노드를 처리합니다 (예: 출력, 기록).방문하지 않은 모든 이웃 노드를 큐에 추가합니다.알고리즘 단계 (이진 트리)루트 노드를 시작으로 큐에 추가합니다.큐가 비어있.. 2025. 4. 29.
A* 탐색 알고리즘 - Python 예제와 함께 자세한 설명 A* 탐색 알고리즘이란?A* 탐색은 가장 인기 있고 강력한 경로 찾기 및 그래프 탐색 알고리즘 중 하나입니다. 시작 노드에서 목표 노드까지의 최단 경로를 찾을 때 실제 비용과 휴리스틱(추정) 비용을 모두 고려합니다.핵심 개념g(n): 시작 노드에서 현재 노드 $n$까지의 실제 비용h(n): 현재 노드 $n$에서 목표 노드까지의 추정 비용f(n): 총 예상 비용$f(n) = g(n) + h(n)$A* 알고리즘 단계시작 노드를 오픈 집합에 추가합니다.각 노드에 대해 최소 비용(g 값)을 기록하는 맵을 초기화합니다.오픈 집합이 비어있지 않은 동안:$f(n)$ 값이 가장 작은 노드를 선택합니다.목표 노드에 도달했으면 경로를 재구성하여 반환합니다.그렇지 않으면, 각 이웃 노드에 대해:임시 $g$ 값을 계산합니다... 2025. 4. 29.
검색 알고리즘: 상세 설명과 Python 구현 탐색 알고리즘 소개탐색 알고리즘은 인공지능(AI)과 컴퓨터 과학의 핵심 도구입니다. 이 알고리즘은 문제 해결 에이전트가 복잡한 환경을 탐색하고, 해답을 찾으며, 의사결정을 내릴 수 있도록 도와줍니다. 탐색 알고리즘은 주어진 시작 상태로부터 목표 상태에 도달하는 경로를 찾기 위해 문제 공간 내의 가능한 경로를 체계적으로 조사합니다.일반적으로 탐색 알고리즘은 다음 두 가지 주요 범주로 나뉩니다:비정보 탐색 알고리즘 (Uninformed Search Algorithms): 이러한 알고리즘은 문제 정의 외에 도메인에 대한 구체적인 정보를 갖고 있지 않습니다. 목표의 방향을 예측하지 않고 모든 노드를 동일하게 취급하며, 무작위로 탐색 공간을 확장합니다. 복잡하거나 규모가 큰 환경에서는 비효율적일 수 있지만, 특정.. 2025. 4. 28.
SIMD와 MIMD 차이점 쉽게 설명 컴퓨팅 성능을 개선하는 중요한 요소들 중 하나가 병렬 처리입니다. 그리고 이런 병렬 컴퓨팅을 지원하는 중요한 두 가지 모델은 SIMD (Single Instruction, Multiple Data)와 MIMD (Multiple Instruction, Multiple Data)입니다. 이러한 모델을 이해하면 알고리즘을 최적화하고 하드웨어 성능을 효과적으로 활용하는데 도움이 됩니다. 이 블로그에서는 이 두 모델들에 대해서 간략히 설명하고, 어떻게 파이썬 내장 함수에서 활용되고 있는지 그리고 어떻게 파이썬으로 구현 가능한지 살펴보겠습니다.SIMD: Single Instruction, Multiple Data개념SIMD는 하나의 연산이 여러 데이터 포인트에 동시에 적용되는 병렬 컴퓨팅 모델입니다. 이미지 처리,.. 2025. 4. 23.