반응형
컴퓨터에서 "랜덤(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. 시간 복잡도일반적으로 간선을 정렬..
너비 우선 탐색(BFS)은 그래프 탐색 알고리즘으로, 그래프의 정점과 간선을 체계적으로 탐색합니다. 루트 노드에서 시작해 현재 깊이의 모든 노드를 방문한 뒤에 다음 깊이로 이동하기 때문에, 레벨별로 경로를 탐색할 수 있으며 가중치가 없는 그래프에서 최단 경로를 발견하거나 연결 요소를 확인하는 데 강력한 기술입니다. 핵심 개념:그래프는 정점(노드)과 이를 연결하는 간선으로 구성됩니다.인접 리스트: 그래프를 표현하는 흔한 방법으로, 각 정점이 자신의 이웃 정점을 리스트 형태로 저장합니다.큐: BFS는 큐를 이용해 탐색할 정점을 관리합니다. 큐는 선입선출(FIFO) 방식으로 동작하여, 탐색 순서를 유지합니다.BFS의 동작 원리:초기화: 특정 시작 정점에서 시작합니다. 이 정점을 방문했다고 표시하고 큐에 추가합..
이진 탐색은 정렬된 배열에서 요소를 찾는 고전적인 알고리즘으로, 시간 복잡도가 O(log n)입니다. 각 반복마다 검색 범위를 절반으로 줄이기 때문에 정렬된 데이터셋에서 가장 효율적인 검색 방법 중 하나로 손꼽힙니다.이진 탐색 동작 원리전제 조건: 데이터셋은 오름차순 또는 내림차순으로 정렬되어 있어야 합니다.절차:목표 값을 중간 요소와 비교합니다.일치하면 검색이 완료됩니다.목표 값이 더 작으면 왼쪽 절반을 검색합니다.목표 값이 더 크면 오른쪽 절반을 검색합니다.목표 값을 찾거나 검색 공간이 비어질 때까지 반복합니다.자바 구현public class BinarySearch { public static int binarySearch(int[] arr, int target) { int left..