ルーターがあると想像してみましょう。 多くのパケットがルーターを介して異なるアドレスに送られます。 通信に関与しているアドレスの数に関する統計を取得することに関心があります。 いくつかの問題があります。
- 非常に多くのパッケージがあるので、それらすべてを思い出すことはできません。 出発したパッケージに「戻ってきて! 私はすべてを許します」
- すべての可能なアドレス
。 ルータにそれほど多くのメモリがありません。
チャレンジ 。 整数のシーケンスがあります
確率的近似Flageaulette-Martinアルゴリズムについて説明します。 TTXアルゴリズム:
- 使用する
記憶!
- 任意の入力で動作します。
- 正確な答えと異なる確率で3回以下の答えを見つける
:
確率は、アルゴリズムのランダムビットによって取得されます。
投稿の最後に、正確な決定論的アルゴリズムが必要な理由を説明します
Flageaulette Martinアルゴリズム
実数のセグメントがあると想像してください
点がセグメントを分割すると仮定することができます
誰かが誤ってセグメントにいくつかのポイントを投げさせ、そして
Phagelet-Martinアルゴリズムの考え方は、シーケンス内のすべての数値をランダムにスローすることです
2つの独立したハッシュ関数
ランダムハッシュ関数を使用して、セグメントに数値をスローします。
定義 ハッシュファミリー
定義の意味は次のとおりです。 任意の2つのキーを修正します
キーは異なります。 ランダム変数を見てみましょう
その結果、キーを1つだけ取る場合
たとえば、素数を取る
のために
以来
2つの重要なポイントを理解します。 まず、そのような関数のコストを
テストコードでは、ガロア体を使用します
アルゴリズム
させる
開始する前に、アルゴリズムはランダムにハッシュ関数を選択します
シーケンスの要素をセグメントにスローします
で示す
アルゴリズムの答え:
def init(): h = H.sample() z = 0 def process(a): z = max(z, zero(h(a)) def answer(): return 2**(z + 0.5)
分析
アルゴリズムの応答は、真の応答よりも3倍大きく、確率が低いことを示すつもりです。
で示す
アルゴリズムを分析するには、2組の確率変数が必要です。
。 バイナリレコードの先行ゼロの数が1の場合、値は1
少なくとも
; そうでなければ-
。
。 価値
変数がゼロより大きい場合
アルゴリズムの完了時に劣らずでした
。
確率に注意してください
だから期待
の分散は
以来
また、
今、量を考えます
期待の線形性によって。
2独立量の線形分散。
させる
させる
最終和音:中央値
エラーを減らす方法を理解することは残っています。 アルゴリズムの答えが大きすぎる場合を考えてみましょう。 アルゴリズムを並行して実行する
中央値がこのように機能するのはなぜですか? チェルノフの不等式による。 ランダム変数を取得します
中央値
どこで
正確なアルゴリズムの下限
誰かが実際に1回のパスで異なる要素の正確な数を1回のパスで見つける決定論的アルゴリズムを思いついたと想像してみましょう。 このようなアルゴリズムは次を使用する必要があることを示します
たくさん取る
アルゴリズムメモリのみから、セット全体を抽出できます。
のさまざまなサブセット