倒排檔案索引結構和搜尋演算法

2021-07-10 23:09:26 字數 1198 閱讀 6868

檔案結構設有兩篇文章1和2

a.我們現在有的是文章內容,即乙個字串,我們先要找出字串中的所有單詞,即分詞。英文單詞由於用空格分隔。中文單詞間是連在一起的需要特殊的分詞處理(一元分詞,二元分詞,詞庫專業分詞)。

b.文章中的「in」, 「once」 「too」等詞沒有什麼實際意義,中文中的「的」「是」等字通常也無具體含義,這些不代表概念的詞可以過濾掉

c.使用者通常希望查「he」時能把含「he」,「he」的文章也找出來,所以所有單詞需要統一大小寫。

d.使用者通常希望查「live」時能把含「lives」,「lived」的文章也找出來,所以需要把「lives」,「lived」還原成「live」//專門處理

e.文章中的標點符號通常不表示某種概念,也可以過濾掉

//以上在分詞解析處理時處理

經過上面處理後的關鍵字:

guangzhou 1

he         2

i           1

live       1,2

shanghai   2

tom         1

我們還需要知道兩種位置:

加上「出現頻率」和「出現位置」資訊後,我們的索引結構變為:

guangzhou 1[2]               3,6

he       2[1]               1

i         1[1]               4

live      1[2],2[1]           2,5,2

shanghai 2[1]               3

tom      1[1]               1

以live這行為例我們說明一下該結構:live在文章1中出現了2次,文章2中出現了一次,它的出現位置為「2,5,2」這表示什麼呢?我們需要結合文章號和出現頻率來分析,文章1中出現了2次,那麼「2,5」就表示live在文章1中出現的兩個位置,文章2中出現了一次,剩下的「2」就表示live是文章2中第2個關鍵字。

下面我們可以通過對該索引的查詢來解釋一下為什麼要建立索引。

假設要查詢單詞 「live」,先對詞典二元查詢、找到該詞,通過指向頻率檔案的指標讀出所有文章號,然後返回結果。詞典通常非常小,因而,整個過程的時間是毫秒級的。

而用普通的順序匹配演算法,不建索引,而是對所有文章的內容進行字串匹配,這個過程將會相當緩慢,當文章數目很大時,時間往往是無法忍受的。

資料結構與演算法 倒排索引

1 倒排索引 檢視提交統計提問 總時間限制 1000ms 記憶體限制 131072kb 描述給定一些文件,要求求出某些單詞的倒排表。對於乙個單詞,它的倒排表的內容為出現這個單詞的文件編號。輸入第一行包含乙個數n,1 n 1000,表示文件數。接下來n行,每行第乙個數ci,表示第i個文件的單詞數。接下...

搜尋演算法(DFS和BFS)

題目 有n件物品,每件物品的重量為w i 價值為c i 現在需要選出若干物品放入乙個容器為v的揹包中,使得在選入揹包的物品重量和不超過容量v的前提下,讓揹包中物品的價值之和最大,求最大價值。1 n 20 解題 如下 includeconst int maxn 30 int n,v,maxvalue ...

python資料結構 搜尋演算法

下面是幾種搜尋列表的幾種演算法和它的複雜度分析。python的min函式返回列表中的最小的項。下面是為了研究它的複雜度開發出來的演算法。usr bin python coding utf 8 def indexofmin lyst minindex 0 currentindex 1 while cu...