กลับไปหน้าบทความ

อ่าน 4 นาที

การจับคู่จำนวนสูงสุด

ใน ทฤษฎีกราฟ การจับคู่ที่มีจำนวนสมาชิกสูงสุด ( maximum -cardinality matching) เป็นกราฟย่อยชนิดพิเศษที่มีประโยชน์ในบริบทการคำนวณหลายอย่าง เมื่อกำหนด กราฟ G มาให้ การ จับคู่...

การจับคู่จำนวนสูงสุด

กราฟทางด้านขวามีจำนวนสมาชิกสูงสุดน้อยกว่ากราฟทางด้านซ้ายอยู่หนึ่งสมาชิก แม้ว่าทั้งสองกราฟจะมีจำนวนจุดยอดเท่ากันก็ตาม

ในทฤษฎีกราฟ การจับคู่ที่มีจำนวนสมาชิกสูงสุด ( maximum -cardinality matching)เป็นกราฟย่อยชนิดพิเศษที่มีประโยชน์ในบริบทการคำนวณหลายอย่าง เมื่อกำหนดกราฟG มาให้ การจับคู่คือกราฟย่อยที่ไม่มีขอบสองขอบใดใช้จุดยอดร่วมกัน จำนวนสมาชิกของการจับคู่คือจำนวนขอบในกราฟย่อย และจำนวนสมาชิกสูงสุดคือจำนวนขอบที่มากที่สุดที่การจับคู่สามารถมีได้ การจับคู่สำหรับกราฟที่กำหนดจะเป็นการจับคู่ที่มีจำนวนสมาชิกสูงสุดก็ต่อเมื่อจำนวนสมาชิกของการจับคู่เท่ากับจำนวนสมาชิกสูงสุดนี้ ถ้าเราคิดว่าแต่ละขอบ "ครอบคลุม" จุดยอดที่เชื่อมต่อกันเพียงครั้งเดียว การจับคู่สูงสุดก็คือการครอบคลุมที่ไม่ทับซ้อนกันที่ใหญ่ที่สุดของกราฟเช่นกัน ถ้าจุดยอดทั้งหมดถูกครอบคลุม เราเรียกว่าการจับคู่สมบูรณ์ (perfect matching ) สำหรับกราฟจำกัด การจับคู่ที่มีจำนวนสมาชิกสูงสุดจะมีอยู่เสมอ แต่โดยปกติแล้วจะไม่เป็นเอกลักษณ์ จำนวนสมาชิกของการจับคู่จะไม่เกินครึ่งหนึ่งของจำนวนจุดยอดและจะไม่เกินจำนวนขอบ

กรณีพิเศษที่สำคัญของปัญหาการจับคู่ที่มีจำนวนสมาชิกมากที่สุด คือ เมื่อGเป็นกราฟสองส่วนที่แสดงถึงความสัมพันธ์ทวิภาคโดยที่จุดยอดVถูกแบ่งออกเป็นจุดยอดด้านซ้ายในXและจุดยอดด้านขวาในYและขอบในEเชื่อมต่อจุดยอดด้านซ้ายกับจุดยอดด้านขวาเสมอ ในกรณีนี้ ปัญหาสามารถแก้ไขได้อย่างมีประสิทธิภาพด้วยอัลกอริทึมที่ง่ายกว่าในกรณีทั่วไป

การคำนวณการจับคู่สูงสุดสำหรับกราฟที่กำหนดเป็นงานพื้นฐานในทฤษฎีกราฟ เชิง คำนวณ[ 1 ] มีทฤษฎีบทลักษณะเฉพาะ ที่ไม่สร้างสรรค์ สำหรับขนาดของการจับคู่สูงสุด บทความนี้เกี่ยวกับการคำนวณการจับคู่สูงสุด

อัลกอริทึมสำหรับกราฟสองส่วน

อัลกอริทึมแบบอิงตามการไหล

วิธีที่ง่ายที่สุดในการคำนวณการจับคู่ที่มีจำนวนสมาชิกสูงสุดคือการใช้อัลกอริทึมของฟอร์ด-ฟุลเคอร์สันอัลกอริทึมนี้แก้ปัญหาทั่วไปของการคำนวณการไหลสูงสุดกราฟสองส่วน( X + Y , E )สามารถแปลงเป็นเครือข่ายการไหลได้ดังนี้

  • เพิ่มจุดเริ่มต้นs ; เพิ่มเส้นเชื่อมจากsไปยังแต่ละจุดยอดในX
  • เพิ่มจุดรับข้อมูลt ; เพิ่มเส้นเชื่อมจากแต่ละจุดยอดในแกนYไปยังt
  • กำหนดความจุ 1 ให้กับขอบแต่ละด้าน

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

  • ปริมาณการไหลเข้าสู่แต่ละจุดยอดในX มีค่าไม่เกิน 1 ดังนั้นปริมาณการไหลออกก็มีค่าไม่เกิน 1 เช่นกัน ดังนั้นจึง มี เส้นเชื่อมที่อยู่ติดกับแต่ละจุดยอดใน Xไม่เกินหนึ่งเส้น
  • ปริมาณการไหลออกของแต่ละจุดยอดในY มีค่าไม่เกิน 1 ดังนั้นปริมาณการไหลเข้าก็มีค่าไม่เกิน 1 เช่นกัน ดังนั้นจึง มี เส้นเชื่อมที่อยู่ติดกับแต่ละจุดยอดใน Yไม่เกินหนึ่งเส้น

อัลกอริทึม Ford–Fulkerson ดำเนินการโดยการค้นหาเส้นทางเสริมจากxXไปยังyY ซ้ำๆ และอัปเดตการจับคู่Mโดยการหาผลต่างสมมาตรของเส้นทางนั้นกับM (โดยสมมติว่ามีเส้นทางดังกล่าวอยู่) เนื่องจากแต่ละเส้นทางสามารถค้นหาได้ใน เวลา O ( E )ดังนั้นเวลาในการทำงานจึงเป็นO ( VE )และการจับคู่สูงสุดประกอบด้วยขอบของEที่นำพาการไหลจากXไปยัง Y

อัลกอริทึมขั้นสูง

อัลกอริทึมที่ได้รับการปรับปรุงนี้คืออัลกอริทึม Hopcroft–Karp ที่ซับซ้อนกว่า ซึ่งค้นหาเส้นทางเสริมหลายเส้นทางพร้อมกัน อัลกอริทึมนี้ใช้เวลาในการทำงาน

อัลกอริทึมของ Chandran และ Hochbaum [ 2 ]สำหรับกราฟสองส่วนจะทำงานในเวลาที่ขึ้นอยู่กับขนาดของการจับคู่สูงสุดkซึ่งสำหรับ| X | < | Y |คือ

การใช้การดำเนินการบูลีนกับคำที่มีขนาดความซับซ้อนจะได้รับการปรับปรุงเพิ่มเติมเป็น[ 2 ]

มีอัลกอริทึมที่มีประสิทธิภาพมากกว่านี้สำหรับกราฟสองส่วนแบบพิเศษบางประเภท:

  • สำหรับ กราฟสองส่วนแบบ เบาบางปัญหาการจับคู่สูงสุดสามารถแก้ไขได้ด้วยอัลกอริทึมของ Madry โดยอาศัยการไหลของกระแสไฟฟ้า[ 3 ]
  • สำหรับ กราฟสองส่วน ระนาบปัญหาสามารถแก้ไขได้ในเวลาO ( n log 3 n )โดยที่nคือจำนวนจุดยอด โดยการลดปัญหาให้เหลือเพียงการไหลสูงสุดที่มีแหล่งกำเนิดและจุดรับหลายจุด[ 4 ]

อัลกอริทึมสำหรับกราฟใดๆ

อัลกอริทึม Blossomค้นหาการจับคู่ที่มีจำนวนสมาชิกสูงสุดในกราฟทั่วไป (ไม่จำเป็นต้องเป็นกราฟสองส่วน) โดยใช้เวลาในการทำงาน ประสิทธิภาพที่ดีกว่าO ( V E )สำหรับกราฟทั่วไป ซึ่งเทียบเท่ากับประสิทธิภาพของอัลกอริทึม Hopcroft–Karpบนกราฟสองส่วน สามารถทำได้ด้วยอัลกอริทึมที่ซับซ้อนกว่ามากของ Micali และ Vazirani [ 5 ]ขอบเขตเดียวกันนี้ทำได้ด้วยอัลกอริทึมของBlum [ 6 ] และอัลกอริทึมของGabowและTarjan [ 7 ]

แนวทางทางเลือกใช้การสุ่มและอิงตาม อัลกอริธึม การคูณเมทริกซ์ แบบเร็ว วิธีนี้ให้อัลกอริธึมแบบสุ่มสำหรับกราฟทั่วไปที่มีความซับซ้อน[ 8 ] ใน ทางทฤษฎีแล้ววิธีนี้ดีกว่าสำหรับ กราฟที่มีความหนาแน่นเพียงพอแต่ในทางปฏิบัติอัลกอริธึมจะช้ากว่า[ 2 ]

อัลกอริทึมอื่นๆ สำหรับงานนี้ได้รับการตรวจสอบโดย Duan และ Pettie [ 9 ] (ดูตารางที่ I) ในแง่ของอัลกอริทึมการประมาณค่าพวกเขายังชี้ให้เห็นว่าอัลกอริทึม Blossomและอัลกอริทึมของ Micali และ Vazirani สามารถมองได้ว่าเป็นอัลกอริทึมการประมาณค่าที่ทำงานในเวลาเชิงเส้นสำหรับขอบเขตข้อผิดพลาดคงที่ใดๆ

การประยุกต์ใช้และการสรุปทั่วไป

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Maximum-cardinality_matching&oldid=1353253256 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การจับคู่จำนวนสูงสุด

ใน ทฤษฎีกราฟ การจับคู่ที่มีจำนวนสมาชิกสูงสุด ( maximum -cardinality matching) เป็นกราฟย่อยชนิดพิเศษที่มีประโยชน์ในบริบทการคำนวณหลายอย่าง เมื่อกำหนด กราฟ G มาให้ การ จับคู่...

อัลกอริทึมแบบอิงตามการไหล

วิธีที่ง่ายที่สุดในการคำนวณการจับคู่ที่มีจำนวนสมาชิกสูงสุดคือการใช้ อัลกอริทึมของฟอร์ด-ฟุลเคอร์สัน อัลกอริทึมนี้แก้ปัญหาทั่วไปของ การคำนวณการไหลสูงสุด กราฟสองส่วน ( X + Y , E ) สามารถแปลงเป็น เครือข่ายการไหล ได้ดังนี้

อัลกอริทึมขั้นสูง

อัลกอริทึมที่ได้รับการปรับปรุงนี้คือ อัลกอริทึม Hopcroft–Karp ที่ซับซ้อนกว่า ซึ่งค้นหาเส้นทางเสริมหลายเส้นทางพร้อมกัน อัลกอริทึมนี้ใช้เวลาในการทำงาน โอ ( วี อี ) {\displaystyle O({\sqrt {V}}E)}

อัลกอริทึมสำหรับกราฟใดๆ

อั ลกอริทึม Blossom ค้นหาการจับคู่ที่มีจำนวนสมาชิกสูงสุดในกราฟทั่วไป (ไม่จำเป็นต้องเป็นกราฟสองส่วน) โดยใช้เวลาในการทำงาน ประสิทธิภาพที่ดีกว่า O ( √ V E ) สำหรับกราฟทั่วไป ซึ่งเทียบเท่ากับประสิทธิภาพของ อัลกอริทึม Hopcroft–Karp บนกราฟสองส่วน...