コンピュータサイエンスにおいて、ストリーミングアルゴリズムは入力データストリームを項目のシーケンスとして処理し、通常はデータに対して1回(または数回)の処理を行います。これらのアルゴリズムは、一般的にストリームのサイズやストリーム内の最大値に対して対数的なメモリ制限があり、項目ごとの処理時間も制限されている場合があります。
こうした制約の結果、ストリーミングアルゴリズムは、データストリームの要約または「概略」に基づいて近似的な回答を生成することが多い。
ストリーミングアルゴリズムは、1978年にはすでにMunroとPaterson [ 1 ]によって、また1982/83年にはPhilippe FlajoletとG. Nigel Martin [ 2 ]によって研究されていましたが、ストリーミングアルゴリズムの分野が初めて形式化され普及したのは、1996年にNoga Alon、Yossi Matias、Mario Szegedyによる論文でした[ 3 ]。この論文により、著者らは後に「ストリーミングアルゴリズムへの基礎的な貢献」で2005年にゲーデル賞を受賞しました。それ以来、理論、データベース、ネットワーク、自然言語処理など、コンピュータサイエンスのさまざまな分野にわたるデータストリーミングアルゴリズムを中心とした膨大な研究が行われてきました。
セミストリーミングアルゴリズムは、グラフのストリーミングアルゴリズムの緩和として2005年に導入されました[ 4 ]。このアルゴリズムでは、許容される空間は頂点数nに対して線形ですが、エッジ数mに対しては対数的です。この緩和は密なグラフに対しても依然として意味があり、ストリーミングアルゴリズムでは解決できない興味深い問題(接続性など)を解決できます。空間。
データストリームモデルでは、入力の一部または全部が、(ある有限ドメインからの)整数の有限シーケンスとして表現され、これは一般的にランダムアクセスには利用できず、代わりに「ストリーム」として一度に1つずつ到着します。[ 5 ]ストリームの長さがnでドメインのサイズがmの場合、アルゴリズムは一般的にmとnの対数的な空間を使用するように制約されます。一般的に、ストリームに対して小さな定数回数しかパスを実行できず、場合によっては1回しか実行できません。[ 6 ]
ストリーミングに関する文献の多くは、保存するには大きすぎる頻度分布の統計を計算することに関係している。この種の問題には、ベクトルが存在する。 (ゼロベクトルに初期化)ストリームで更新が提示される)これらのアルゴリズムの目標は、関数を計算することです。表現するのに必要なスペースよりもかなり少ないスペースを使用するまさにその通りです。このようなストリームを更新するための一般的なモデルは2つあり、「レジ」モデルと「回転式改札機」モデルと呼ばれています。[ 7 ]
レジモデルでは、各更新は次の形式になります。、 となることによって正の整数だけ増加します注目すべき特別なケースは、 (ユニットの挿入のみが許可されます。)
ターンスタイルモデルでは、各更新は次の形式になります。、 となることによって(負の場合もある)整数だけ増加する「厳密な回転式改札機」モデルでは、 いつでもゼロ未満になる可能性がある。
いくつかの論文では、「スライディングウィンドウ」モデルについても検討している。このモデルでは、対象となる関数は、ストリーム内の固定サイズのウィンドウ上で計算される。ストリームが進むにつれて、ウィンドウの末尾にある項目は考慮対象から除外され、ストリームからの新しい項目がその場所に配置される。
上記のような頻度に基づく問題以外にも、他のタイプの問題も研究されてきました。グラフの隣接行列や隣接リストが未知の順序でストリームされる設定では、多くのグラフ問題が解決されています。また、ストリームの順序に大きく依存する問題(非対称関数など)もあり、例えば、ストリーム内の反転の数を数えたり、最長増加部分列を見つけたりといった問題が挙げられます。
データストリーム上で動作するアルゴリズムのパフォーマンスは、次の3つの基本的な要素によって測定されます。[ 8 ]
これらのアルゴリズムは、すべてのデータが揃う前に意思決定を行う必要があるという点で、オンラインアルゴリズムと多くの類似点がありますが、全く同じではありません。データストリームアルゴリズムは利用可能なメモリが限られていますが、一連のデータが到着するまで処理を延期できる場合があります。一方、オンラインアルゴリズムは、各データが到着するたびにすぐに処理を実行する必要があります。
アルゴリズムが近似アルゴリズムである場合、答えの精度も重要な要素です。精度はしばしば次のように表されます。近似とは、アルゴリズムが以下の誤差を達成することを意味する。確率で。
ストリーミングアルゴリズムは、ネットワークリンクのエレファントフローの監視、異なるフローの数のカウント、フローサイズの分布の推定など、ネットワークにおいていくつかの用途があります。 [ 9 ]また、データベースにおいても、結合のサイズの推定などの用途があります。
周波数の集合のk番目の周波数モーメントは次のように定義される。。
最初の瞬間は単に頻度の合計(つまり、総数)です。これは、ジニ係数などのデータの統計的特性を計算するのに役立ちます 。は、最も頻繁に出現する項目の頻度として定義されます。
アロン、マティアス、セゲディによる画期的な論文は、周波数モーメントの推定という問題を取り扱っていた。
周波数モーメントを直接求めるには、すべての異なる要素a i ∈ (1,2,3,4,..., N )に対してレジスタm iを維持する必要があり、そのためには少なくともオーダーのメモリが必要となります。[ 3 ]しかし、スペースに制限があるため、はるかに少ないメモリで計算するアルゴリズムが必要です。これは、正確な値の代わりに近似値を使用することで実現できます。F kの( ε,δ ) 近似値を計算するアルゴリズム。ここで、F ' kはF kの( ε,δ ) 近似値です。[ 10 ]ここで、εは近似パラメータ、δは信頼度パラメータです。[ 11 ]
Flajolet らは[ 2 ]で、 Robert Morrisの論文[ 12 ]に触発された確率的計数法を導入した。Morrisは論文の中で、精度の要件を放棄すれば、カウンタn をlog log nのカウンタに置き換えることができ、 log log nビットに格納できると述べている。[ 13 ] Flajolet らは[ 2 ]で、ハッシュ空間 (長さLのバイナリ文字列) に要素を均一に分布させると想定されるハッシュ関数hを使用することで、この方法を改良した。
bit( y,k )はyの二進数表現におけるk番目のビットを表すものとする。
させては、適切な規則に従って、y iのバイナリ表現における最下位 1 ビットの位置を表します。。
A を長さMのデータ ストリームのシーケンスとし、そのカーディナリティを決定する必要があるとする。BITMAP [0... L − 1]を
ρ(ハッシュ値)が記録されるハッシュ空間。次に、以下のアルゴリズムによってAのおおよその濃度が決定されます。
手順 FM-Sketch: i が 0 から L − 1 までの場合、 BITMAP[i] := 0 終了 for x in A: を実行する インデックス := ρ(hash(x)) BITMAP[index] = 0 の場合 BITMAP[index] := 1 endif 終了 B := BITMAP[] の左端の 0 ビットの位置 2 ^ B を返す
データストリームにN個の異なる要素がある場合。
前述のアルゴリズムは、FlajoletとMartinによるデータストリームにおけるF0を近似する最初の試みについて説明したものである。彼らのアルゴリズムは、ハッシュ空間内でハッシュ値を均一に分布させると仮定したランダムなハッシュ関数を選択する。
Bar-Yossef らは[ 11 ]で、データ ストリーム内の異なる要素の数を決定するための k 最小値アルゴリズムを導入しました。彼らは、[0,1] に正規化できる同様のハッシュ関数hを使用しました。しかし、ハッシュ空間内の値の数に制限tが設けられた。tの値は次のオーダーであると想定される。(つまり、近似値εが小さいほどtが多く必要になります)。KMVアルゴリズムは、ハッシュ空間にt最小のハッシュ値のみを保持します。ストリームのm個の値がすべて到着した後、計算に使用されますつまり、ほぼ均一なハッシュ空間では、少なくともt個の要素が以下であると 予想されます。。
手順2:K最小値 KMVの最初のt値を初期化する a1 の a に対して、 h(a) < Max(KMV) の場合 KMVセットからMax(KMV)を削除します KMVにh(a)を挿入する endif 終了 return t/Max(KMV)
KMVアルゴリズムは以下のように実装できます。メモリビット空間。各ハッシュ値にはオーダーの空間が必要です。メモリビット。ハッシュ値は次のオーダーです。t個のハッシュ値をバイナリツリーに格納すれば、アクセス時間を短縮できます。したがって、時間計算量は次のように削減されます。。
Alonらは、与えられた空間と時間内で計算できる確率変数を定義することによってF kを推定する。 [ 3 ]確率変数の期待値はF kの近似値を与える。
数列の長さmは既知であると仮定します。次に、次のように確率変数Xを構築します。
S 1 が次のオーダーであると仮定します。そしてS2はオーダーであるアルゴリズムはS2個のランダム変数を取りますそして中央値を出力する。ここでY i はX ijの平均であり、1 ≤ j ≤ S 1である。
次に、確率変数E ( X )の期待値を計算します。
上記で説明したF k を計算するアルゴリズムから、各乱数変数X はa pとrの値を格納することがわかります。したがって、Xを計算するには、 a pを格納するためにlog( n )ビット、rを格納するためにlog( n )ビットのみを保持する必要があります。乱数変数Xの総数は .
したがって、アルゴリズムが必要とする全体の空間計算量は次のオーダーである。
前述のアルゴリズムは、の順にメモリビット。Alon らは[ 3 ]で、値をマッピングした 4 つ独立な乱数を使用してこのアルゴリズムを簡略化しました。。
これにより計算の複雑さがさらに軽減されます に
データストリームモデルにおいて、頻出要素問題とは、ストリームの一定割合以上を占める要素のセットを出力することです。その特殊なケースとして、多数決問題があります。これは、ある値がストリームの過半数を占めるかどうかを判定する問題です。
より厳密には、1より大きい正の定数cを固定し、ストリームの長さをmとし、f iをストリーム内の値iの頻度とします。頻出要素問題は、 { i | f i > m/c }の集合を出力することです。 [ 14 ]
注目すべきアルゴリズムには以下のようなものがある。
データストリーム内のイベントの検出は、上記に挙げたような強力なアルゴリズムを使用して行われることが多い。これらのアルゴリズムのいずれかを使用して最も頻繁に出現する項目とその頻度が決定され、前の時点からの最大の増加がトレンドとして報告される。このアプローチは、指数加重移動平均と分散を正規化に使用することで改良できる。[ 15 ]
ストリーム内の異なる要素の数を数えること( F 0モーメントと呼ばれることもあります)は、よく研究されているもう 1 つの問題です。最初のアルゴリズムは Flajolet と Martin によって提案されました。2010 年にDaniel Kane、Jelani Nelson、David Woodruff は、この問題に対する漸近的に最適なアルゴリズムを発見しました。[ 16 ]このアルゴリズムはO ( ε 2 + log d )の空間を使用し、最悪の場合の更新と報告時間はO (1)で、ユニバーサルハッシュ関数とr個の独立したハッシュファミリーを使用します。ここでr = Ω(log(1/ ε ) / log log(1/ ε )) です。
周波数の集合の(経験的)エントロピーは次のように定義される。、 どこ。
訓練データセットを一度だけ処理することで、モデル(例えば分類器)を学習する。
これまで研究されてきた多くのデータストリーミング問題について、下限値が算出されている。これらの下限値を算出する最も一般的な手法は、通信複雑度を用いることである。