การวางหลักเกณฑ์ทั่วไปของอัลกอริธึมฮังการีเป็นกราฟทั่วไป


14

อัลกอริทึมฮังการีเป็นขั้นตอนวิธีการเพิ่มประสิทธิภาพ combinatorial ซึ่งจะช่วยแก้น้ำหนักสูงสุดที่ฝ่ายปัญหาที่ตรงกันในเวลาพหุนามและคาดว่าจะมีการพัฒนาต่อมาที่สำคัญวิธีการปฐม-คู่ อัลกอริทึมได้รับการพัฒนาและเผยแพร่โดย Harold Kuhn ในปี 1955 ซึ่งให้ชื่อ "อัลกอริธึมฮังการี" เนื่องจากอัลกอริทึมนั้นมาจากผลงานก่อนหน้าของนักคณิตศาสตร์ชาวฮังการีสองคน: DénesKőnigและJenőEgerváry Munkres ตรวจสอบอัลกอริทึมในปี 1957 และสังเกตว่ามันเป็น polytime แน่นอน ตั้งแต่นั้นมาอัลกอริทึมที่รู้จักกันว่าอัลกอริทึม Kuhn-Munkres

แม้ว่าฮังการีจะมีแนวคิดพื้นฐานของวิธีการแบบสองเท่า แต่ก็แก้ปัญหาการจับคู่แบบสองฝ่ายที่มีน้ำหนักสูงสุดโดยตรงโดยไม่ต้องใช้เครื่องจักรเชิงเส้น (LP) ใด ๆ ดังนั้นในการตอบคำถามต่อไปนี้Jukka Suomela ให้ความเห็น

แน่นอนว่าคุณสามารถแก้ไข LP ใด ๆ ได้โดยใช้ตัวแก้จุดประสงค์ทั่วไปของ LP แต่โดยทั่วไปอัลกอริทึมพิเศษจะมีประสิทธิภาพที่ดีกว่ามาก [... ] นอกจากนี้คุณยังสามารถหลีกเลี่ยงปัญหาเช่นการใช้ตัวเลขที่มีเหตุผลและจำนวนจุดลอยตัว; ทุกสิ่งสามารถทำได้อย่างง่ายดายด้วยจำนวนเต็ม

กล่าวอีกนัยหนึ่งคุณไม่ต้องกังวลเกี่ยวกับวิธีการปัดเศษเหตุผล / วิธีแก้ปัญหาจุดลอยตัวจากตัวแก้ LP เพื่อให้ได้น้ำหนักสูงสุดกลับมาซึ่งการจับคู่ที่สมบูรณ์แบบที่สุดของกราฟสองส่วนที่กำหนด

คำถามของฉันมีดังต่อไปนี้:

มีอัลกอริธึมทั่วไปของฮังการีที่ใช้กับกราฟที่ไม่มีการบอกทิศทางทั่วไปโดยไม่ใช้เครื่องจักร LP คล้ายกับจิตวิญญาณของอัลกอริทึมดั้งเดิมของฮังการีหรือไม่?

ฉันชอบงานนิทรรศการที่ทันสมัยและอ่านง่ายแทนที่จะเป็นกระดาษที่ซับซ้อนบางฉบับ แต่ตัวชี้ใด ๆ จะได้รับการชื่นชมมาก!

ขอขอบคุณล่วงหน้าและ Merry Christmas !!!


อัปเดต:คำถามได้รับคำตอบอย่างดีจาก Arman ด้านล่าง ผมแค่อยากจะชี้ให้เห็นว่าอีกหนึ่งแหล่งที่ดีในการศึกษาของเอ็ดมันด์ Blossom อัลกอริทึม (สำหรับกรณีถ่วงน้ำหนัก) เป็นบทที่ 11 ของ Combinatorial การเพิ่มประสิทธิภาพโดย Korte และ Vygen Google หนังสือแสดงให้เห็นเกือบทุกส่วนที่ฉันต้องเข้าใจอัลกอริทึม


2
อัลกอริทึมการจับคู่ของ Edmonds เป็นอย่างไร? en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm
Arman

1
@Arman - นั่นคือสิ่งที่ฉันคิดเช่นกัน ขอบคุณสำหรับลิงค์ Wikipedia มีรายละเอียดที่น่าประหลาดใจเกี่ยวกับอัลกอริทึม Blossom ของ Edmond
Abraham Flaxman

2
โดยวิธีการอัลกอริทึมการจับคู่ของเอ็ดมันด์ก็ขึ้นอยู่กับวิธีการ Primal-Dual
Arman

1
ขอบคุณ Arman ลิงก์วิกิพีเดียชี้ไปที่หนังสือ "Lovász, László; Plummer, Michael (1986). ทฤษฎีที่ตรงกัน" สำหรับรุ่นถ่วงน้ำหนักของอัลกอริทึมของ Edmonds ฉันควรตรวจสอบหนังสือเล่มนั้นจริงๆ ขอบคุณมากสำหรับความคิดเห็นของคุณ! บางทีถ้ามีใครในพวกคุณสามารถอธิบายได้ในระดับสูงว่าอัลกอริทึมทั่วไปของอัลกอริทึมฮังการีคุณสามารถทำให้มันแน่นอนคำตอบ
Dai Le

1
ฉันคิดว่ามันเป็นคำตอบที่ดีเหมือน :) Arman คุณควรเพิ่มเช่นนี้
Suresh Venkat

คำตอบ:


16

อัลกอริทึมการจับคู่ของ Edmonds (เรียกอีกอย่างว่าอัลกอริทึม Blossom) แก้ปัญหาการจับคู่สูงสุดในกราฟทั่วไป จริงๆแล้วมันเป็นลักษณะทั่วไปของวิธีการสลับเส้นทาง (ผมไม่แน่ใจว่าชื่อของวิธีการ แต่มันเป็นวิธีการ shoud Königฮอลล์.) นั้นโดยทั่วไปพบว่าการเพิ่มเส้นทาง (ดูหน้าวิกิพีเดีย: http://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm ) เพื่อขยาย การจับคู่ปัจจุบันและหยุดหากไม่มีเส้นทางเพิ่มอีก ในกราฟทั่วไปปัญหาเดียวที่เกิดขึ้นในรอบคี่ ในอัลกอริทึมการจับคู่ของเอ็ดมันด์วงจรคี่จะหดตัว (บุปผา) และใช้กลับไปหาวิธีแก้ปัญหา

นอกจากนี้ยังมีการโต้ตอบระหว่าง Blossom Algorithm กับวิธี Primal Dual รอบคี่ทำให้เกิดจุดสุดขั้วบางส่วน ดังนั้นเราจึงเพิ่มความไม่สมดุลที่เรียกว่า Blossom สำหรับวงจรคี่แต่ละรอบ

การจับคู่ที่สมบูรณ์แบบขั้นต่ำถ่วงน้ำหนักและปัญหาการจับคู่น้ำหนักสูงสุดสามารถจัดการได้ด้วยวิธีนี้

สำหรับรายละเอียดของอัลกอริทึมโปรดดูที่ http://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm http://www.cs.berkeley.edu/~karp/greatalgo/lecture05.pdf

สำหรับสูตรทางคณิตศาสตร์และวิธี primal-dual ที่สอดคล้องกันดู http://webdocs.cs.ualberta.ca/~mreza/courses/CombOpt09/lecture4.pdf


9

สองปีที่ผ่านมาเมื่อทำการวิจัยอัลกอริทึม Blossom (ไม่ถ่วงน้ำหนัก) ฉันพบบันทึกที่ยอดเยี่ยมสองชุดโดย Tarjan และ Zwick หนึ่งชุด พวกเขาทำให้กรณีที่ไม่ได้ถ่วงดูค่อนข้างตรงไปตรงมาและฉันสามารถใช้มันใน Mathematica โดยใช้การเรียกซ้ำ มันใช้งานได้ค่อนข้างดี

หมายเหตุที่ฉันพบว่ามีประโยชน์คือ

http://www.cs.tau.ac.il/~zwick/grad-algo-06/match.pdf และ http://www.cs.dartmouth.edu/~ac/Teach/CS105-Winter05/Handouts/ tarjan-blossom.pdf

พวกเขากลั่นมันทั้งหมดลงไปในเงื่อนไขที่ง่ายมากที่ช่วยให้หนึ่งที่จะคิดซ้ำแล้วตามที่ระบุไว้โปรแกรมซ้ำ

ฉันคิดว่ามันควรจะใช้ได้ในกรณีที่มีน้ำหนักซึ่งฉันพยายามนำไปใช้ตอนนี้


และฉันมีการสาธิตที่สามารถดูได้โดยทุกคนที่มีซอฟแวร์ฟรี: คนแรกที่แสดงให้เห็นเบ่งบานอย่างสวยงาม .... < demonstrations.wolfram.com/... > < demonstrations.wolfram.com/TheHungarianMaximumMatchingAlgorithm > < demonstrations.wolfram.com/ PlacingDominoesOnACheckerboard >
Stan Wagon

และฉันได้ตั้งโปรแกรมดอกที่ไม่ถ่วงน้ำหนักตามที่กำหนดไว้ใน Korte / Vygen ฉันเห็นการเร่งความเร็วสองสามครั้งเป็นไปได้สำหรับรหัสของเขา (เช่นเริ่มต้นด้วยการจับคู่สูงสุดไม่ใช่สิ่งใด) แต่สิ่งที่ดีคือรหัสขั้นตอนของเขาได้รับในรูปแบบที่สามารถแปลรหัสทำงานได้อย่างง่ายดาย ถัดไป: ดอกหนักซึ่งยากมาก
Stan Wagon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.