ヘビーヒッター向けの次のアルゴリズムを知っています。
Algorithm findHeavyHitters(epsilon, inputStream)
integer k = ceiling(1 / epsilon) - 1
initialize hashmap H of size k
while an item i from the input stream arrives:
if H[i] exists
increment the value associated with H[i]
elsif number of items in H < k
put H[i] into map with value of 1
elseif there exists an entry j with a value of 0
remove j and put H[i] into map with value of 1
else
decrement all values in H by 1
endwhile
return H
間違っている場合は訂正してください。ただし、このアルゴリズムは O(n) では実行されません。O(1/epsilon) のスペース使用を維持しながら、O(n) で実行されるようにこのアルゴリズムを変更することは可能ですか?
データ ストリームの場合、アルゴリズムのポイントは、上位の epsilon*t 項目を返すことです。イプシロンはパーセンテージで与えられます (例: 少なくとも 10% の確率で発生するデータの場合、0.1 を入力)。