본문 바로가기
반응형

자료구조73

[C++로 배우는 알고리즘과 자료구조 심화] Day 27: 유전 알고리즘 (Genetic Algorithms) 유전 알고리즘 (Genetic Algorithms)유전 알고리즘(Genetic Algorithms, GA)은 자연 선택의 원리를 모방한 최적화 알고리즘입니다. 유전 알고리즘은 주로 복잡한 최적화 문제를 해결하는 데 사용되며, 초기 해 집합(개체군)을 생성하고 이를 진화시키는 과정을 반복하여 최적해를 찾아갑니다.유전 알고리즘의 주요 단계초기화: 초기 개체군을 무작위로 생성합니다.선택: 적합도에 따라 부모 개체를 선택합니다.교차 (Crossover): 부모 개체의 유전자를 교환하여 자손을 생성합니다.돌연변이 (Mutation): 자손의 유전자 일부를 무작위로 변경하여 다양성을 유지합니다.적합도 평가: 각 개체의 적합도를 계산합니다.종료 조건 확인: 최적해를 찾았거나 최대 세대 수에 도달하면 알고리즘을 종료합.. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 28: 시뮬레이티드 어닐링 (Simulated Annealing) 시뮬레이티드 어닐링 (Simulated Annealing)시뮬레이티드 어닐링(Simulated Annealing, SA)은 금속의 냉각 및 결정화 과정에서 영감을 받은 확률적 최적화 알고리즘입니다. 이 알고리즘은 전역 최적해를 찾기 위해 국부 최적해에서 탈출할 수 있도록 고안되었습니다.시뮬레이티드 어닐링의 주요 단계초기화: 초기 해와 초기 온도를 설정합니다.이웃 해 생성: 현재 해의 이웃 해를 무작위로 생성합니다.해 수용: 새로운 해가 더 나은 해이면 수용합니다. 그렇지 않으면, 확률적으로 수용합니다.온도 감소: 온도를 점진적으로 낮춥니다.종료 조건 확인: 종료 조건(예: 온도가 충분히 낮아지거나 최대 반복 횟수에 도달)을 확인합니다.문제 예시: 여행하는 외판원 문제 (TSP)시뮬레이티드 어닐링을 사용하.. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조] Day 28: 동적 계획법 (DP) 기초 동적 계획법 (Dynamic Programming, DP)동적 계획법(DP)은 복잡한 문제를 해결하기 위해 작은 부분 문제로 나누어 해결하고, 그 결과를 저장하여 전체 문제의 해를 구하는 알고리즘 설계 기법입니다. DP는 주로 재귀적 구조를 가지며, 중복되는 부분 문제를 해결하여 효율성을 높입니다.DP의 주요 특징:중복된 부분 문제 (Overlapping Subproblems): 문제를 해결하는 과정에서 동일한 부분 문제가 여러 번 재계산됩니다.최적 부분 구조 (Optimal Substructure): 문제의 최적 해는 부분 문제의 최적 해로 구성될 수 있습니다.DP의 접근 방식:탑다운 (Top-Down): 재귀 + 메모이제이션바텀업 (Bottom-Up): 반복문 + 테이블피보나치 수열 (Fibonacc.. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조] Day 25: 다익스트라 알고리즘 (Dijkstra's Algorithm) 다익스트라 알고리즘 (Dijkstra's Algorithm)다익스트라 알고리즘은 가중치가 있는 그래프에서 단일 출발점으로부터 다른 모든 정점까지의 최단 경로를 찾는 알고리즘입니다. 이 알고리즘은 음수 가중치가 없는 그래프에서 작동합니다.다익스트라 알고리즘의 시간 복잡도:일반적인 구현: (O(V^2))우선순위 큐를 사용한 구현 (힙): (O((V + E) \log V))다익스트라 알고리즘 구현그래프 구현 (인접 리스트 사용)#include #include #include #include #include // 그래프 클래스 정의class Graph {public: Graph(int vertices); void addEdge(int u, int v, int weight); // 간선 추가 vo.. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 25: 임의화 알고리즘 (Randomized Algorithms) 임의화 알고리즘 (Randomized Algorithms)임의화 알고리즘은 무작위성을 도입하여 문제를 해결하는 알고리즘입니다. 이러한 알고리즘은 일반적으로 평균적인 성능이 좋으며, 특정 패턴이나 최악의 경우를 피할 수 있습니다. 대표적인 임의화 알고리즘에는 랜덤 선택 알고리즘 (Randomized Selection Algorithm), 랜덤 탐색 알고리즘 (Randomized Search Algorithm) 등이 있습니다.랜덤 선택 알고리즘 (Randomized Selection Algorithm)랜덤 선택 알고리즘은 주어진 배열에서 k번째 작은 원소를 찾는 문제를 해결합니다. 이 알고리즘은 퀵 선택(Quickselect) 알고리즘의 변형으로, 피벗을 무작위로 선택하여 평균적인 성능을 향상시킵니다.문제 .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조] Day 26: 플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm) 플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm)플로이드-워셜 알고리즘은 모든 정점 쌍 간의 최단 경로를 찾는 알고리즘입니다. 이 알고리즘은 음의 가중치가 있는 그래프에서도 작동하지만, 음의 사이클이 있는 그래프에서는 사용할 수 없습니다.플로이드-워셜 알고리즘의 시간 복잡도:(O(V^3)), 여기서 (V)는 정점의 수입니다.플로이드-워셜 알고리즘 구현그래프 구현 (인접 행렬 사용)#include #include #include // 무한대 값을 나타내는 상수const int INF = INT_MAX;// 그래프 클래스 정의class Graph {public: Graph(int vertices); void addEdge(int u, int v, int weight); // .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 26: 선형 계획법 (Linear Programming) 선형 계획법 (Linear Programming)선형 계획법은 주어진 선형 제약 조건하에서 선형 목표 함수를 최적화(최대화 또는 최소화)하는 문제를 해결하는 기법입니다. 선형 계획법은 경제학, 운영 연구, 엔지니어링 등 다양한 분야에서 사용됩니다. 가장 널리 알려진 방법은 단체법 (Simplex Method)과 내부 점 방법 (Interior Point Method)입니다.선형 계획법 문제 정의일반적인 선형 계획법 문제는 다음과 같이 정의됩니다:[\begin{aligned}& \text{Maximize (or Minimize)} \quad & c^T x \& \text{subject to} \quad & Ax \leq b \& & x \geq 0\end{aligned}]여기서 (c)는 목표 함수의 계수 .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조] Day 23: 깊이 우선 탐색 (DFS) 깊이 우선 탐색 (DFS, Depth-First Search)깊이 우선 탐색(DFS)은 그래프 탐색 알고리즘 중 하나로, 가능한 한 깊게 탐색한 후 더 이상 깊이 갈 수 없으면 다시 되돌아와 다른 경로를 탐색하는 방식입니다. DFS는 스택 자료구조를 사용하여 구현할 수 있으며, 재귀적으로도 구현이 가능합니다.DFS의 주요 특징:시간 복잡도: (O(V + E)), 여기서 (V)는 정점의 수, (E)는 간선의 수입니다.공간 복잡도: (O(V)), 재귀 호출 스택의 깊이입니다.DFS 구현그래프 구현 (인접 리스트 사용)#include #include #include // 그래프 클래스 정의class Graph {public: Graph(int vertices); void addEdge(int v, .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 23: 분할 상환 분석 (Amortized Analysis) 분할 상환 분석 (Amortized Analysis)분할 상환 분석은 알고리즘의 시간 복잡도를 분석하는 기법으로, 개별 연산의 최악의 경우 시간 복잡도가 아닌, 일련의 연산에 대한 평균 시간 복잡도를 계산하는 방법입니다. 이는 데이터 구조의 연산이 불균등하게 발생할 때 매우 유용합니다. 분할 상환 분석의 주요 기법에는 Aggregate Analysis, Accounting Method, Potential Method가 있습니다.Aggregate AnalysisAggregate Analysis는 전체 연산에 대해 총 비용을 계산하고, 이를 연산 수로 나누어 평균 비용을 구하는 방법입니다.Accounting MethodAccounting Method는 각 연산에 대해 가상의 "크레딧"을 할당하여 연산 비용을.. 2024. 8. 1.
반응형