แก้ไขระยะห่างระหว่างสองพาร์ติชัน


17

ฉันมีสองส่วนคือ[1n]และฉันกำลังมองหาระยะทางแก้ไขระหว่างพวกเขา

โดยสิ่งนี้ฉันต้องการค้นหาจำนวนการเปลี่ยนผ่านครั้งเดียวของโหนดเป็นกลุ่มที่แตกต่างกันซึ่งจำเป็นต้องเปลี่ยนจากพาร์ติชัน A ไปยังพาร์ติชัน B

ตัวอย่างเช่นระยะทางจาก{0 1} {2 3} {4}เป็น{0} {1} {2 3 4}สอง

หลังจากค้นหาฉันพบบทความนี้แต่) ฉันไม่แน่ใจว่าพวกเขากำลังพิจารณาลำดับของกลุ่ม (สิ่งที่ฉันไม่สนใจ) ในระยะทางของพวกเขา b) ฉันไม่แน่ใจว่ามันทำงานอย่างไรและ c) ไม่มีการอ้างอิง

ความช่วยเหลือใด ๆ ที่ชื่นชม


5
คุณจะพิจารณาระยะทางระหว่าง {0 1 2 3} ถึง {0 1} {2 3} มันจะเป็น 2 หรือไม่ ประการที่สองฉันไม่เห็นสาเหตุที่ทำให้ "กราฟ" ปรากฏในภาพเลย ดูเหมือนว่าคุณมีสองส่วนของ [n] และต้องการคำนวณระยะห่างระหว่างพวกเขา
Suresh Venkat

ใช่มันจะเป็นสอง อันที่จริงสิ่งเหล่านี้ถูกตั้งค่าพาร์ติชันบนโหนดของกราฟ (เช่นพาร์ติชันกราฟ) สิ่งนี้อาจไม่สำคัญสำหรับการแก้ปัญหา แต่นี่เป็นปัญหาที่ฉันพยายามแก้ไขดังนั้นเหตุใดฉันจึงกล่าวถึง
zenna

3
หากกราฟไม่เกี่ยวข้องโปรดลบการอ้างอิงถึง "กราฟ" และ "โหนด" ทั้งหมดออกจากคำถามของคุณ มันไม่ได้ช่วยอะไรมันกวนใจ
Jukka Suomela

ไม่สามารถกำหนดระยะแก้ไขได้ในแง่ของระยะห่างบนโครงตาข่ายกั้นพาร์ติชันหรือไม่?
Tegiri Nenashi

@Tegiri - แน่นอนว่ามันเป็นระยะทางทางธรณีวิทยาบนตะแกรงของฉากกั้น น่าเสียดายที่การคำนวณที่ขัดแตะสำหรับชุดของความเป็นหัวใจใด ๆ ที่มากกว่า 10 นั้นเป็นสิ่งที่รักษาไม่ได้
zenna

คำตอบ:


21

ปัญหานี้สามารถเปลี่ยนเป็นปัญหาการมอบหมายซึ่งเป็นที่รู้จักกันว่าปัญหาการจับคู่สองฝ่ายที่มีน้ำหนักสูงสุด

โปรดทราบว่าระยะทางแก้ไขเท่ากับจำนวนองค์ประกอบที่ต้องเปลี่ยนจากชุดหนึ่งไปอีกชุดหนึ่ง นี่เท่ากับจำนวนองค์ประกอบทั้งหมดลบด้วยจำนวนองค์ประกอบที่ไม่จำเป็นต้องเปลี่ยนแปลง ดังนั้นการค้นหาจำนวนขั้นต่ำขององค์ประกอบที่ไม่เปลี่ยนแปลงนั้นเทียบเท่ากับการหาจำนวนสูงสุดของจุดยอดที่ไม่เปลี่ยนแปลง

ให้= { 1 , 2 , . . , k }และB = { B 1 , บี2 , . . , B L }เป็นพาร์ติชัน[ 1 , 2 , . . , n ] นอกจากนี้หากไม่มีการสูญเสียความสามารถทั่วไปให้k l (อนุญาตเพราะe d i tA={A1,A2,...,Ak}B={B1,B2,...,Bl}[1,2,...,n]kl ) จากนั้นให้ B l + 1 , B l + 2 , ... , B kทั้งหมดเป็นเซตว่าง ดังนั้นจำนวนสูงสุดของจุดยอดที่ไม่เปลี่ยนแปลงคือ:edit(A,B)=edit(B,A)Bl+1Bl+2Bk

maxfi=1k|AiBf(i)|

ที่คือการเปลี่ยนแปลงของk][ 1 , 2 , . . , k ]f[1,2,...,k]

นี่เป็นปัญหาการกำหนดที่จุดยอดคือ , ... , , , ... ,และขอบคือคู่มีน้ำหนัก. นี้สามารถแก้ไขได้ในเวลาA k B 1 B kA1AkB1Bk| A iB j | O ( | V | 2บันทึก| V | + | V | | E | )(Ai,Bj)|AiBj|O(|V|2log|V|+|V||E|)


คุณช่วยตั้งชื่ออัลกอริธึมที่ให้ความซับซ้อนในเวลานี้ได้ไหม
D-503

ฉันเชื่อว่า @bbejot อ้างถึงอัลกอริทึมเส้นทางที่สั้นที่สุดอย่างต่อเนื่อง (พร้อมรูทีนย่อยของ Dijkstra ที่ใช้งานโดยใช้ฟีโบนัชชีฮีป)
Wei

ฉันใช้เวลานานในการวิเคราะห์คำนี้เพราะฉันไม่ใช่คนคณิตศาสตร์ แต่ขอบคุณ ฉันใช้เวลาในการค้นหานานและนี่เป็นสิ่งเดียวที่ฉันพบว่าแสดงวิธีการแปลงปัญหาระยะห่างของพาร์ติชันเป็นปัญหาการมอบหมาย - หรืออัลกอริทึมใด ๆ ที่ฉันสามารถโทรจากห้องสมุด Python (ส่วนที่ยากสำหรับฉันได้รับการหาวิธีการใช้ scipy.optimize.linear_sum_assignment จากนั้นเพื่อตั้งค่าเมทริกซ์ตามคำแนะนำเหล่านี้)
Sigfried

ฉันต้องการทำให้น้ำหนักเป็นลบ มิฉะนั้น scipy.optimize.linear_sum_assignment ให้ 0 กับทุกอย่าง
Sigfried

2

ดู PDF ของเอกสารนี้

http://www.ploscompbiol.org/article/info:doi/10.1371/journal.pcbi.0030160

ความหมายของระยะทางในการแก้ไขคือสิ่งที่คุณต้องการฉันคิด พาร์ติชั่น 'การอ้างอิง' จะเป็นหนึ่งในสองพาร์ติชั่นของคุณโดยพลการอื่นจะเป็นพาร์ติชั่นอื่น นอกจากนี้ยังมีการอ้างอิงที่เกี่ยวข้อง

สุดยอดร็อบ


ขอบคุณ Rob อย่างไรก็ตามถ้าฉันไม่มีบางสิ่งนี่คือระยะแก้ไขที่กำหนดไว้ในแง่ของการย้ายแบบผสาน สิ่งเหล่านี้ได้รับการศึกษาอย่างดีและตามที่กระดาษชี้ให้เห็นการเปลี่ยนแปลงของข้อมูลเป็นตัวชี้วัดทางทฤษฎีสารสนเทศ ฉันสนใจ แต่ในการเปลี่ยนองค์ประกอบย้ายเดียว
zenna

1

ความคิดตอนเช้าวันอาทิตย์ที่บ้าๆบอ ๆ ที่อาจจะใช่หรือไม่ถูกต้อง:

Wlog ให้เป็นพาร์ติชั่นที่มีเซตมากกว่านี้อีกอัน ก่อนอื่นให้กำหนดชื่อที่แตกต่างกันเป็นคู่ให้กับชุดคุณ จากนั้นค้นหาการตั้งชื่อที่ดีที่สุดสำหรับชุดตามกฎต่อไปนี้:P 2 n 1 ( S ) Σ P 1 n 2 ( S ) P 2P1P2n1(S)ΣP1n2(S)P2

  • S P 2 S S S P 1n2(S):=n1(S)สำหรับมีในบรรดา ; เลือกหนึ่งรายการที่สร้างความขัดแย้งน้อยที่สุดหากมีทางเลือกหลายทางSP2SSSP1
  • หากตอนนี้สำหรับบางตัวให้กำหนดองค์ประกอบที่ใช้องค์ประกอบน้อยลงด้วยชื่อของชุดจะแชร์องค์ประกอบที่สองมากที่สุดด้วยเช่นให้แข่งขันกับชื่อของชุดนั้นS S S , n 1 ( S ) = n 2 ( S ) P 1n2(S)=n2(S)SSS,n1(S)=n2(S)P1
  • หากไม่สามารถใช้กฎเดิมได้ให้ตรวจสอบทั้งสองชุดว่าพวกเขาสามารถแข่งขันเพื่อดูชื่อชุดอื่น ๆ ที่พวกเขาแบ่งปันองค์ประกอบน้อยลงได้ด้วย (พวกเขาอาจยังมีองค์ประกอบเพิ่มเติมจากชุดมากกว่าชุดที่ได้รับมอบหมาย ชื่อ!). หากเป็นเช่นนั้นให้กำหนดชื่อนั้นให้กับหนึ่งในที่แบ่งปันองค์ประกอบเพิ่มเติมกับชุดที่เกี่ยวข้องซึ่งพวกเขาสามารถแข่งขันได้ อีกชื่อหนึ่งเก็บชื่อที่ขัดแย้งกันไว้ก่อนหน้านี้ S , S SP1S,S
  • ทำซ้ำขั้นตอนนี้จนกว่าความขัดแย้งทั้งหมดจะได้รับการแก้ไข เนื่องจากมีชุดน้อยกว่าจึงมีชื่อเพียงพอP1P2

ตอนนี้คุณสามารถพิจารณาบิตสตริงขององค์ประกอบของคุณ wrt พาร์ทิชันอย่างใดอย่างหนึ่งคือและ ( กับ ) จากนั้นปริมาณที่ต้องการคือคือระยะทาง Hamming ระหว่างสตริงบิตw1=n1(1)n1(n)w2=n2(1)n2(n)nj(i)=nj(S),iSPjdH(w1,w2)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.