반응형
컴퓨터에서 "랜덤(random)"이라는 개념은 매우 중요합니다.게임에서 무작위 아이템을 생성할 때, 암호화에서 보안 키를 만들 때,머신러닝에서 데이터 샘플을 무작위로 추출할 때 랜덤 값(난수)이 필요합니다.하지만 컴퓨터가 실제로 "완전한 랜덤"을 만들 수 있을까요?사실, 대부분의 컴퓨터 난수는 완전히 랜덤하지 않습니다.이번 글에서는 랜덤 알고리즘의 원리, 난수 생성 방식, 그리고 진정한 랜덤의 가능성을 탐구하고,실제로 사용할 수 있는 가장 안전한 난수 생성 방법을 코드 예제와 함께 소개하겠습니다. 🚀1. 난수란 무엇인가? (Random Number의 정의)💡 난수(Random Number)란?어떠한 규칙도 없이 예측할 수 없는 수.난수는 완전한 무작위성(True Randomness)을 가져야 하지만,..
유전 알고리즘(Genetic Algorithm, GA)은 자연의 진화 과정을 모방한 최적화 기법입니다. 이는 자연선택, 돌연변이, 교차(crossover) 등의 개념을 활용하여 최적의 해(solution)를 탐색하는 방법입니다. 복잡한 문제를 해결할 때 전통적인 수학적 접근법보다 효율적인 경우가 많아, AI, 로봇공학, 머신러닝, 게임 개발, 산업 공학 등 다양한 분야에서 사용됩니다.이 글에서는 유전 알고리즘의 기본 개념, 동작 원리, 구현 방법, 그리고 Python 코드 예제까지 자세히 설명하겠습니다.1. 유전 알고리즘의 개념유전 알고리즘(GA)은 생물학적 진화 원리를 기반으로 한 탐색 및 최적화 기법입니다. 주어진 문제의 해를 유전자(DNA)처럼 표현한 후, 세대를 거치면서 최적의 해를 찾아갑니다.?..
1. 개요Prim 알고리즘은 최소 스패닝 트리(MST, Minimum Spanning Tree) 를 구하는 대표적인 알고리즘 중 하나다.임의의 시작 정점에서 출발하여, 트리에 연결되지 않은 정점들 중 가장 적은 비용(가중치) 으로 연결될 수 있는 간선을 하나씩 추가해 나가는 방식이다.탐색 과정에서 우선순위 큐(최소 힙) 를 사용하여 효율적으로 ‘가장 가중치가 낮은 간선’을 선택할 수 있으며, 인접 리스트 형태의 그래프에서 O(E log V) 정도의 성능을 낼 수 있다.2. 기본 아이디어아무 정점이나 선택하여 시작 (MST 집합에 포함).현재 MST 집합과 아직 MST에 포함되지 않은 정점을 연결하는 간선 중 가장 작은 가중치의 간선을 선택.그 간선을 MST에 포함시키고, 연결된 정점을 MST 집합에 추가..
1. 개요Kruskal's Algorithm은 최소 스패닝 트리(Minimum Spanning Tree, MST) 를 찾는 대표적인 알고리즘 중 하나다.그래프의 모든 정점을 연결하면서 간선 비용(가중치) 의 합이 최소가 되도록 스패닝 트리를 구성한다.에지 리스트(Edge List)를 가중치 오름차순으로 정렬한 뒤, 사이클(Cycle)이 생기지 않도록 Union-Find(Disjoint Set) 자료구조를 활용하여 순차적으로 간선을 선택한다.2. 기본 아이디어모든 간선을 가중치 오름차순으로 정렬가장 낮은 가중치 간선부터 차례대로 확인사이클이 발생하지 않으면(Union-Find로 검사) 스패닝 트리에 포함모든 정점을 연결할 때까지(또는 간선을 V - 1개 선택 시) 반복3. 시간 복잡도일반적으로 간선을 정렬..
1. 개요DFS(Depth First Search)는 그래프(또는 트리)에서 한 정점에서 시작해 가능한 한 멀리(깊이) 탐색을 진행한 뒤, 더 이상 갈 곳이 없으면 되돌아(backtrack) 와서 다른 경로를 탐색하는 방식의 알고리즘이다.그래프 전역 탐색, 경로 판별, 연결 요소 탐색 등 다양한 문제에 활용된다.2. 기본 아이디어시작 정점 방문방문 여부를 기록(예: visited 배열/집합).인접 정점으로 이동아직 방문하지 않은 인접 정점이 있다면, 그 정점을 방문하고 또 깊이 들어간다.갈 곳이 없으면 되돌아오기모든 인접 정점을 처리했거나 더 이상 방문할 수 없는 경우, 이전 정점(스택 혹은 재귀 호출의 상위 단계)으로 복귀.3. 시간 복잡도일반적으로 그래프가 인접 리스트로 표현되어 있고, 정점 수를 V..
너비 우선 탐색(BFS)은 그래프 탐색 알고리즘으로, 그래프의 정점과 간선을 체계적으로 탐색합니다. 루트 노드에서 시작해 현재 깊이의 모든 노드를 방문한 뒤에 다음 깊이로 이동하기 때문에, 레벨별로 경로를 탐색할 수 있으며 가중치가 없는 그래프에서 최단 경로를 발견하거나 연결 요소를 확인하는 데 강력한 기술입니다. 핵심 개념:그래프는 정점(노드)과 이를 연결하는 간선으로 구성됩니다.인접 리스트: 그래프를 표현하는 흔한 방법으로, 각 정점이 자신의 이웃 정점을 리스트 형태로 저장합니다.큐: BFS는 큐를 이용해 탐색할 정점을 관리합니다. 큐는 선입선출(FIFO) 방식으로 동작하여, 탐색 순서를 유지합니다.BFS의 동작 원리:초기화: 특정 시작 정점에서 시작합니다. 이 정점을 방문했다고 표시하고 큐에 추가합..