web-dev-qa-db-ja.com

確率的データ構造とは何ですか?

ブルームフィルターやスキップリストなどのデータ構造について読んだことがあります。

確率的データ構造の一般的な特徴は何ですか?また、それらは何に使用されますか?

20
free_easy

おそらく多くの異なる(そして良い)答えがありますが、私の謙虚な意見では、確率的データ構造の共通の特徴は、正確ではなくおおよその答えを提供することです。

ここにはいくつのアイテムがありますか? 99%の確率で約1523425

更新:クイック検索により、この問題に関する適切な記事へのリンクが作成されました。

https://highlyscalable.wordpress.com/2012/05/01/probabilistic-structures-web-analytics-data-mining/

13

確率的データ構造では明確な答えを出すことはできません。代わりに、答えの妥当な近似値と、この推定値を近似する方法を提供します。これらは、必要なメモリ量を劇的に削減できるため、ビッグデータやストリーミングアプリケーションに非常に役立ちます(正確な答えを提供するデータ構造と比較して)。

ほとんどの場合、これらのデータ構造はハッシュ関数を使用してアイテムをランダム化します。衝突を無視するため、サイズは一定に保たれますが、これが正確な値を提供できない理由でもあります。それらがもたらす利点:

  • 彼らは少量のメモリを使用します(あなたはどれだけを制御することができます)
  • それらは簡単に並列化できます(ハッシュは独立しています)
  • それらは一定のクエリ時間を持っています(辞書のように償却された定数でさえありません)

頻繁に使用される確率的データ構造は次のとおりです。

11
Salvador Dali

確率的データ構造に興味がある場合は、最近公開された本「ビッグデータアプリケーションの確率的データ構造とアルゴリズム」(ISBN:9783748190486、Amazonで入手可能)を読むことをお勧めします。ここでは、最新のビッグデータアプリケーションで非常に役立つ、このようなスペース効率の高いデータ構造と高速アルゴリズムの多くについて説明しました。

この本では、ビッグデータ処理におけるこのような一般的な問題の処理に役立つ最先端のアルゴリズムとデータ構造を見つけることができます。

  • メンバーシップクエリ(ブルームフィルター、カウントブルームフィルター、指数フィルター、カッコウフィルター)。
  • カーディナリティ(線形カウント、確率的カウント、LogLog、HyperLogLog、HyperLogLog ++)。
  • Frequency(Majorityアルゴリズム、Frequent、Count Sketch、Count-Min Sketch)。
  • ランク(ランダムサンプリング、q-ダイジェスト、t-ダイジェスト)。
  • 類似性(LSH、MinHash、SimHash)。

あなたは無料のプレビューと本に関するすべての関連情報を https://pdsa.gakhov.com で得ることができます

4
gakhov

参考までに、ウィキペディアに確率的データ構造のリストがあります: https://en.wikipedia.org/wiki/Category:Probabilistic_data_structures

「確率的データ構造」とは何かについて、さまざまな定義があります。 IMHO、確率的データ構造とは、データ構造がランダム化されたアルゴリズムを使用するか、内部でいくつかの確率的特性を利用することを意味しますが、データ構造ユーザーの観点から確率的または非決定的に動作する必要はありません。

  • 他の回答で言及されている ブルームフィルターHyperLogLog など、確率的に動作する「確率的データ構造」は多数あります。

  • 同時に、 スキップリスト など、(ユーザーの観点から)決定された動作を持つ他の「確率的データ構造」があります。スキップリストの場合、ユーザーはバランス二分探索木と同様に使用できますが、内部的に確率関連のアイデアで実装されます。そしてスキップリストの著者ウィリアム・プーによると:

    スキップリストは確率的データ構造であり、多くのアプリケーションで選択される実装方法としてバランスの取れたツリーに取って代わる可能性があります。スキップリストアルゴリズムは、バランスの取れたツリーと同じ漸近的な予想時間範囲を持ち、より単純で、より速く、より少ないスペースを使用します。

1
nybon