ワトソン・クリックの回文を認識するスペースの複雑さ


10

次のアルゴリズムの問​​題があります。

Watson-Crickの回文であるDNA文字列を認識する複雑な空間チューリングを決定します。

Watson-Crickパリンドロームは、元のストリングが逆補数のストリングです。補体は、 DNAに触発、文字ごとに定義される:AはTの補数であり、Cは、ACGT WC-ドロームためG. Aの単純な例の補数です。

これを解決するには2つの方法があります。

1つはスペースを必要とします。O(n)

  • 機械が完了したら、入力を読み取ります。入力テープは、逆の順序でワークテープにコピーする必要があります。
  • 次に、マシンは入力とワークテープを左から読み取り、各エントリを比較して、ワークテープのセルが入力のセルの補数であることを確認します。これにはスペースが必要です。O(n)

もう1つにはスペースが必要です。O(logn)

  • 入力の読み取り中。入力テープのエントリ数をカウントします。
  • 入力テープが読み終わったら
    • 文字の補数を作業テープにコピーします
    • 文字Lを作業テープの最後にコピーします
  • (ループポイント)カウンター= 0の場合、ワークテープをクリアして「yes」と書き込み、停止します
  • 入力テープがLを読み取る場合
    • カウンターで示された回数だけ入力ヘッドを左に移動します(2番目のカウンターが必要)。
  • 入力テープがRを読み取る場合
    • カウンターで示された回数だけ入力ヘッドを右に移動します(2番目のカウンターが必要)。
  • ワークテープの値を保持するセルが入力テープの現在のセルと一致する場合
    • カウンターを2減分する
    • RまたはLがそれぞれワークテープにあるかどうかに応じて、1つを左または右に移動します。
    • LまたはRの補数を現在のLまたはRの代わりにワークテープにコピーする
    • ループを続ける
  • 値が一致しない場合は、ワークテープをクリアして「いいえ」と書き込み、停止します

2logn+2

私の問題

最初のものは線形時間と空間の両方を必要とします。2番目にはが必要ですn22logn

私が混乱している理由

2番目の方法は時間の点で優れているので、2番目の方法が最良の選択肢であると思う傾向がありますが、その答えは私が幸運になってアルゴリズムを考え出すことによってのみ得られます。スペースに複雑さを与えたいのであれば、正しいアルゴリズムを思いつくのに運は必要ないようです。何か不足していますか?スペースの複雑さを解決するための問題の解決策を考え出す必要さえありますか?


アルゴリズムに疑似コードを与えた場合、問題はさらに良くなると思います。書式設定のヘルプについては、こちらご覧ください。
ラファエル

回答:


8

DSPACE(O(1))=REGchar

問題に特定の空間の複雑さがあることを示すために、一般に、その空間の複雑さを持つアルゴリズムを考え出す必要があります。これには試行錯誤が必要かもしれませんが、より良いアプローチは、あなたが見ている問題を十分に理解し、アルゴリズムと複雑さについての十分な経験を持つことです。

O(n2)

ヒント:入力が占めるスペースを使用できるのに、なぜ追加のスペースを使用するのですか?

ヒント:一度に1文字ずつチェックする文字列全体を前後に圧縮します。チューリングマシンの状態を使用して、チェックしている文字を記憶し、チェック済みの文字を消去します。


それが私の2番目のアルゴリズムが行うことです。文字列を行き来するには、カウンターが必要です。長さの入力では、カウンターを格納するためにlog nスペースが必要です。誤解しない限り、比較された部分を追跡せずに文字列を行き来することはできなかったようです
justausr

3
なぜあなたはカウンターを保存する必要があるのですか?
デイブクラーク

入力の最後に到達し、長さが10文字の場合。10文字前に戻り、入力の最後の文字を保存する必要があります。最初に到達したら、2番目の文字を比較してコピーし、右に7回移動して、2番目の文字が9番目に一致することを確認します。私がそれに追いついていなければ、それが7回であることをどうやって知るのですか?
justausr 2012

1
ヘッドは一度にテープ上の1か所にしか配置できませんが、TMの状態はヘッドが見たものを記憶でき、他の文字でテープにマークを付けて、テープのどの部分にすでにアクセスしたかを示すことができます(アルゴリズムの特定のフェーズで)。
デイブクラーク

1
どういう意味かわかりません。入力ストリームの文字を(同じマークで)消去またはマークする場合、入力文字列が不足しているため、入力文字列の処理がいつ終了したかを簡単に判断できます。
デイブクラーク

3

質問が尋ねている方法は、あなたが思い付く必要があり上限下限スペースの複雑さに。

O(logn)

alb2lallω(1)O(logn)

cΓs(n)nΓs(n)Ω(logn)


この操作は簡単なので、文字の補数を気にする必要がないことに注意してください。通常のパリンドロームで機能するものはすべて、問題を解決するためにいくつかの状態を変更できます。


0

SΩ(n2/S)

Time×Space=Ω(n2).
TS=Θ(n2)TS=Θ(n2logn)Ω(logn)O(n2/logn)SΩ(n2/S)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.