ขั้นตอนวิธีของครูสกาล (อังกฤษ: Kruskal's algorithm) เป็นขั้นตอนวิธีแบบละโมบในทฤษฎีกราฟ ที่ใช้หา ต้นไม้แบบทอดข้ามน้อยสุด (Minimum spanning tree) สำหรับกราฟเชื่อมโยงแบบมีน้ำหนัก นั้นหมายความว่าเราจะได้เซตย่อยของเส้นเชื่อมในต้นไม้ที่เชื่อมทุกๆปม โดยที่ผลรวมของน้ำหนักบนเส้นเชื่อมจะมีค่าน้อยที่สุด หากกราฟไม่เป็นกราฟเชื่อมโยง เราจะได้ ป่าแบบทอดข้ามน้อยสุด (คือต้นไม้แบบทอดข้ามน้อยสุดแต่ละต้นในกราฟ)
ขั้นตอนวิธีนี้ปรากฏครั้งแรกบนนิตยสารทางวิทยาศาสตร์ชื่อ Proceedings of the American Mathematical Society หน้า. 48-50 ในปี 1956, และเขียนโดย
และยังมีขั้นตอนวิธีสำหรับแก้ปัญหาแบบเดียวกัน เช่น ขั้นตอนวิธีของพริม ขั้นตอนวิธีการลบย้อนกลับ และ ขั้นตอนวิธีของโบรุฟกา
อธิบาย
- สร้างป่า F (เซตของต้นไม้) ที่มีจุดยอดหรือปมในกราฟเป็นต้นไม้
- สร้างเซต S ที่บรรจุทุกเส้นเชื่อมในกราฟไว้
- ในขณะที่ S ไม่เป็นเซตว่าง และ F ยังไม่ทอดข้าม
- ลบเส้นเชื่อมที่มีน้ำหนักน้อยที่สุดจาก S
- ถ้าเส้นเชื่อมนั้นเชื่อมจุดสองจุดที่ต่างกันบนต้นไม้ แล้วเพิ่มเข้าไปในป่าดังกล่าวรวมต้นไม้สองต้นให้เป็นต้นเดียว
เมื่อขั้นตอนวิธีสิ้นสุดลง ป่าจะอยู่ในรูปป่าแบบทอดข้ามน้อยสุดของกราฟ ถ้ากราฟเป็นกราฟเชื่อมโยง ป่าดังกล่าวจะประกอบกันในรูปของต้นไม้แบบทอดข้ามน้อยสุด
รหัสเทียม
จากรหัสสามารถทำให้เกิดผลด้วย (disjoint-set data structure)
KRUSKAL(G): 1 A = ∅ 2 foreach v ∈ G.V: 3 MAKE-SET(v) 4 foreach (u, v) ordered by weight(u, v), increasing: 5 if FIND-SET(u) ≠ FIND-SET(v): 6 A = A ∪ {(u, v)} 7 UNION(u, v) 8 return A
ประสิทธิภาพ
ถ้า E คือจำนวนเส้นเชื่อมในกราฟ และ V คือจำนวนของจุดยอด ขั้นตอนวิธีนี้สามารถทำงานได้ในเวลา O(E E) หรือเท่ากับ O(E log V) โดยในทุกโครงสร้าข้อมูล เวลาการทำงานจะเท่าเทียมกันเพราะ:
- E มีค่ามากที่สุดประมาณ และ นั่นคือ O(log V)
- แต่ละจุดยอดเดี่ยวเป็นส่วนประกอบแยกของป่าแบบทอดข้ามน้อยสุด ถ้าเราไม่สนใจจุดยอดเดี่ยว เราจะได้ V ≤ E+1 ดังนั้น log V คือ O(log E)
เราสามารถเพิ่มประสิทธิภาพได้ดังนี้ เริ่มจากเรียงลำดับเส้นเชื่อมตามน้ำหนักใช้เวลา O(E log E) ขั้นตอนนี้อนุญาตให้ ลบเส้นเชื่อมที่มีน้ำหนักน้อยที่สุดจาก S เพื่อที่จะดำเนินการในเวลาคงที่ ขั้นตอนต่อไปเราใช้ เพื่อเก็บลู่ของจุดยอดต้องการการปฏิบัติการใน O(E) การดำเนินการ ทุกๆ โครงสร้างข้อมูลแบบเซตไม่ต่อเนื่อง สามารถทำได้ปฏิบัติการได้ใน O(E) การดำเนินการ ในเวลา O(E log V) ดังนั้นจะได้เวลารวม O(E log E) = O(E log V)
ถ้าได้เรียงลำดับเส้นเชื่อมก่อนแล้วหรือสามารถเรียงดำลับในเวลาเชิงเส้น (เช่น (counting sort)) หรือ (radix sort)) ขั้นตอนวิธีนี้ลดความซับซ้อนของโครงสร้างข้อมูลแบบเซตไม่ต่อเนื่อง เพื่อลดเวลาการทำงานใน O(E α(V)) เมื่อ α เป็นค่าที่มีอัตราการเติบโตน้อยมากๆ
ตัวอย่าง
ดาวน์โหลดข้อมูลตัวอย่าง 2012-07-16 ที่ เวย์แบ็กแมชชีน
รูปภาพ | คำอธิบาย |
---|---|
AD และ CE เป็นเส้นเชื่อมที่สั้นที่สุดมีความยาว 5 หน่วย แล้วทำการเลือก AD โดย และทำการเน้นเส้นเชื่อมนั้น | |
CE เป็นเส้นเชื่อมที่สั้นที่สุด ณ ตอนนี้ที่ไม่เป็นวัฏจักรโดยมีความยาว 5 แล้วทำการเน้นเป็นเส้นเชื่อมที่สอง | |
เส้นเชื่อมต่อไปคือ DF มีความยาว 6 หน่วย ได้ถูกเน้นตามวิธีการเดิม | |
เส้นเชื่อมที่สั้นที่สุดต่อไปคือ AB และ BE ทั้งคือมีความยาว 7 หน่วย เลือก AB โดยใช้หลักพลการ เส้นเชื่อม BD ได้ถูกเน้นเป็นสีแดงเพราะมันอยู่ในแนวเดินระหว่าง B และ D อยู่แล้ว ดังนั้นถ้าเราเลือกจะเกิดวัฏจักรขึ้น (ABD) | |
กระทำเช่นเดิมไปเรื่อยๆทำการเน้นเส้นเชื่อมที่สั้นที่สุดต่อไป BE ยาว 7 หน่วย และหลายๆเส้นเชื่อมจะถูกเน้นสีแดง: BC เพราะจะเกิดวงวน BCE DE เพราะจะเกิดวงวน DEBA และ FE เพราะจะเกิด FEBAD | |
ในที่สุด เมื่อกระบวนการเสร็จสิ้นโดยเลือก EG ยาว 9 หน่วยก็จะได้ต้นไม้แบบทอดข้ามน้อยที่สุด |
พิสูจน์ความถูกต้อง
การพิสูจน์ประกอบไปด้วยสองส่วน คือ ส่วนแรกเป็นการพิสูจน์ว่าขั้นตอนวิธีนี้สร้างต้นไม้แบบทอดข้ามได้ ส่วนที่สองคือพิสูจน์ว่าต้นไม้ทอดข้ามดังกล่าวมีน้ำหนักรวมน้อยที่สุด
ต้นไม้ทอดข้าม
ให้ P เป็นกราฟเชื่อมโยงที่มีน้ำหนัก และให้ Y เป็นกราฟย่อยของ P ที่สร้างโดยขั้นตอนวิธีนี้ Y ไม่มีวัฏจักร มีหนึ่งต้นไม้ย่อย และไม่มีต้นไม้สองต้นที่แตกต่างกัน Y ไม่สามารถไม่เชื่อมโยงได้ เพราะ เส้นเชื่อมแรกที่พบจะเชื่อมสองจุดยอดใน Y แล้วจะถูกเพิ่มตามขั้นตอนวิธี ดังนั้น Y จึงเป็นต้นไม้แบบทอดข้ามของ P
ความต่ำสุด
เราจะแสดงว่าประพจน์ P เป็นจริงโดยใช้ ถ้า F เป็นเซตของเส้นเชื่อมที่ถูกเลือกที่แต่ละระดับของขั้นตอนวิธี แล้วจะได้ต้นไม้แบบทอดข้ามน้อยที่สุดที่มี F อยู่ด้วย
- ชัดเจนว่า P เป็นจริงตั้งแต่เริ่มต้น เมื่อ F เป็นเซตว่าง ทุกต้นไม้แบบทอดข้ามน้อยที่สุดจะเป็นเช่นนั้น และถ้ามีอย่างน้อยหนึ่งเส้นเชื่อมก็จะเป็นต้นไม้แบบทอดข้ามน้อยที่สุดเพราะเป็นกราฟเชื่อมโยงที่มีน้ำหนัก
- สมมติให้ P เป็นจริงสำหรับบางเซตของเส้นเชื่อม F และให้ T เป็นต้นไม้แบบทอดข้ามน้อยที่สุดที่บรรจุ F ไว้ ถ้าเลือกเส้นเชื่อมถัดไป e ก็ยังอยู่ใน T ดังนั้น P เป็นจริงสำหรับ F + e มิฉะนั้น T + e จะมีวัฏจักร C และเส้นเชื่อมอื่น f ที่อยู่ใน C แต่ไม่อยู่ใน F (ถ้าไม่มีเส้นเชื่อม f เลยแล้ว e จะไม่อยู่เพิ่มเข้าไปใน F เพราะการกระทำนั้นจะทำให้เกิดวัฏจักร C) แล้ว T − f + e เป็นต้นไม้ และมีน้ำหนักเท่ากับ T เพราะ T เป็นมีน้ำหนักน้อยที่สุด และน้ำหนักของ f จะไม่น้อยไปกว่า e มิฉะนั้นขั้นตอนวิธีจะเลือก f แทน e ดังนั้น T − f + e คือต้นไม้แบบทอดข้ามน้อยที่สุด ที่มี F + e
- ดังนั้นจากอุปนัยเชิงคณิตศาสตร์จึงสรุปได้ว่า P เป็นจริง เมื่อ F เป็นต้นไม้ทอดข้าม
ดูเพิ่ม
อ้างอิง
Kruskal's algorithm
แหล่งข้อมูลอื่น
- Kruskal's algorithm explanation and example with c implementation
- Download the example minimum spanning tree data. 2012-07-16 ที่ เวย์แบ็กแมชชีน
- Animation of Kruskal's algorithm (Requires Java plugin)
- download kruskal algorithm Implement with C++ and java(graphical)(Requires java 7+) 2013-12-31 ที่ เวย์แบ็กแมชชีน
- C# Implementation
- Open source java graph library with implementation of Kruskal's algorithm
- Auto-generated PowerPoint Slides for Teaching and Learning
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
khntxnwithikhxngkhruskal xngkvs Kruskal s algorithm epnkhntxnwithiaebblaombinthvsdikraf thiichha tnimaebbthxdkhamnxysud Minimum spanning tree sahrbkrafechuxmoyngaebbminahnk nnhmaykhwamwaeracaidestyxykhxngesnechuxmintnimthiechuxmthukpm odythiphlrwmkhxngnahnkbnesnechuxmcamikhanxythisud hakkrafimepnkrafechuxmoyng eracaid paaebbthxdkhamnxysud khuxtnimaebbthxdkhamnxysudaetlatninkraf karcalxngkarthangankhxngkhntxnwithikhxngkhruskal khntxnwithinipraktkhrngaerkbnnitysarthangwithyasastrchux Proceedings of the American Mathematical Society hna 48 50 inpi 1956 aelaekhiynody aelayngmikhntxnwithisahrbaekpyhaaebbediywkn echn khntxnwithikhxngphrim khntxnwithikarlbyxnklb aela khntxnwithikhxngobrufkaxthibaysrangpa F estkhxngtnim thimicudyxdhruxpminkrafepntnim srangest S thibrrcuthukesnechuxminkrafiw inkhnathi S imepnestwang aela F yngimthxdkham lbesnechuxmthiminahnknxythisudcak S thaesnechuxmnnechuxmcudsxngcudthitangknbntnim aelwephimekhaipinpadngklawrwmtnimsxngtnihepntnediyw emuxkhntxnwithisinsudlng pacaxyuinruppaaebbthxdkhamnxysudkhxngkraf thakrafepnkrafechuxmoyng padngklawcaprakxbkninrupkhxngtnimaebbthxdkhamnxysudrhsethiymcakrhssamarththaihekidphldwy disjoint set data structure KRUSKAL G 1 A 2 b foreach b v G V 3 MAKE SET v 4 b foreach b u v ordered by weight u v increasing 5 b if b FIND SET u FIND SET v 6 A A u v 7 UNION u v 8 b return b Aprasiththiphaphtha E khuxcanwnesnechuxminkraf aela V khuxcanwnkhxngcudyxd khntxnwithinisamarththanganidinewla O E E hruxethakb O E log V odyinthukokhrngsrakhxmul ewlakarthangancaethaethiymknephraa E mikhamakthisudpraman V2 displaystyle V 2 aela log V2 2log V displaystyle log V 2 2 log V displaystyle nnkhux O log V aetlacudyxdediywepnswnprakxbaeykkhxngpaaebbthxdkhamnxysud thaeraimsniccudyxdediyw eracaid V E 1 dngnn log V khux O log E erasamarthephimprasiththiphaphiddngni erimcakeriyngladbesnechuxmtamnahnkichewla O E log E khntxnnixnuyatih lbesnechuxmthiminahnknxythisudcakSephuxthicadaeninkarinewlakhngthi khntxntxiperaich ephuxekblukhxngcudyxdtxngkarkarptibtikarin O E kardaeninkar thuk okhrngsrangkhxmulaebbestimtxenuxng samarththaidptibtikaridin O E kardaeninkar inewlaO ElogV dngnncaidewlarwmO ElogE O ElogV thaideriyngladbesnechuxmkxnaelwhruxsamartheriyngdalbinewlaechingesn echn counting sort hrux radix sort khntxnwithinildkhwamsbsxnkhxngokhrngsrangkhxmulaebbestimtxenuxng ephuxldewlakarthanganin O E a V emux a epnkhathimixtrakaretibotnxymaktwxyangdawnohldkhxmultwxyang 2012 07 16 thi ewyaebkaemchchin rupphaph khaxthibayAD aela CE epnesnechuxmthisnthisudmikhwamyaw 5 hnwy aelwthakareluxk AD ody aelathakarennesnechuxmnnCE epnesnechuxmthisnthisud n txnnithiimepnwtckrodymikhwamyaw 5 aelwthakarennepnesnechuxmthisxngesnechuxmtxipkhux DF mikhwamyaw 6 hnwy idthukenntamwithikaredimesnechuxmthisnthisudtxipkhux AB aela BE thngkhuxmikhwamyaw 7 hnwy eluxk AB odyichhlkphlkar esnechuxm BD idthukennepnsiaedngephraamnxyuinaenwedinrahwang B aela D xyuaelw dngnnthaeraeluxkcaekidwtckrkhun ABD krathaechnedimiperuxythakarennesnechuxmthisnthisudtxip BE yaw 7 hnwy aelahlayesnechuxmcathukennsiaedng BC ephraacaekidwngwn BCE DE ephraacaekidwngwn DEBA aela FE ephraacaekid FEBADinthisud emuxkrabwnkaresrcsinodyeluxk EG yaw 9 hnwykcaidtnimaebbthxdkhamnxythisudphisucnkhwamthuktxngkarphisucnprakxbipdwysxngswn khux swnaerkepnkarphisucnwakhntxnwithinisrangtnimaebbthxdkhamid swnthisxngkhuxphisucnwatnimthxdkhamdngklawminahnkrwmnxythisud tnimthxdkham ih P epnkrafechuxmoyngthiminahnk aelaih Y epnkrafyxykhxng P thisrangodykhntxnwithini Y immiwtckr mihnungtnimyxy aelaimmitnimsxngtnthiaetktangkn Y imsamarthimechuxmoyngid ephraa esnechuxmaerkthiphbcaechuxmsxngcudyxdin Y aelwcathukephimtamkhntxnwithi dngnn Y cungepntnimaebbthxdkhamkhxng P khwamtasud eracaaesdngwapraphcn P epncringodyich tha F epnestkhxngesnechuxmthithukeluxkthiaetlaradbkhxngkhntxnwithi aelwcaidtnimaebbthxdkhamnxythisudthimi F xyudwy chdecnwa P epncringtngaeterimtn emux F epnestwang thuktnimaebbthxdkhamnxythisudcaepnechnnn aelathamixyangnxyhnungesnechuxmkcaepntnimaebbthxdkhamnxythisudephraaepnkrafechuxmoyngthiminahnk smmtiih P epncringsahrbbangestkhxngesnechuxm F aelaih T epntnimaebbthxdkhamnxythisudthibrrcu F iw thaeluxkesnechuxmthdip e kyngxyuin T dngnn P epncringsahrb F e michann T e camiwtckr C aelaesnechuxmxun f thixyuin C aetimxyuin F thaimmiesnechuxm f elyaelw e caimxyuephimekhaipin F ephraakarkrathanncathaihekidwtckr C aelw T f e epntnim aelaminahnkethakb T ephraa T epnminahnknxythisud aelanahnkkhxng f caimnxyipkwa e michannkhntxnwithicaeluxk f aethn e dngnn T f e khuxtnimaebbthxdkhamnxythisud thimi F e dngnncakxupnyechingkhnitsastrcungsrupidwa P epncring emux F epntnimthxdkhamduephimkhntxnwithikhxngidkhstra khntxnwithikhxngphrim khntxnwithikarlbyxnklb khntxnwithikhxngobrufkaxangxingKruskal s algorithmaehlngkhxmulxunKruskal s algorithm explanation and example with c implementation Download the example minimum spanning tree data 2012 07 16 thi ewyaebkaemchchin Animation of Kruskal s algorithm Requires Java plugin download kruskal algorithm Implement with C and java graphical Requires java 7 2013 12 31 thi ewyaebkaemchchin C Implementation Open source java graph library with implementation of Kruskal s algorithm Auto generated PowerPoint Slides for Teaching and Learning