#알고리즘(3)
-
9. 너비우선 탐색
#1. 너비우선 탐색(Breadth-First Search)* BFS : 대표적인 그래프 탐색 알고리즘* 정점들과 같은 레벨에 있는 노드들(형제 노드들)을 먼저 우선 탐색하는 방식* 한 단계씩 내려가면서 해당 노드와 같은 레벨에 있는 노드들(형제 노드들)을 먼저 순회함graph = dict()graph['A'] = ['B', 'C']graph['B'] = ['A', 'D']graph['C'] = ['A', 'G', 'H', 'I']graph['D'] = ['B', 'E', 'F']graph['E'] = ['D']graph['F'] = ['D']graph['G'] = ['C']graph['H'] = ['C']graph['I'] = ['C', 'J']graph['J'] = ['I']graph-->{'A': ..
2024.10.23 -
6. 병합정렬(Merge sort)
# 1. 병합정렬(merge sort)* 재귀 용법을 활용한 정렬 알고리즘* 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눔* 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬* 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병#2. 알고리즘 이해하기'''data_list = [1, 9, 3, 2]'''1. [1,9] 로 나눔2. 앞부분은 [1], [9]로 나누고 뒷부분은 [3],[2]로 나눔3. 정렬해서 합침 [1,9] , [2, 3]4. [1,9] , [2, 3] 을 합침(단, 아래와 같은 조건으로) * 1 2 이므로 리스트에 2를 추가 [1,2] * 9 > 3 이므로 리스트에 3을 추가 [1,2,3] * 9 밖에 없으니 리스트에 9를 추가 [1,2,3,9] #3. 알고리즘..
2024.10.23 -
5. 퀵정렬(Quick sort)
1. 분할 정복(Divide and Conquer)* 문제를 여러 개의 독립적인 하위 문제로 나눠서 각각 해결한 후, 그 결과를 합쳐서 원래 문제를 해결하는 방식* 재귀적으로 하위 문제를 풀고, 합병 과정을 거치는 게 특징2. 분할 정복을 사용하는 대표적인 정렬: 퀵 정렬* 정렬 알고리즘의 꽃* 기준점(pivot)을 정해서 기준점보다 작은 데이터는 왼쪽, 큰 데이터는 오른쪽으로 모으는 함수를 작성* 왼쪽, 오른쪽은 재귀용법을 사용해서 다시 동일 함수를 호출하여 위 작업을 반복함2-1. 퀵 정렬 알고리즘 구현하기* 만약 리스트 갯수가 한 개이면 해당 리스트를 반환* 그렇지 않으면, 리스트 맨 앞의 데이터를 기준점(pivot)으로 설정* left, right 리스트 변수를 만듦* 맨 앞의 데이터를 뺀 나머지..
2024.10.23