0

必要な数字が見つかるまで、大きな間隔で数字を賢くスキャンしたいと思います。しかし、この番号がどこにあるのか手がかりがなく、検索プロセス中にも手がかりがありません.

私の質問を簡単に述べるために例を挙げましょう

100000000000000 から 999999999999999 までの数値を検索しているとします。

単純なアプローチは、100000000000000 から始まり、99 まで数えます... 1 つずつ。しかし、運が悪いと番号が遠端になる可能性があるため、これは賢明ではありません。

それで、この問題への最善のアプローチは何ですか。私は数学的に最高のものを探しているのではなく、C プログラミング言語で簡単に実装できる手法が必要です。

前もって感謝します。

4

3 に答える 3

3

あなたの問題に対する解決策はありませんが、知識があります。数について何も知らない場合、それらを列挙するための戦略はどれも同じように良い(または悪い)です。

あなたがあなたのために数を隠そうとしている敵と戦っていると仮定するならば、戦略はあなたの次の動きを推測できないようにすることです。それは、範囲内の数字をランダムに選び、それらを求めることです。(繰り返しを避けるために、あなたはあなたの数のランダム順列を使わなければならないでしょう。)それによってあなたはあなたが総数の約半分の期待数であなたの数を見つけるでしょう、つまりあなたはから2倍を得るでしょう最悪の場合。しかし、言ったように、それはすべてあなたが作ることができる仮定に依存します。

于 2012-10-07T14:04:25.660 に答える
0

二分検索を使用します。まず、番号が範囲の中央より上か下かを確認します。答えに応じて、範囲の上半分または下半分に対してそれぞれプロセスを繰り返します。

于 2012-10-07T13:32:57.017 に答える
0

ご存知のように、検索速度を向上させる戦略はありません。できることは、マルチスレッドを使用して検索自体を高速化することだけです。したがって、技術的に最善のアプローチは、OpenCLでアルゴリズムを実装し(C にかなり似ており、C ライブラリを介して使用できます)、ハードウェア (GPU) に応じて数百のテストを並行して実行することです。

于 2012-10-07T20:54:45.227 に答える