kmv sketch
是theta sketch
演算法的一種,簡單來說,kmv sketch
是用來估算大資料中不重複元素的個數,例如某個**的唯一身份訪客數。本文簡單翻譯自datasketches
的文件,用以說明該演算法是如何進行估算的。
如果你去參加**會,你排在隊尾,如何估計你的前面還有多少個人?如下圖,整個隊伍的長度是已知的為1000ft
,你與前乙個人的距離為2ft
,那麼可以簡單的估算,整個隊伍共有1000ft/2ft=500
人,此時你用於計算的樣本包含的人數為1
人。
再次觀察這個隊伍,你發現人與人之間的距離並不是均勻的,你看到隊尾的11
個人一共佔據了30ft
的長度,那麼再次估算人數為1000ft/30ft*11=11/(30ft/1000ft)=366
人,由於此次你用了11
個人作為樣本,估算值應該比之前更精確。
現在我們有乙份大資料樣本,包含的是訪客的唯一id
,為了簡單說明原理,假設只有10
個不同的id
,我們還需要乙個特殊的hash
函式,它能將id
對映成0~1
之間的值,並且對映後的值是有序的,如下圖所示:
如果選取最小的那個值作為估算樣本,那麼整體數量的估算值為1/0.008=125
,如果選第4
個數,即0.386
作為樣本,那麼估算值為1/(0.386-0.195)=5
。可以看到,在只有乙個樣本的情況下,估算值與真實值10
差距較大。
參考估算排隊人數的做法,我們同樣選擇多個樣本來估算,例如選擇最小的0.008/0.145/0.195
這3
個樣本,此時估計值的計算方式為(3-1)/0.195=10.26
,可以看到,距離真實值已經很接近了。
kmv
估算法的計算原理就是這樣,雖然很簡單,但數學上可以嚴格證明該估計量是整體的無偏估計。
this簡單認識
this 在函式中簡單的說,this的指向存在於函式呼叫的時候決定的,誰呼叫了這函式 函式中的this就指向誰 例如 1 普通的呼叫函式的時候 fn window2 物件呼叫 var obj obj.f fn obj.f this obj3 定時器呼叫 因為fn不是我們自己手寫 呼叫的 底層是win...
TCP IP簡單認識
tcp ip是乙個四層協議系統。每一層都有多個不同協議構成。所謂協議就是定義好的,在不同網路,不同 系統中都相同的規定。這樣保障了不同網路系統的可通訊基礎。四層協議包括 鏈路層,網路層,運輸層 和應用層。每乙個層面分管不同的資料,層層打包。總的來說我們可以接觸到的也就是應用層和運輸層。應用層我們自己...
MVC簡單認識
學習乙個新知識,首先要了解的就是下面幾個問題,它是什麼?它能幹什麼?使用它有什麼好處?這篇文章就圍繞這幾個問題來展開討論。mvc不是一種程式語言,嚴格來說,它都不算是一門技術,它是開發軟體時使用的一種 架構 框架 他就像是一種開發模式,或者是乙個程式設計模板。軟體開發人員老生常談的乙個問題,就是軟體...