คำถามติดแท็ก edit-distance

2
อัลกอริธึม diff ที่มีประสิทธิภาพสำหรับต้นไม้และระยะทาง Levenshtein
ฉันเพิ่งอ่านบทสรุปของปัญหาที่เกี่ยวข้องกับการทำแตกต่างกันระหว่างต้นไม้และทำให้ฉันสนใจที่จะเรียนรู้ว่าสถานะของศิลปะสำหรับปัญหานี้คืออะไร นอกจากนี้สมมติว่าระหว่างการดำเนินการแก้ไขที่อนุญาตของคุณคือโหนดการเพิ่ม / ลบแบบดั้งเดิมแก้ไขเนื้อหาที่คุณเพิ่มการดำเนินการเพิ่มเติมของทรีย่อยการคัดลอก / ย้ายสิ่งนี้ทำให้เกิดปัญหา (จากการค้นหา diff ที่ดีที่สุด) ง่ายขึ้นหรือยากขึ้น?

1
แก้ไขระยะทางในพื้นที่ sublinear
ความซับซ้อนที่รู้จักกันดีที่สุดสำหรับการคำนวณระยะทางแก้ไขที่แน่นอนระหว่างสองสายของความยาวเดียวกันโดยใช้พื้นที่การทำงานซึ่งเป็นเส้นย่อยในขนาดของอินพุตคืออะไร? ฉันคิดว่าอินพุตถูกเก็บในรูปแบบอ่านอย่างเดียว นี่เป็นปัญหาที่เคยศึกษามาหรือไม่? หากต้องการทำให้คำถามมีความเฉพาะเจาะจงมากขึ้นเพียงเล็กน้อยช่องว่างที่nคือความยาวของแต่ละสตริงอินพุตΘ ( n--√)Θ(n)\Theta(\sqrt{n})nnn แก้ไข การปฏิบัติตามคำตอบของ David Eppstein ดูเหมือนว่าคำถามที่ดีคือหากระยะทางแก้ไขสามารถพบได้ในเวลาพหุนามและพื้นที่ ขอบเขตที่ต่ำกว่าก็น่าสนใจเช่นกันΘ ( n--√)Θ(n)\Theta(\sqrt{n})

3
แก้ไขระยะห่างระหว่างสองพาร์ติชัน
ฉันมีสองส่วนคือ[1…n][1…n][1 \ldots n]และฉันกำลังมองหาระยะทางแก้ไขระหว่างพวกเขา โดยสิ่งนี้ฉันต้องการค้นหาจำนวนการเปลี่ยนผ่านครั้งเดียวของโหนดเป็นกลุ่มที่แตกต่างกันซึ่งจำเป็นต้องเปลี่ยนจากพาร์ติชัน A ไปยังพาร์ติชัน B ตัวอย่างเช่นระยะทางจาก{0 1} {2 3} {4}เป็น{0} {1} {2 3 4}สอง หลังจากค้นหาฉันพบบทความนี้แต่) ฉันไม่แน่ใจว่าพวกเขากำลังพิจารณาลำดับของกลุ่ม (สิ่งที่ฉันไม่สนใจ) ในระยะทางของพวกเขา b) ฉันไม่แน่ใจว่ามันทำงานอย่างไรและ c) ไม่มีการอ้างอิง ความช่วยเหลือใด ๆ ที่ชื่นชม

2
การรักษาหมวดหมู่ตามทฤษฎีของ diffs, patch และการผสาน?
มีหมวดหมู่ของแพทช์ที่มีลักษณะเช่นนี้หรือไม่: วัตถุเป็นสายอักขระบางตัวในฐาน morphisms คือสคริปต์แก้ไข ("diffs" หรือ "patches") ระหว่างสตริง ฉันสนใจคำถามเหล่านี้: มีความคิดที่เป็นหมวดหมู่ของสคริปต์แก้ไขน้อยที่สุดหรือไม่? อาจเป็นประเภทของแพทช์ที่อุดมไปด้วย PO-Sets? มีการควบรวมกิจการของแพทช์ pushout เด็ดขาด? วิธีการสรุปจากสตริงไปยังต้นไม้ (ระบบไฟล์หรือประเภทข้อมูลพีชคณิต)

2
แก้ไขระยะทางด้วยการเคลื่อนย้าย
แรงจูงใจ:ผู้เขียนร่วมแก้ไขต้นฉบับและฉันต้องการดูบทสรุปที่ชัดเจนของการแก้ไข เครื่องมือที่เหมือนกัน "diff" ทั้งหมดมีแนวโน้มที่จะไร้ประโยชน์ถ้าคุณทั้งคู่ย้ายข้อความไปมา (เช่นการจัดโครงสร้างใหม่) และทำการแก้ไขในท้องถิ่น มันยากจริง ๆ ที่จะทำให้ถูกต้อง? คำจำกัดความ:ฉันต้องการค้นหาระยะทางแก้ไขขั้นต่ำซึ่งการดำเนินการที่อนุญาตคือ: การดำเนินการ "ถูก": เพิ่ม / เปลี่ยน / ลบอักขระเดียว (การดำเนินการ Levenshtein ปกติ), "แพง": การดำเนินการ: ย้ายซับสตริงไปยังตำแหน่งใหม่ ( abcd↦acbdabcd↦acbdabcd \mapsto acbdสำหรับสตริงใด ๆaaa , bbb , ccc , ddd ) รับสองสายxxxและyyyและจำนวนเต็มkkkและKKKฉันต้องการที่จะแก้ปัญหาต่อไปนี้: คุณสามารถแปลงxxxเป็นyyyโดยใช้การดำเนินการkkkราคาถูกที่สุดและการดำเนินการที่แพงที่สุดKKKไหม คำถาม: ปัญหานี้มีชื่อหรือไม่? (ดูเหมือนคำถามที่เป็นมาตรฐานมากในบริบทของการจัดเรียงลำดับ) มันยากไหม ถ้าเป็นเรื่องยากมันเป็นพารามิเตอร์คงที่เวไนยกับเป็นพารามิเตอร์?KKK มีขั้นตอนวิธีการประมาณที่มีประสิทธิภาพหรือไม่? (เช่นค้นหาวิธีแก้ปัญหาที่มีการดำเนินการราคาถูกมากที่สุดและ2 Kราคาแพงหากมีวิธีแก้ปัญหาที่มีการดำเนินงานk cheap และKแพง)2k2k2k2K2K2KkkkKKK ฉันพยายามดูสตริงตัวชี้วัดที่แสดงรายการใน Wikipediaแต่ไม่มีสิ่งใดที่ถูกต้อง

2
ความซับซ้อนของพื้นที่เพื่อคำนวณการจัดเรียงสตริงที่เหมาะสมสำหรับระยะทางแก้ไขของ Levenshtein
ถ้าเราจะได้รับสองสายที่มีขนาดและn 2มาตรฐาน Levenshtein คำนวณระยะทางแก้ไขโดยอัลกอริทึมแบบไดนามิกที่มีความซับซ้อนเวลาO ( n 1 n 2 )และความซับซ้อนของพื้นที่O ( n 1 n 2 ) (การปรับปรุงบางอย่างสามารถทำได้ในรูปแบบของระยะทางแก้ไขdแต่เราไม่ได้สมมุติบนdn1n1n_1n2n2n_2O(n1n2)O(n1n2)O(n_1 n_2)O(n1n2)O(n1n2)O(n_1 n_2)ddddddO(max(n1,n2))O(max(n1,n2))O(\max(n_1, n_2)) อย่างไรก็ตามหากคุณต้องการได้รับการแก้ไขจริงของสคริปต์การแก้ไขที่ดีที่สุดเป็นไปได้ไหมที่จะทำได้ดีกว่าการใช้หน่วยความจำอาจต้องใช้เวลานานหรือไม่O(n1n2)O(n1n2)O(n_1 n_2)

4
จำนวนการแก้ไขสั้นที่สุดย้ายระหว่างสองคำ
ฉันกำลังมองหาโครงสร้างข้อมูลและอัลกอริทึมในการคำนวณจำนวนการเปลี่ยนแปลงขั้นต่ำที่จำเป็นในการแปลงคำหนึ่งเป็นอีกคำหนึ่งโดยให้ทั้งสองคำเป็นอินพุตซึ่งการเปลี่ยนแปลงที่อนุญาตเท่านั้นคือ เพิ่มตัวอักษรที่หนึ่งในขา (เช่น AB -> ABC) ทำซ้ำและต่อคำทั้งหมด (ตัวอย่างเช่น ABC -> ABCABC) ตัดคำในสอง (คู่ของการย้ายซ้ำ, ABCABC -> ABC + ABC) ลบตัวอักษรตัวใดตัวหนึ่ง (เช่น ABC -> AC) และ ทำซ้ำตัวอักษรตัวใดตัวหนึ่ง (เช่น ABC -> ABBC) ตัวอย่างเช่นลำดับขั้นต่ำของการย้ายจาก ABC ไปยัง BCBC คือ ABC -> BC (ลบ A) -> BCBC (การทำซ้ำ) ฉันไม่มีพื้นฐานด้านวิทยาการคอมพิวเตอร์ บางทีนี่อาจเป็นปัญหาที่รู้จักกันดี แต่การค้นหาโดย Google ของฉันไม่ได้ให้อะไรเลย คุณรู้หรือไม่ว่าปัญหาที่เกี่ยวข้องและกำหนดชัดเจน? แก้ไข : …

2
ความซับซ้อนของการทำให้เป็นเนื้อเดียวกันสตริง
แรงจูงใจ : ในขณะที่พัฒนาเครื่องมือสำหรับการกำหนดเวอร์ชันของข้อมูลเราลงเอยด้วยการค้นหาอัลกอริธึมสำหรับ "diff" ที่เป็นจำนวนเต็มสองชุดโดยการหาลำดับของการแปลงที่นำจำนวนเต็มหนึ่งชุดมาเป็นชุด เราสามารถที่จะลดปัญหาว่าปัญหาที่เกิดขึ้นเป็นธรรมชาติมากต่อไปนี้ที่ดูเหมือนว่าจะมีการเชื่อมต่อกับการแก้ไขระยะทาง, การจัดกลุ่มโดยการแลกเปลี่ยนและพาร์ทิชันสตริงต่ำสุดที่พบบ่อย ปัญหา : เราได้รับสตริงคือลำดับของตัวอักษรและเป้าหมายของเราคือ ทำให้เป็นเนื้อเดียวกันในราคาต่ำสุด นั่นคือเราต้องการลำดับการจัดเรียงใหม่เพื่อให้ตัวอักษรทั้งหมดที่เหมือนกันอยู่ติดกัน การดำเนินการเดียวที่ได้รับอนุญาตคือการเลือกลำดับของตัวอักษรที่เหมือนกันและย้ายลำดับที่ใดก็ได้และนั่นทำให้ฉันเสียค่าใช้จ่าย 1 หน่วย ความช่วยเหลือใด ๆ ที่บ่งบอกถึงความซับซ้อนของปัญหานี้จะได้รับการชื่นชมมาก! ตัวอย่าง : aabcdab: อินพุต bcd aa ab: หลังจากย้ายaa ตัวแรกไปยังตำแหน่งหลังจาก "d" b bcdaaa: หลังจากย้ายbต่อท้ายไปยังตำแหน่งแรก เนื่องจากสตริงผลลัพธ์เป็นเนื้อเดียวกันเราจึงมีราคาเท่ากับ 2 โปรดทราบว่าเราไม่ได้ถูก จำกัด แต่อย่างใดเกี่ยวกับผลลัพธ์: ตราบใดที่มันเป็นเนื้อเดียวกันเราไม่จำเป็นต้องตรวจสอบคำสั่งซื้อใด ๆ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.