TL; DR: ระยะทางแก้ไขที่ จำกัด มากขึ้นซึ่งเราสามารถแทรกและลบอักขระแต่ละตัวเท่านั้นสามารถคำนวณได้ในเวลาเชิงเส้นตรงเมื่อทั้งสอง (หรือแม้แต่เพียงหนึ่ง) ของสตริงมีอักขระที่ไม่ซ้ำกัน สิ่งนี้จะช่วยให้ขอบเขตด้านบนและล่างที่เป็นประโยชน์ของระยะทางแก้ไขของ Levenshtein
แทรก / ลบระยะทางแก้ไขและลำดับที่ยาวที่สุดที่พบบ่อย
Levenshtein edit distance ช่วยให้การแทรก, การลบและการเปลี่ยนตัวอักขระเดี่ยว, การกำหนดค่าใช้จ่ายแต่ละ 1 ถ้าเรา จำกัด เพียงแค่การแทรกและการลบเราได้รับการวัดระยะทางที่คล้ายกันซึ่งตอนนี้การทดแทนมีค่าใช้จ่าย 2 เลียนแบบโดยใช้การแทรกและการลบ) ฉันไม่ทราบชื่อมาตรฐานสำหรับระยะทางแก้ไขที่ จำกัด มากขึ้นดังนั้นฉันจะเรียกมันว่า "แทรก / ลบระยะแก้ไข" มันสอดคล้องอย่างใกล้ชิดกับปัญหาการเรียงลำดับทั่วไปที่ยาวที่สุดซึ่งเราได้รับสองสายคือความยาวและตามลำดับและต้องการทราบความยาวของการเรียงลำดับที่ยาวที่สุดที่ปรากฏในทั้งสอง ถ้าสองสายมี LCSmnLดังนั้นพวกเขาจึงมีการแทรก / ลบแก้ไขระยะทางn+m−2L : วิธีที่ง่ายที่สุดในการดูคือการจัดเรียงสตริงเพื่อให้อักขระใน LCS ปรากฏซ้อนกันอยู่ด้านบนของกันและกันขณะที่อักขระที่ไม่อยู่ใน LCS ปรากฏตรงข้าม-
ช่องว่าง ตัวละคร จากนั้นจะเห็นได้ชัดว่าเราสามารถแก้ไขสตริงแรกเป็นสตริงที่สองโดยทำการแทรกทุกที่ที่มี-
ในแถวบนสุดและการลบที่ใดก็ตามที่มี-
ในแถวล่าง ตัวอย่างเช่น:
-C-IRC-LE
T-RI-CKLE
นี่ LCS ของCIRCLE
และTRICKLE
, ICLE
มีความยาว 4 และแก้ไขระยะทางที่แน่นอน 56+7−2∗4=5
การเรียงลำดับที่เพิ่มขึ้นที่ยาวที่สุด
เหตุผลสำหรับการอ้อมนี้คือมีวิธีที่มีประสิทธิภาพมากในการคำนวณ LCS (และระยะทางแทรก / ลบแก้ไข) เมื่ออย่างน้อยหนึ่งในลำดับที่มีตัวละครที่แตกต่างกันเท่านั้น: ในกรณีนี้ปัญหา LCS สามารถเปลี่ยนเป็น ปัญหาการหาที่subsequence เพิ่มขึ้นที่ยาวที่สุดซึ่งสามารถแก้ไขได้ในเวลาn) สมมติว่าเราได้รับสองสตริงและและสตริงมีอักขระที่แตกต่างกัน เราสามารถเปลี่ยนชื่อตัวละครตัวแรกในถึง 1, ที่สองถึง 2 และอื่น ๆ การติดตามของจำนวนที่เราได้รับมอบหมายให้ตัวละครแต่ละตัวในตาราง จากนั้นในO(nlogn)ABAABเราเปลี่ยนชื่อตัวละครโดยใช้ตารางนี้ (เช่นทุกครั้งที่มีสิ่งใดก็ตามที่เป็นตัวอักษรตัวแรกในA
ถูกเปลี่ยนเป็น 1 ฯลฯ ) สุดท้ายเรามองหาที่เพิ่มขึ้น subsequence B
ที่ยาวที่สุดใน สิ่งนี้สอดคล้องกับ LCS ระหว่างA
และB
จากนั้นเราสามารถคำนวณระยะแทรก / ลบแก้ไขได้ทันที เวลาทั้งหมดที่ต้องการคือเพียงถ้าและมีความยาวและตามลำดับO(n+mlogm)ABnm
ขอบเขตในการแก้ไขระยะ Levenshtein
ระยะแทรก / ลบให้ชัดเจนขอบเขตบนระยะทาง Levenshtein (เนื่องจากลำดับการดำเนินการแก้ไขใด ๆ ที่ถูกต้องภายใต้ระยะแทรก / ลบยังเป็นลำดับที่ถูกต้องของการดำเนินการแก้ไข Levenshtein) การแบ่งระยะห่างของการแก้ไขการแทรก / ลบด้วย 2 ยังให้ขอบเขตที่ต่ำกว่าเนื่องจากในกรณีที่เลวร้ายที่สุดการดำเนินการแก้ไขของ Levenshtein ใด ๆ ก็สามารถเปลี่ยนเป็น 2 การแทรก / ลบการแก้ไขได้
ภาพรวม
ในปี 1977 Hunt และ Szymanski ได้คิดค้นอัลกอริธึมที่สามารถมองได้ว่าเป็นลักษณะทั่วไปของอัลกอริธึมที่เพิ่มขึ้นที่ยาวที่สุด มันจะมีประสิทธิภาพเมื่อใดก็ตามที่จำนวนคู่ของตำแหน่งอักขระที่ตรงกันระหว่างสองสตริงนั้นมีขนาดเล็ก หากมีคู่ดังกล่าวขั้นตอนวิธีการของพวกเขาใช้เวลาเวลา (โปรดสังเกตว่าหากอักขระทั้งหมดในหนึ่งสตริงมีความแตกต่างกัน) อัลกอริทึมนี้เป็นพื้นฐานของโปรแกรมต้นฉบับซึ่งถือว่าข้อความทั้งหมดในบรรทัดเป็นอักขระแต่ละตัว ต่อมาเปลี่ยนเป็นการใช้อัลกอริทึม - Myers's time โดยที่rO((r+n)logn)r≤ndiff
diff
O(nd)d คือระยะแทรก / ลบแก้ไขเนื่องจากจะมีประสิทธิภาพดีกว่าเมื่อความแตกต่างโดยรวมมีขนาดเล็ก แต่ "ตัวอักษร" (บรรทัดข้อความ) ปรากฏขึ้นบ่อยครั้ง (เช่นบรรทัดที่มีวงเล็บปีกกาเปิดในรหัสโปรแกรม C)
ล่า, J.; Szymanski, T. (1977), "อัลกอริทึมที่รวดเร็วสำหรับการคำนวณองค์ประกอบทั่วไปที่ยาวที่สุด", การสื่อสารของ ACM, 20 (5): 350–353, ดอย: 10.1145 / 359581.359603