1

別のウェブサイトから次のインタビューの質問に遭遇しました。

受信トレイに大量のメールが届きます。すべての送信者アドレスをサーバーに送信したいとします。それらをバッチで送信できます(各バッチには送信者の電子メールアドレスが多数含まれています)。制限は、バッチに重複する電子メールアドレスを含めることはできないということです。バッチの数が最小になるように、すべての電子メールアドレスをバッチで送信するプログラムをどのように作成しますか。

複雑さを分析する

私が好きなこれに対する答えは、電子メールをバイナリ検索ツリーに配置し(したがって、重複を削除し)、それをシリアル化して送信することです。これは1つのバッチのみを送信し、O(n * log n)時間です。より良い解決策でチャイムを鳴らしたい人はいますか?

4

1 に答える 1

3

ハッシュを使用できます。最初に、特別な名前がハッシュに含まれているかどうかを確認します。含まれていない場合は、ハッシュを入れてバッチに追加します。これは平均してO(n)ですが、現在のメソッドはO(n logn)です。

バイナリツリーの作成にはO(n logn)が必要であるため、現在のアプローチはO(n log n)です。これは、他の比較ベースアルゴリズムと同様に、ビットn log nバリアに失敗するためです。

ハッシュ関数についても、平均してO(n)かかります。全体として、メソッドを高速で並べ替えるよりはましですが、スペースが多すぎる可能性があるため、データ形式を検討する必要があります。

于 2012-11-12T16:52:20.033 に答える