質問

2つの配列X [1..m]及びY [1..nの]を考えます。メモ化アルゴリズムは、時間O(M * N)でLCSを計算することになります。 LCSのWRTの時間を見つけるために任意のより良いアルゴリズムがありますか?私は斜めに行わメモ化は私たちにO(のmin(m、n))は、時間の複雑さを与えることができますね。

役に立ちましたか?

解決

ジーンマイヤーズは1986年に、このための非常に素晴らしいアルゴリズムを思い付いた、ここで説明:<のhref = "http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.4.6927&rep=rep1&type = PDF」REL = "noreferrer">アンO(ND)の違いアルゴリズム及びその変形を

差が小さい場合、それははるかに高速であるので、

このアルゴリズムは、配列間の編集距離に比例して時間がかかります。それは編集スクリプトは、(LCSのいくつかの点でデュアル)構築することができるため、距離を見つけるまでは、0から始まる、可能なすべての編集距離にわたってループすることによって動作します。違いは、時には便利であるいくつかの閾値を、上に成長する場合は、「早期救済」ができることをこの意味ます。

私はこのアルゴリズムは、まだ多くのdiffの実装に使用されていると信じています。

他のヒント

あなたは先験的上部の最大サイズにバインドさを知っている場合は、のK のあなたが気に、あなたは、内側のループ内の余分なチェックを追加することにより、早期終了にLCSアルゴリズムを強制することができます。この手段その後、ときのK <<分(M、N)のあなたはLCSを行っているという事実にもかかわらず、小さな実行時間を取得することができます。

はい、我々は注文O(M * N)よりも優れたアルゴリズムを作成することができます--- すなわちO(MIN(M、N))。長さを見つけるために..... 増分は、それがCで発生したと仮定して行われるたびにだけ対角線elements.and比較[2,2]次に、1 [2 ++、2]、C [2,2 ++]とCからのすべての値をインクリメント.. およびc [M、M] ..(仮定するMまで進み     

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top