b を考える • m 個のレジスタ M[1]...M[m] を用意する • for v∈Μ do ◦ let x = hash(v) ◦ let j = 1 + (v の先頭 b bit) ◦ v をレジスタ M[j] の値の算出に用いる ▪ m と b の定義を考えると、j の値は 1,...,m の範囲であると分かりますね 部分集合への振り分けについて
b を考える • m 個のレジスタ M[1]...M[m] を用意する • for v∈Μ do ◦ let x = hash(v) ◦ let j = 1 + (v の先頭 b bit) ◦ let w = v の先頭 b+1 bit 目以降 ◦ M[j] = Max(M[j], ρ(w)) ▪ where ρ(s), s∈任意のbit列, 先頭から数えて最初に 1 になった桁の数 • s = 000101110 ならば 4 ▪ つまり ρ(w) の最大値だけ覚えておいて他のデータは捨てる で、カーディナリティどうやって求めるの? 1
b を考える • m 個のレジスタ M[1]...M[m] を用意する • for v∈Μ do ◦ let x = hash(v) ◦ let j = 1 + (v の先頭 b bit) ◦ let w = v の先頭 b+1 bit 目以降 ◦ M[j] = Max(M[j], ρ(w)) ▪ where ρ(s), s∈任意のbit列, 先頭から数えて最初に 1 になった桁の数 • カーディナリティ = α_m * m * (2^(-M[1])...2^(-M[m]))の調和平均 ◦ α_m は m に依存する値で, この掛け算で正規化をしている (面倒だから中身は割愛 ) で、カーディナリティどうやって求めるの? 2
b を考える • m 個のレジスタ M[1]...M[m] を用意する • for v∈Μ do ◦ let x = hash(v) ◦ let j = 1 + (v の先頭 b bit) ◦ let w = v の先頭 b+1 bit 目以降 ◦ M[j] = Max(M[j], ρ(w)) ▪ where ρ(s), s∈任意のbit列, 先頭から数えて最初に 1 になった桁の数 • カーディナリティ = α_m * m * (2^(-M[1])...2^(-M[m]))の調和平均 ◦ α_m は m に依存する値で, この掛け算で正規化をしている (面倒だから中身は割愛 ) ちょっと待て イミフ