الگوریتم پریم (Prim's Algorithm) یک روش معروف برای یافتن درخت پوشای کمینه (Minimum Spanning Tree, MST) در یک گراف وزندار و بدون جهت است. درخت پوشای کمینه یک زیرگراف است که شامل تمام رئوس گراف اصلی میشود و دارای کمترین مجموع وزن یالها است. الگوریتم پریم برای کاربردهایی مانند طراحی شبکه، برنامهریزی شهری، و ساختارهای دادهای مورد استفاده قرار میگیرد.
فرض کنید یک گراف وزندار داریم. الگوریتم پریم از یک راس شروع کرده و در هر مرحله کوتاهترین یال را که یکی از رئوس آن در درخت و راس دیگر آن خارج از درخت است، انتخاب میکند. این فرآیند تا زمانی که تمام رئوس گراف در درخت پوشای کمینه قرار گیرند، ادامه مییابد.
در نهایت، الگوریتم یک درخت پوشای کمینه ارائه میدهد که شامل تمام رئوس گراف اصلی است و دارای کمترین مجموع وزن یالها است.
این کد از یک صف اولویت برای انتخاب کمهزینهترین یال در هر مرحله استفاده میکند:
import heapq def prim(graph, start_vertex): visited = set([start_vertex]) edges = [(cost, start_vertex, to) for to, cost in graph[start_vertex].items()] heapq.heapify(edges) mst_cost = 0 mst_edges = [] while edges: cost, from_vertex, to_vertex = heapq.heappop(edges) if to_vertex not in visited: visited.add(to_vertex) mst_cost += cost mst_edges.append((from_vertex, to_vertex, cost)) for to_next, cost_next in graph[to_vertex].items(): if to_next not in visited: heapq.heappush(edges, (cost_next, to_vertex, to_next)) return mst_cost, mst_edges # مثال: گراف وزندار graph = { 'A': {'B': 2, 'C': 3}, 'B': {'A': 2, 'C': 1, 'D': 1, 'E': 4}, 'C': {'A': 3, 'B': 1, 'F': 5}, 'D': {'B': 1, 'E': 1}, 'E': {'B': 4, 'D': 1, 'F': 1}, 'F': {'C': 5, 'E': 1, 'G': 1}, 'G': {'F': 1} } mst_cost, mst_edges = prim(graph, 'A') print("Cost of MST:", mst_cost) print("Edges in MST:", mst_edges)
در این کد، graph
یک دیکشنری است که گراف وزندار را نمایش میدهد. هر کلید نمایانگر یک راس است و مقادیر آن یک دیکشنری دیگر هستند که رئوس متصل به آن راس و وزن یالهای متصل به آنها را نشان میدهد.
تابع prim
الگوریتم پریم را پیادهسازی میکند. این تابع از یک صف اولویت برای نگهداری یالهای مرزی استفاده میکند و در هر مرحله کمهزینهترین یال را انتخاب میکند. این فرآیند تا زمانی که تمام رئوس گراف بازدید شوند، ادامه مییابد.
نتیجه نهایی شامل هزینه کل درخت پوشای کمینه (MST) و لیست یالهایی است که در MST قرار دارند: