今天讀了這幾頁,好難啊= =。智商不夠用啊,想了好久才想明白原理。
首先要明白為什么要有前綴。完整的索引不行嗎?
主要是長度的影響。一來,需要符合索引的長度的要求,二來,假如你擦著線選了比較長的索引,那么查找的效率和對建立索引時(shí)的影響想必也不好的。(這個(gè)沒有做實(shí)驗(yàn),書上這么說是有道理的。從原理上。)
怎么確定索引長度呢。
理想的情況,我們剛好選了長度為n,然后每次查找時(shí)都能通過索引查到唯一。所以我們需要嘗試,來達(dá)到這個(gè)效果。
文章時(shí)通過,選取隨機(jī)分布然后幾次重復(fù)生成的數(shù)據(jù)表,通過確定長度為k時(shí)的前綴對應(yīng)的行的cnt,和全部列出來的cnt比較。如果前者比較大,說明長度不夠(索引越長越具體,就越和想要的效果接近。),所以增加長度 = 減少相同前綴的cnt = 精確。在遞增時(shí)就在某時(shí)比較符合最終的情況。
但不可否認(rèn),總是有可能重合的。所以查找時(shí),可能對最后結(jié)果還要判斷,如果在查找時(shí)得到的不是一個(gè)而是多個(gè),那么就需要多次查找。