ฟังก์ชัน recursive determine_pairings() สร้างการจับคู่ (pairings) ทุกแบบของสมาชิกในลิสต์ โดยแต่ละสมาชิกจะอยู่ในคู่หรือเดี่ยว ได้ผลลัพธ์เป็นลิสต์ของลิสต์ที่ประกอบด้วยค่าเดี่ยวและ tuple คู่
ตัวอย่างโค้ด
def determine_pairings(lst):
"""คืนลิสต์ของการจับคู่ทุกแบบที่เป็นไปได้"""
if len(lst) <= 1:
return [lst]
result = []
# กรณีสมาชิกแรกอยู่เดี่ยว
for rest in determine_pairings(lst[1:]):
result.append([lst[0]] + rest)
# กรณีสมาชิกแรกจับคู่กับสมาชิกอื่นๆ
for i in range(1, len(lst)):
pair = (lst[0], lst[i])
remaining = lst[1:i] + lst[i+1:]
for rest in determine_pairings(remaining):
result.append([pair] + rest)
return result
# ทดสอบ
my_list = [56, 31, 78, 0]
print("ลิสต์ต้นฉบับ:", my_list)
pairings = determine_pairings(my_list)
print(f"\nจำนวนการจับคู่ทั้งหมด: {len(pairings)} แบบ")
print("ตัวอย่าง 5 แบบแรก:")
for p in pairings[:5]:
print(p)
ผลลัพธ์ (บางส่วน)
ลิสต์ต้นฉบับ: [56, 31, 78, 0] จำนวนการจับคู่ทั้งหมด: 10 แบบ ตัวอย่าง 5 แบบแรก: [56, 31, 78, 0] [56, 31, (78, 0)] [56, (31, 78), 0] [56, (31, 0), 78] [(56, 31), 78, 0]
อัลกอริทึมนี้สร้างการจับคู่แบบไม่มีทิศทาง (undirected pairings) ทุกแบบ