search花絮之堆合併

2021-04-06 16:42:13 字數 1814 閱讀 9538

大規模詞庫的詞彙檢索是乙個非常耗時的操作,所以其資料結構一般都是需要經過仔細設計的。單位裡原有乙個堆結構,最近將它模板化,並在它基礎上做模糊查詢。但原來沒有詞庫的歸併演算法,這些日子不得不重新實現乙個。演算法的難點在於尋找合適的子塊進行

move

操作以及調整該子塊的所有相關指標。

下面是測試例子之一:

int_tmain(int

argc, _tchar* argv)

else

return 0;

}

下面是該例子的輸出:

index1.string:lee lieve life and zoe

index2.string:love book zero a land

index3 = index1 + index2

***************index1***************

wordindex:

a[0,1)

l[2,4)

z[10,11)

heapindex:

0n0[1,2)

1d-1[0,0)

2e0[4,5)

3i0[5,7)

4e-1[0,0)

5e0[7,8)

6f0[9,10)

7v0[8,9)

8e-1[0,0)

9e-1[0,0)

10o0[11,12)

11e-1[0,0)

***************index2***************

wordindex:

a1ch_word

b[0,1)

l[3,5)

z[9,10)

heapindex:

0o0[1,2)

1o0[2,3)

2k-1[0,0)

3a0[5,6)

4o0[7,8)

5n0[6,7)

6d-1[0,0)

7v0[8,9)

8e-1[0,0)

9e0[10,11)

10r0[11,12)

11o-1[0,0)

***************index3***************

wordindex:

a[0,1)

1ch_word

b[2,3)

l[5,9)

z[19,21)

heapindex:

0n0[1,2)

1d-1[0,0)

2o0[3,4)

3o0[4,5)

4k-1[0,0)

5a0[9,10) 6

e0[11,12)

7i0[12,14)

8o0[17,18)

9n0[10,11)

10d-1[0,0)

11e-1[0,0)

12e0[14,15)

13f0[16,17)

14v0[15,16)

15e-1[0,0)

16e-1[0,0)

17v0[18,19)

18e-1[0,0)

19e0[21,22)

20o0[23,24)

21r0[22,23)

22o-1[0,0)

23e-1[0,0)

press any key to continue

不禁想到

segword

中要做詞彙雜湊的想法。好的雜湊檢索明確的詞彙時速度應該比這個堆快,而且歸併與插入的代價也遠比這個低,但雜湊中如何進行快速的模糊查詢(比如「

z+o+

」)?

search花絮之語義處理

語義處理是自然語言處理前沿的熱點,其關鍵作用正逐漸成為學科領域的共識,而我們的中文資訊處理強項也在於語義處理,所以很自然就想把這一優勢具體體現到搜尋專案中來 但毫無疑問這是乙個摸索的過程。最初我負責標題分析的研究,曾隨機抽取了一些標題示例,例如 移動儲存裝置 的例子 移動儲存裝置 與 讀寫識別裝置 ...

DP之石子堆合併問題

1 相鄰 在乙個圓形操場的四周擺放著n堆石子 n 100 現要將石子有次序地合併成一堆。規定每次只能選取相鄰的兩堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。選擇一種合併石子的方案,使得做n 1次合併,得分的總和最小。1 2 在乙個圓形操場的四周擺放著n堆石子 n 100 現要將石子有...

Codeup堆 合併果子(堆)

在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。...