CS/Python 11

파이썬으로 다익스트라 알고리즘 구현하기

위와 같은 그래프를 노드 1부터 시작해서 최단 거리를 구하는 다익스트라 알고리즘을 구현하면 다음과 같다.import heapqdef dijkstra(arr, start): D = [float("inf")] * (n+1) D[start] = 0 queue = [(0, start)] while queue: # D값이 가장 작은 노드를 고른다 now_dist, now_node = heapq.heappop(queue) if now_dist > D[now_node]: continue # 현재 선택한 노드와 인접한 노드들을 읽는다 for node, weight in arr[now_node]: ..

CS/Python 2025.03.31

파이썬으로 이진 탐색 트리 구현하기

개요이진 탐색 트리(Binary Search Tree, BST)는 모든 노드가 다음 조건을 만족해야 한다.왼쪽 서브트리 노드의 key값은 자신의 노드 key값보다 작아야 한다.오른쪽 서브트리 노드의 key값은 자신의 노드 key값보다 커야 한다. 위의 BST를 중위 순회로 스캔하면 다음과 같이 노드의 key값을 오름차순으로 얻을 수 있다.1 → 4 → 5 → 6 → 7 → 9 → 11 → 12 → 13 → 14 → 15 → 18BST의 특징구조가 단순하다.중위 순회의 DFS를 통해 노드값을 오름차순으로 얻을 수 있다.이진 탐색과 비슷한 방식으로 매우 빠른 검색이 가능하다.노드를 삽입하기가 쉽다.코드 구현코드 전문은 Do it! 자료구조와 함께 배우는 알고리즘 입문 파이썬 편에서 확인할 수 있다.class..

CS/Python 2025.03.27

파이썬으로 해시 테이블 구현하기

개요해시법(Hashing)은 데이터를 저장할 위치(인덱스)를 간단한 연산으로 구하는 것이다.키를 특정한 값으로 나눈 값을 해시값(Hash value)라고 하며, 해시값은 데이터에 접근할 때 기준이 된다.키를 해시값으로 변환하는 과정을 해시 함수(Hash function)이라고 하고, 해시 테이블에서 만들어진 원소를 버킷(bucket)이라 한다.해시 충돌(Hash collision)은 키와 해시값의 다대일(n:1) 관계에 의해 저장할 버킷이 중복되는 현상이다.해시법에서 충돌이 발생할 경우 다음 2가지 방법으로 대처할 수 있다.체인법 : 해시값이 같은 원소를 연결 리스트로 관리함오픈 주소법 : 빈 버킷을 찾을 때까지 해시를 반복함코드 구현코드 전문은 Do it! 자료구조와 함께 배우는 알고리즘 입문 파이썬 ..

CS/Python 2025.03.24