##왕초보

반샤3125반샤3125· 3년전

질문파이썬으로 다익스트라 알고리즘을 구현하려면 얼마나 걸릴까요?

안녕하세요. 아주 평범한 고등학생입니다. 아직 파이썬은 정식으로 배운 적은 없고 학교 생기부 채우느라 구글링하면서 제가 필요한 부분 찾아보면서 조금씩 파이썬 접하고 있습니다. 이번에 다익스트라 알고리즘 구현하려고 구글링해서 그냥 통째로 복사 붙여 넣기하고 아래 인접리스트만 조금 변형했습니다. 하지만 이걸 제가 다 했다고 하기에도 조금…. 이상해서 혹시 다익스트라 알고리즘 구현할 정도의 파이썬 다루는 실력을 만들려면 얼마나 걸리나요?? 저 혼자 코드 짜라고 하면 아무것도 못 할 거 같아서 질문합니다…. import sys def dijkstra(start): # 초기 배열 설정 distances = {node: sys.maxsize for node in graph} # 시작 노드의 거리는 0으로 설정 distances[start] = 0 queue = [] # 시작 노드부터 탐색 시작 하기 위함. (거리, 노드) - 거리, 노드 순으로 넣은 이유는 heapq 모듈에 첫 번째 데이터를 기준으로 정렬을 진행하기 때문 (노드, 거리) 순으로 넣으면 최소 힙이 예상한대로 정렬되지 않음 heapq.heappush(queue, (distances[start], start)) # 우선 순위 큐에 데이터가 하나도 없을 때까지 반복 while queue: # 가장 낮은 거리를 가진 노드와 거리를 추출 current_distance, node = heapq.heappop(queue) # 파이썬 heapq에 (거리, 노드) 순으로 넣다 보니까 동일한 노드라도 큐에 저장이 된다 예시: queue[(7, 'B'), (10, 'B')] # 이러한 문제를 아래 조건문으로 이미 계산되어 저장한 거리와 추출된 거리와 비교하여 저장된 거리가 더 작다면 비교하지 않고 큐의 다음 데이터로 넘어간다. if distances[node] < current_distance: continue # 대상인 노드에서 인접한 노드와 거리를 순회 for adjacency_node, distance in graph[node].items(): # 현재 노드에서 인접한 노드를 지나갈 때까지의 거리를 더함 weighted_distance = current_distance + distance # 배열의 저장된 거리보다 위의 가중치가 더 작으면 해당 노드의 거리 변경 if weighted_distance < distances[adjacency_node]: # 배열에 저장된 거리보다 가중치가 더 작으므로 변경 distances[adjacency_node] = weighted_distance # 다음 인접 거리를 계산 하기 위해 우선 순위 큐에 삽입 (노드가 동일해도 일단 다 저장함) heapq.heappush(queue, (weighted_distance, adjacency_node)) return distances graph = { 'A': {'C': 6.3, 'D': 4, 'E': 7}, 'B': {'C': 3.8, 'F': 7.5, 'K': 15}, 'C': {'A': 6.3, 'B': 3.8, 'D': 6.4, 'F': 4.3, 'K': 14}, 'D': {'A': 4, 'C': 6.4,'E': 5,'F': 4.4}, 'E': {'A': 7,'D': 5,'F': 8.9,'G': 4.5,'H': 8.8}, 'F': {'B': 7.5,'C': 4.3,'D': 4.4,'E': 8.9,'G': 6.5, 'I':5}, 'G': {'E': 4.5,'F': 6.5,'H': 8.5,'J': 6.3}, 'H': {'E': 8.8,'G': 8.5,'J': 7.7}, 'I': {'F': 5,'J': 6.6,'K': 7}, 'J': {'G': 6.3,'H': 7.7,'I': 6.6,'K': 10}, 'K': {'B': 15,'C': 14,'I': 7,'J': 10} } result = dijkstra('A') print(result)
242
1
0
피토니
피토니·2024-05-09
다익스트라 알고리즘을 스스로 구현할 수 있는 수준에 도달하기 위해 필요한 시간은 사람마다 다르지만, 일반적으로 몇 주에서 몇 달의 기간 동안 파이썬 기본 문법과 자료구조, 알고리즘에 대한 이해를 쌓아가는 것이 좋습니다. 기본적인 파이썬 문법을 이미 알고 있다면, 알고리즘에 대한 이해를 깊게 하는 데 집중하는 것이 좋을 것 같습니다. 다익스트라 알고리즘...