0

これがこの質問に対する適切な SE サイトでない場合は、お知らせください。

ある友人が、電話で受け取ったこのインタビューの質問を共有してくれました。私は自分で解決しようとしました。言い換えます:

pi桁数までの値をn文字列として与えます。

この文字列で重複する 4 桁のシーケンスをすべて見つけるにはどうすればよいですか?

この部分はかなり簡単に見えます。一度に 1 文字ずつインクリメントしながら、ハッシュ テーブルに 4 文字シーケンスを追加します。ハッシュ テーブルに挿入する前に、現在の 4 文字シーケンスが既に存在するかどうかを確認します。もしそうなら、あなたは重複を見つけました。これをどこかに保存して、プロセスを繰り返します。これは多かれ少なかれ正しいと言われました。

私が抱えている問題は、2番目の質問にあります。

上限とは何ですか?

n = 10,000,000が例でした。

私のアルゴリズムのバックグラウンドは確かに非常にさびています。私の最初の考えは、上限が何らかの形で n に関連しているに違いないということですが、そうではないと言われました。

これを計算するにはどうすればよいですか?

編集

また、上限が に関係しない制約を無視する解決策も受け入れnます。どちらでも構いません。

4

2 に答える 2

0

ソリューションの上限は、メモリに収まるハッシュ テーブルのサイズです。

別の手法は、すべてのシーケンスを生成して並べ替えることです。次に、重複が隣接し、検出が容易になります。通常、ハッシュテーブルよりも線形データ構造に適合する可能性が高く、それでもメモリを使い果たした場合は、ディスクとの間で並べ替えることができます。

編集:「上限」がアルゴリズムのO(n)を意味しない限り、これは簡単に理解できるはずです。

于 2015-01-02T22:25:12.203 に答える