2012-02-24 7 views
0

私は数字のリストを持っています。多くのノイズの中で繰り返しパターンがあります。数字のリスト - 繰り返しパターンを見つけるにはどうすればいいですか?

サンプルデータ:この例では

(1,2,50,10,100,25,12,30,20,1,20,10,100,25,12,50,30,2,10,100,25,12,50,30,30,40,20,40,1,2,50,20,50,30,30,10,100,25,12,10,100,25,12) 

、所望のパターンが10,100,25,12あるが、毎回異なるであろう。

どのようにの繰り返しパターンが見つかりますか?

+1

繰り返しの定義に少なくとも2回の出現がある場合は、少なくとも2回発生するリスト内の任意の数字を選択し、繰り返すパターンがあります。私が言っていることは、より多くの制限が必要だということです。 – erisco

答えて

5

サフィックスツリーは、文字列内の繰り返し部分文字列を見つける最も効率的なソリューションです。

は、ここでのPython実装の一例です:https://hkn.eecs.berkeley.edu/~dyoo/python/suffix_trees/

あなたは、このような関与ソリューションを気にしたくない場合は、あなたは、単に、文字列の上に一度に一つの要素を反復処理し、場合には、各要素を削除することができます「10」「100」「25」または「12」ではありません。最終的に、 "10" "100" "25"と "12"のシーケンスで構成される最初の要素に到達します。

あなたの質問に一般的なパターンが必要な場合は、おそらくサフィックスツリーを使いたいと思うかもしれません。

+0

ありがとう。毎回異なる10,100,25,12の一般的なパターンになります。このように接尾辞ツリーを使用するにはどうすればよいですか? – rikAtee

+0

クラスを編集する必要があります(ツリーの実装に使用するものはNode/Edgeクラス)。ここには、サフィックスツリーの優れた視覚化(インターネット上で唯一のものです)があります。どのように動作するのか、そして編集する必要があるのか​​を理解するためにそれを使いこなすことができます。 http://suffixtree.codeplex.com/ 「SuffixTreeGarden」ZIPをダウンロードしてください。プロジェクトSuffixTreeViewを開き、プロジェクトをコンパイルして実行します。適切なF#ランタイムをダウンロードする必要があるかもしれませんが、非常に価値のある美しいビジュアライゼーション/アニメーションです。ちなみに、接尾辞ツリーは実装するのが簡単ではありません。がんばろう! – Jason

+0

コンパイルできない場合は、コンパイルされた実行可能ファイルに直接リンクすることができます。 – Jason

関連する問題