0

この質問は複雑なので、この質問の詳細を説明するために質問してください。(ps。私は英語を母国語としないので、それが理由です...)

入力は34の長さのサンプルシーケンスであり、出力は結果部分です。

今のところ、私は34の長さのシーケンスサンプルを持っています、それは次のように構築されるかもしれません:(「結果」は私が必要とするものです)

サンプルシーケンス=結果部分+既知のシーケンス(結果部分の長さはわかりませんでした)

  1. 結果(長さ34)
  2. 結果(長さN、N <34)+既知のシーケンス(34-N)

順番にこれらの番号はすべてランダムです。

今のところ、シーケンスの既知の部分を含めずに結果の部分を見つける必要があります。

いくつかの背景情報:

  1. 私は34の長さのこのサンプルシーケンスを1000万持っています。(ジェネレータから34桁の乱数シーケンスを知っている1000万)

  2. 結果を見つけたら、500万の長さのシーケンスBで比較し、結果のシーケンスがどこかの長いシーケンスで一意に一致するかどうかを確認する必要があります。

私の現在のアルゴリズムは、既知のシーケンスの最初の10桁である検出器を使用し、サンプルシーケンスのどこかで検出器シーケンスを検出した場合は、後でシーケンスを削除することです。ただし、結果に既知のシーケンス内のシーケンスの一部が含まれる可能性があります。誰かがより良いアルゴリズムを持っていますか?

本当にありがとう!さらに、私はこれをPythonでプログラミングしています。

元。

第1条件

199010104761700150004736290473629657==サンプルシーケンス

すべてが結果であり、既知の部分はまだ同じです

入力:

199010104761700150004736290473629657

出力:

199010104761700150004736290473629657

2番目の条件

199010104728392817111123995561547659==サンプルシーケンス

1990101047==結果部分

28392817111123995561547659...==既知の部分

入力は次のようになります:199010104728392817111123995561547659、28392817111123995561547659 .. ..

私が欲しい出力は:1990101047

4

1 に答える 1

1

Knuth–Morris–Prattアルゴリズムを使用できます。実際には部分文字列は見つかりませんがi、件名の文字列の最後に到達したときの値をメモしておくことができます。

于 2012-06-19T09:47:46.533 に答える