การจับคู่กราฟสองฝั่งที่มีจำนวนมากที่สุด
หาการจับคู่ที่มีจำนวนคู่มากที่สุดระหว่างสองกลุ่มกลุ่มละไม่เกิน 32 จุดยอดจากเซตเส้นเชื่อมที่อนุญาต.
def maximum_matching(edges, right_count):
if type(right_count) is not int or not 0 <= right_count <= 32 or type(edges) not in (list, tuple) or len(edges) > 32:
raise ValueError("matching.size")
if any(type(row) not in (set, frozenset) or any(type(v) is not int or not 0 <= v < right_count for v in row) for row in edges):
raise ValueError("matching.edge")
owners = [-1] * right_count
def augment(left, seen):
for right in sorted(edges[left]):
if right in seen:
continue
seen.add(right)
if owners[right] == -1 or augment(owners[right], seen):
owners[right] = left
return True
return False
for left in range(len(edges)):
augment(left, set())
return sorted((left, right) for right, left in enumerate(owners) if left != -1)โมเดล
ตั้งค่า endpoint ที่รองรับ OpenAI หรือ Anthropic ด้วย URL หลักและคีย์ API หากจำเป็น ทดสอบการเชื่อมต่อ เซิร์ฟเวอร์โมเดลในเครื่องต้องทำงานอยู่ เครื่องมือระยะไกลอาจส่งข้อมูลแยกต่างหาก
โปรเจกต์
ทดสอบจุดยอดโดดเดี่ยวและการจับคู่ใหม่ผ่านวิถีเพิ่ม พร้อมปฏิเสธดัชนีผิดโดยไม่เปลี่ยนเซต.
ตรวจสอบก่อนนำไปใช้
เปรียบเทียบการทำงานจริงกับผลที่คาดหวัง หากการตรวจสอบไม่ผ่าน ให้หาสาเหตุก่อนแก้ไขเพิ่มเติม
def maximum_matching(edges, right_count):
if type(right_count) is not int or not 0 <= right_count <= 32 or type(edges) not in (list, tuple) or len(edges) > 32:
raise ValueError("matching.size")
if any(type(row) not in (set, frozenset) or any(type(v) is not int or not 0 <= v < right_count for v in row) for row in edges):
raise ValueError("matching.edge")
owners = [-1] * right_count
def augment(left, seen):
for right in sorted(edges[left]):
if right in seen:
continue
seen.add(right)
if owners[right] == -1 or augment(owners[right], seen):
owners[right] = left
return True
return False
for left in range(len(edges)):
augment(left, set())
return sorted((left, right) for right, left in enumerate(owners) if left != -1)กำหนดเป้าหมายการจับคู่จัดสรรให้ชัดก่อนแก้ไข
MatchOriel เป็นพื้นที่เขียนโค้ดด้วย AI บน Windows สำหรับหารือตรรกะจับคู่จัดสรรในบริบทของแอปที่ใช้ เปิดโครงการซอร์สและอธิบายเงื่อนไขที่ทำให้คู่หนึ่งได้รับอนุญาตและสิ่งที่ผลลัพธ์ควรทำให้ดีที่สุด ขอให้ผู้ช่วยที่เชื่อมต่อตรวจว่าข้อกำหนดเหล่านี้ปรากฏในโครงสร้างข้อมูลเข้าและโค้ดอย่างไรก่อนเสนอแก้ไข
งานจับคู่ให้ได้จำนวนสูงสุดเป็นตัวอย่างหนึ่ง นำคู่ที่อนุญาตมาและอธิบายว่าเป้าหมายคือจัดสรรสมาชิกให้ได้มากที่สุดเท่านั้นหรือไม่ ขอให้โมเดลตรวจกรณีที่ต้องเปลี่ยนคู่ที่เลือกก่อนหน้าเพื่อถึงเป้าหมาย ระบุลำดับความชอบหรือกฎธุรกิจอื่นให้ชัดหากแอปต้องใช้ เพราะขนาดของชุดคู่ไม่ได้ยืนยันกฎเหล่านั้น
ตรวจข้อเสนอและทดสอบว่าคู่ที่คืนมาเป็นเส้นเชื่อมที่ใช้ได้และสมาชิกไม่ซ้ำ รวมสมาชิกที่ไม่มีเส้นเชื่อมและดัชนีที่ต้องปฏิเสธในการตรวจโครงการ แล้วดูว่าฝั่งเรียกใช้จัดการรายการที่ไม่ได้จับคู่อย่างไร MatchOriel รองรับปลายทาง OpenAI-compatible หรือ Anthropic พร้อมข้อมูลรับรองเมื่อจำเป็น เลือกโมเดลไร้ข้อจำกัดได้เมื่อบริการมีให้ แต่กฎผู้ให้บริการและความสามารถด้านบริบทกับเครื่องมือของเซิร์ฟเวอร์ยังมีผล ใช้เป้าหมายที่ระบุประเมินความเหมาะสมของการแก้ไข แทนความมั่นใจของผู้ช่วย
ตรวจการจัดสรรคู่ที่อนุญาต
การจับคู่จำนวนมากที่สุดเคารพความชอบด้วยหรือไม่
ไม่โดยอัตโนมัติ งานตัวอย่างเพิ่มจำนวนการจัดสรรจากคู่ที่อนุญาตให้สูงสุด หากความเสถียรตามความชอบหรือคุณภาพถ่วงน้ำหนักสำคัญ ให้ระบุแยกและตรวจว่าอัลกอริทึมที่เสนอรองรับเป้าหมายนั้น ไม่ใช่แค่จำนวน
เหตุใดต้องมีกรณีที่ต้องเปลี่ยนคู่เดิม
ช่วยแยกวิธีที่ปรับการเลือกก่อนหน้าได้จากการเลือกแบบละโมบที่อาจหยุดเร็วเกินไป ให้จำนวนคู่ที่คาดหวังและทางเลือกที่ถูกต้อง แล้วตรวจโค้ดที่เสนอและผลเทียบกับตัวอย่างเหล่านั้น
การทดสอบควรกำหนดชุดคู่ที่แน่นอนชุดเดียวหรือไม่
เฉพาะเมื่อข้อกำหนดต้องการผลนั้นโดยเฉพาะ หลายชุดอาจบรรลุเป้าหมายจำนวนคู่สูงสุดเท่ากัน ตรวจความถูกต้อง สมาชิกไม่ซ้ำ และขนาด พร้อมบันทึกข้อกำหนดลำดับหรือการตัดสินกรณีเสมอก่อนทำกรณีทดสอบให้เข้มงวดขึ้น
ควรส่งสมาชิกที่ไม่ได้จัดสรรให้ฝั่งเรียกใช้อย่างไร
กำหนดว่าฝั่งเรียกใช้อนุมานจากคู่ที่หายไปหรือคาดหวังการแทนอย่างชัดเจน ตรวจขอบเขตนี้กับโครงสร้างที่คืนมา แล้วทดสอบข้อมูลที่ไม่มีเส้นเชื่อม เพื่อไม่ให้แอปมองสมาชิกที่ไม่ได้จับคู่อย่างถูกต้องเป็นความผิดพลาดการแยกวิเคราะห์
MatchOriel · อัปเดต 2026-10-25