fbpx
วิกิพีเดีย

ขั้นตอนวิธีของพริม

ขั้นตอนวิธีของพริม (อังกฤษ: Prim's algorithm)Prim's Algorithm ถูกพัฒนาโดยนักคณิตศาสตร์ชื่อ Vojtech Jarnik ในปี1930 ต่อมาถูก พัฒนาต่อโดยนักคอมพิวเตอร์ชื่อ Robert C. Prim ในปี1957 และ Edsger Dijkstra ในปี1959 ดังนั้น อัลกอริทึมนี้บางทีจึงมักเรียกว่า DJP Algorithm , Jarnik Algorithm หรือ Prim-Jarnik Algorithm ซึ่งเป็นอัลกอริทึมที่ใช้ในการหาขนาด หรือน้ำหนักของต้นไม้ทอดข้ามที่น้อยที่สุด

เราจะเริ่มจากการทำ minimum spanning tree เล็ก ๆในกราฟก่อน จากนั้นจะค่อยๆเลือก edge ที่ ไม่ต่อกับ minimum spanning tree ย่อย ๆเดิมมาต่อเพิ่มไปเรื่อย ๆ จนได้ครบทุก node ซึ่ง algorithm ตัวนี้ จะ implement คล้ายๆกับ Dijkstra's Algorithm

ตัวอย่างขั้นตอนวิธีการของพริม

codeขั้นตอนวิธีของพริม

import heapq def prim(nodes,edges): if nodes==None and edges==None: return None conn = {} for u, v, w in edges: if u not in conn:  conn[u] = [(w,u,v)]  # print(conn[u])  else:  conn[u].append((w, u, v))  # print(conn[u])  if v not in conn:  conn[v] = [(w,v,u)]  # print(conn[v])  else:  conn[v].append((w, v, u))  # print(conn[v])   node = nodes[0] usable_edges = conn[node] heapq.heapify(usable_edges) Q = set(node) mst = [] while len(usable_edges) > 0:  wt, from_node, to_node = heapq.heappop(usable_edges)  if to_node not in Q:  Q.add(to_node)  mst.append((from_node, to_node, wt))  # print(mst)   for edge in conn[to_node]:   ww, uu, vv = edge  if vv not in Q:  heapq.heappush(usable_edges, (ww, uu, vv)) return mst 

testcase ขั้นตอนวิธีของพริม

import heapq from prim import prim # scenario1:กราฟทั่วไป # Given:มีเส้นเชื่อมดังที่กำหนด # When:หาระยะที่สั้นที่สุดที่เชื่อมทุกnode # Then:ได้ผลลัพธ์คือ[('A', 'D', 5),('D', 'F', 6),('A', 'B', 7),('B', 'E', 7),('E', 'C', 5),('E', 'G', 9)] def test_case1(): edges = [ ("A", "B", 7), ("A", "D", 5),  ("B", "C", 8), ("B", "D", 9), ("B", "E", 7), ("C", "E", 5), ("D", "E", 15), ("D", "F", 6), ("E", "F", 8), ("E", "G", 9), ("F", "G", 11)] nodes = ["A","B","C","E","F","G"] mst=[('A', 'D', 5),('D', 'F', 6),('A', 'B', 7),('B', 'E', 7),('E', 'C', 5),('E', 'G', 9)] assert prim(nodes,edges )==mst # scenario2:กราฟทั่วไปแต่มีขนาดที่เล็กลง # Given:มีเส้นเชื่อมดังที่กำหนด # When:หาระยะที่สั้นที่สุดที่เชื่อมทุกnode # Then:ได้ผลลัพธ์คือ[ ("A", "C", 3),("A", "B", 4),("B", "D", 2)] def test_case2(): edges = [ ("A", "B", 4),("A", "C", 3),("A", "D", 5),("B", "D", 2)] nodes = ["A","B","C",] mst=[ ("A", "C", 3),("A", "B", 4),("B", "D", 2)] assert prim(nodes,edges )==mst # scenario3:ไม่มีกราฟ # Given:มีเส้นเชื่อมดังที่กำหนด # When:หาระยะที่สั้นที่สุดที่เชื่อมทุกnode # Then:ได้ผลลัพธ์คือNone def test_case3(): edges =None nodes =None mst=None assert prim(nodes,edges )==mst # scenario4:มีค่าซ้ำกัน # Given:มีเส้นเชื่อมดังที่กำหนด # When:หาระยะที่สั้นที่สุดที่เชื่อมทุกnode # Then:ได้ผลลัพธ์คือ[ ("A", "B", 2),("A", "E",2 ),("A", "C", 3),("B", "D", 4)] def test_case4(): edges =[ ("A", "B", 2), ("A", "E", 2),("A", "C", 3),("B", "D", 4), ("D", "C", 5), ("E", "C", 6)] nodes =["A","B","C","E"] mst=[ ("A", "B", 2),("A", "E",2 ),("A", "C", 3),("B", "D", 4)] assert prim(nodes,edges )==mst 

Big-o

 Big-o Prim’s algorithm Big o=o(n^2logn) Best case กรณีไม่มีmatrix  Big o=o(1) Worst case กรณีมีmatrix Big o=o(n^2logn) 


  1. http://www.mwit.ac.th/~jeab/sheet40206/Prim.pdf
  2. https://www.geeksforgeeks.org/greedy-algorithms-set-5-prims-minimum-spanning-tree-mst-2/
  3. http://www.mwit.ac.th/~jeab/sheet40206/Prim.pdf
  4. https://en.wikipedia.org/wiki/Prim%27s_algorithm

นตอนว, ของพร, งกฤษ, prim, algorithm, prim, algorithm, กพ, ฒนาโดยน, กคณ, ตศาสตร, vojtech, jarnik, ในป, 1930, อมาถ, ฒนาต, อโดยน, กคอมพ, วเตอร, robert, prim, ในป, 1957, และ, edsger, dijkstra, ในป, 1959, งน, ลกอร, มน, บางท, งม, กเร, ยกว, algorithm, jarnik, algorit. khntxnwithikhxngphrim xngkvs Prim s algorithm Prim s Algorithm thukphthnaodynkkhnitsastrchux Vojtech Jarnik inpi1930 txmathuk phthnatxodynkkhxmphiwetxrchux Robert C Prim inpi1957 aela Edsger Dijkstra inpi1959 dngnn xlkxrithumnibangthicungmkeriykwa DJP Algorithm Jarnik Algorithm hrux Prim Jarnik Algorithm sungepnxlkxrithumthiichinkarhakhnad hruxnahnkkhxngtnimthxdkhamthinxythisuderacaerimcakkartha minimum spanning tree elk inkrafkxn caknncakhxyeluxk edge thi imtxkb minimum spanning tree yxy edimmatxephimiperuxy cnidkhrbthuk node sung algorithm twni ca implement khlaykb Dijkstra s Algorithm twxyangkhntxnwithikarkhxngphrimcodekhntxnwithikhxngphrim aekikhimport heapq def prim nodes edges if nodes None and edges None return None conn for u v w in edges if u not in conn conn u w u v print conn u else conn u append w u v print conn u if v not in conn conn v w v u print conn v else conn v append w v u print conn v node nodes 0 usable edges conn node heapq heapify usable edges Q set node mst while len usable edges gt 0 wt from node to node heapq heappop usable edges if to node not in Q Q add to node mst append from node to node wt print mst for edge in conn to node ww uu vv edge if vv not in Q heapq heappush usable edges ww uu vv return mst testcase khntxnwithikhxngphrim aekikh import heapq from prim import prim scenario1 krafthwip Given miesnechuxmdngthikahnd When harayathisnthisudthiechuxmthuknode Then idphllphthkhux A D 5 D F 6 A B 7 B E 7 E C 5 E G 9 def test case1 edges A B 7 A D 5 B C 8 B D 9 B E 7 C E 5 D E 15 D F 6 E F 8 E G 9 F G 11 nodes A B C E F G mst A D 5 D F 6 A B 7 B E 7 E C 5 E G 9 assert prim nodes edges mst scenario2 krafthwipaetmikhnadthielklng Given miesnechuxmdngthikahnd When harayathisnthisudthiechuxmthuknode Then idphllphthkhux A C 3 A B 4 B D 2 def test case2 edges A B 4 A C 3 A D 5 B D 2 nodes A B C mst A C 3 A B 4 B D 2 assert prim nodes edges mst scenario3 immikraf Given miesnechuxmdngthikahnd When harayathisnthisudthiechuxmthuknode Then idphllphthkhuxNone def test case3 edges None nodes None mst None assert prim nodes edges mst scenario4 mikhasakn Given miesnechuxmdngthikahnd When harayathisnthisudthiechuxmthuknode Then idphllphthkhux A B 2 A E 2 A C 3 B D 4 def test case4 edges A B 2 A E 2 A C 3 B D 4 D C 5 E C 6 nodes A B C E mst A B 2 A E 2 A C 3 B D 4 assert prim nodes edges mstBig o aekikhBig o Prim s algorithm Big o o n 2logn Best case krniimmimatrix Big o o 1 Worst case krnimimatrix Big o o n 2logn 1 2 3 4 http www mwit ac th jeab sheet40206 Prim pdf https www geeksforgeeks org greedy algorithms set 5 prims minimum spanning tree mst 2 http www mwit ac th jeab sheet40206 Prim pdf https en wikipedia org wiki Prim 27s algorithmekhathungcak https th wikipedia org w index php title khntxnwithikhxngphrim amp oldid 7616858, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม