3
HyperLogLogアルゴリズムはどのように機能しますか?
最近は暇なときにさまざまなアルゴリズムについて学んでいます。私が遭遇した非常に興味深いと思われるアルゴリズムはHyperLogLogアルゴリズムと呼ばれ、リストに含まれる一意のアイテムの数を推定します。 これは、「カーディナリティ」の値(最近までは、推定されていないと計算されていたと私は常に想定していました)を見たMySQL時代に戻ったので、特に興味深いものでした。 そのため、配列内の一意のアイテムの数を計算するアルゴリズムをO(n)で記述する方法を知っています。私はこれをJavaScriptで書いた: function countUniqueAlgo1(arr) { var Table = {}; var numUnique = 0; var numDataPoints = arr.length; for (var j = 0; j < numDataPoints; j++) { var val = arr[j]; if (Table[val] != null) { continue; } Table[val] = 1; numUnique++; } return numUnique; } しかし問題は、私のアルゴリズムはO(n)が大量のメモリを使用する(に値を格納するTable)ことです。 私は、O(n)時間でリスト内の重複をカウントし、最小限のメモリを使用する方法についてこのペーパーを読んでいます。 それは、ビットまたは何かをハッシュおよびカウントすることにより、特定の確率内で(リストが均等に分散されていると仮定して)推定できるリスト内の一意のアイテムの数を説明します。 …