"HFOEB *OUSPEVDUJPO w ࠩͱʁ w ฤूͱ͍͏ߟ͑ํ .ZFST"MHPSJUIN w 'FBUVSFT w 4&4-$41SPCMFN w &EJU(SBQI w ݪཧ w .ZFST0WFSWJFX 1BVM)FDLFM"MHPSJUIN w 'FBUVSFT w ݪཧ w )FDLFM0WFSWJFX 4VNNBSZ
࠷ͷఆྔతஅ w 4&44IPSUFTU&EJU4DSJQU w -$4ɿ-POHFTU$PNNPO4VCTFRVFODF w &EJU4DSJQUTPVSDFˠUBSHFUͷฤूʹඞཁͳ*OTFSU
%FMFUF4DSJQUͷ͜ͱ w 4VCTFRVFODFɿྻ͔Β͍͔ͭ͘ͷཁૉΛऔΓআ͍ͯಘΒΕΔྻ 4&4-$41SPCMFN
source = [A, B, C, A, B, B, A] target = [C, B, A, B, A, C] (0, 0) A B C A B B A C B A B A C 0 1 2 3 4 5 0 1 2 3 4 5 6 source target NBUDIQPJOU QPJOUBTTBNFTZNCPM (7, 6) 4UBSU &OE
source = [A, B, C, A, B, B, A] target = [C, B, A, B, A, C] (0, 0) A B C A B B A C B A B A C 0 1 2 3 4 5 0 1 2 3 4 5 6 source target NBUDIQPJOU QPJOUBTTBNFTZNCPM (7, 6) &EHFʹԊͬͯɺ4UBSU͔Β&OE·ͰҠಈ͢Δ ӈɾԼɾࣼΊํͷҠಈ㲈EFMFUF
JOTFSU
EPOPUIJOH 4UBSU &OE 4UBSU &OE
source = [A, B, C, A, B, B, A] target = [C, B, A, B, A, C] (0, 0) A B C A B B A C B A B A C 0 1 2 3 4 5 0 1 2 3 4 5 6 source target NBUDIQPJOU QPJOUBTTBNFTZNCPM (7, 6) 4&4 4UBSU &OE 4UBSU࠲ඪ&OE࠲ඪͷ࠷ܦ࿏
NBUDIQPJOU QPJOUBTTBNFTZNCPM Insert B Insert C source = [A, B, C, A, B, B, A] target = [C, B, A, B, A, C] A B C A B B A C B A B A C target Delete B 4UBSU &OE source 4UBSU &OE
ҠಈίετJT%JBHPOBM source = [A, B, C, A, B, B, A] target = [C, B, A, B, A, C] (0, 0) 0 1 2 3 4 5 (7, 6) 0 1 2 3 4 5 6 Delete A Delete B NBUDIQPJOU QPJOUBTTBNFTZNCPM Insert B Insert C A B C A B B A C B A B A C target Delete B 4UBSU &OE ࠷ܦ࿏ͷ૯Ҡಈίετ % 4&4ͷεΫϦϓτ source 4UBSU &OE
(0, 0) 0 1 2 3 4 5 (7, 6) 0 1 2 3 4 5 6 Delete A Delete B NBUDIQPJOU QPJOUBTTBNFTZNCPM Insert B Insert C source = [A, B, C, A, B, B, A] target = [C, B, A, B, A, C] A B C A B B A source C B A B A C target Delete B 4UBSU &OE 3 1 x - y = k 0 -1 2 Y Z 4UBSU &OE
(0, 0) 0 1 2 3 4 5 (7, 6) 0 1 2 3 4 5 6 Delete A Delete B NBUDIQPJOU QPJOUBTTBNFTZNCPM Insert B Insert C source = [A, B, C, A, B, B, A] target = [C, B, A, B, A, C] A B C A B B A source C B A B A C target Delete B 4UBSU &OE 3 1 x - y = k 0 -1 2 Y Z k + 1 k - 1 k 4UBSU &OE
(0, 0) 0 1 2 3 4 5 (7, 6) 0 1 2 3 4 5 6 Delete A Delete B NBUDIQPJOU QPJOUBTTBNFTZNCPM Insert B Insert C source = [A, B, C, A, B, B, A] target = [C, B, A, B, A, C] A B C A B B A source C B A B A C target Delete B 4UBSU &OE 3 1 0 -1 2 Y Z k + 1 k - 1 k ඇର֯ͳҠಈΛ%ճߦͬͨ࠷ͷܦ࿏ %͕حͳΒLحͷର֯ઢ %͕ۮͳΒLۮͷର֯ઢ্Ͱࢭ·Δ 4UBSU &OE
For D ← 0 to M + N Do For k ← -D to D in steps of 2 Do Until D Path gets to furthest point Do Move on edges If (N, M) is the reached point Then Found the SES. Array[with: k] M = source.count N = target.count %͕حͳΒLحͷର֯ઢ %͕ۮͳΒLۮͷର֯ઢ্Ͱࢭ·Δ &EJU(SBQI্Ͱ࠷ԕͷύε֎प Complexity: O((M+N)D) ίετ%Ͱߦ͚ͨ࠷ԕͷ࠲ඪΛLઢຖʹه %શͯԼҠಈ %શͯӈҠಈ &OE࠲ඪ
w ར༻෯ͷ͞ɾ$PNQMFYJUZ༏ҐੑͳͲ͕ಛతͳɺ.ZFSTɾ)FDLFMͷ ͭͷݪཧΛղઆɻ͓ʹཱͯΕ w IUUQTHJUIVCDPNIPSJUBZVZB%J⒎FSFODF"MHPSJUIN$PNQBSJTPO w 0 / ͷ$PNQMFYJUZΛ࠾༻͍ͯ͠ΔϥΠϒϥϦ͋Δ͕ɺ6*͕བྷΉࠩߋ৽ ϥΠϒϥϦͱͯ͋͑ͯͦ͠ΕΛબͿཧ༝༨Γແ͍͔ʁ w બఆΞϧΰϦζϜɾ࣍ݩߋ৽ɾશCBUDI6QEBUF0QFSBUJPOTରԠɾɾFUD 4VNNBSJ[F
ɾHeckel, Paul (1978), "A Technique for Isolating Differences Between Files”, Communications of the ACM, 21: 264–268, doi:10.1145/359460.359467, retrieved 2011-12-04 ɾE. W. Myers, ‘‘An O(ND) difference algorithm and its variations,’’ Algorithmica, 1 (1986), pp. 251−266. 3FGFSFODFT