在日常的應用中,我們經常需要在海量資料中進行搜尋某一資料。根據目前掌握的方法我們可以選擇樹形結構類似搜尋樹,平衡樹,紅黑樹等搜尋結構。以及雜湊這種對映結構。兩類結構各有優劣在這裡不進行比較,詳情請看以前部落格。
搜尋結構中同時也分為不同的應用場景,比如單體對映,關鍵碼即為需要搜尋到的值,還有雙對映,在關鍵碼位置還儲存乙個資料。第一種叫做k模型。故名思意只有key作為關鍵碼,後一種叫做kv模型,除了乙個key用做對映以外還有乙個value資料,舉例說明,當我們需要檢查乙個單詞是否拼寫正確時,我們需要先將所有單詞儲存起來然後進行搜尋,這種就叫做k模型。當我們需要做乙個翻譯字典時,首先我們需要將英文作為k作為關鍵碼儲存起來,一同儲存的還有他的翻譯value,這樣當我們找到key時,同時也可以找到翻譯。
這裡用搜尋樹與雜湊表實現k與kv模型的字典舉例。
typedef struct bstreenode
bstreenode;
bstreenode* buybstreenode(keytype key, valuetype value)
int bstreeinsertr(bstreenode** tree, keytype key, valuetype value)
else if ((*tree)->_key == key)
else
else
}}
bstreenode* bstreefindr(bstreenode* tree, keytype key)
if (tree->_key == key)
else
else
}}
int bstreeremover(bstreenode** tree, keytype key)
else if ((*tree)->_key > key)
else
else if ((*tree)->_right == null)
else
if (parents == *tree)
else
}}}
故名思意,字串雜湊演算法就是將字串通過某種方式轉換成可以對映的整數值,而且要盡量避免雜湊衝突。所以這個演算法的核心設計點就在於如何讓字串轉換成整數的情況下避免雜湊衝突,本文給出一種解決方式如下:
size_t bkdrhsah(const char* str)
return hash & 0x7fffffff;
}
更多的可以參考筆者推薦部落格「字串雜湊演算法詳解」。 資訊檢索與排序模型之布林模型
在 學習布林模型之前首先讓我們了解一下模型的基本概念為後面的學習奠定基礎。模型是採用數學工具對現實世界某種事物或某種運動的抽象描述,面對相同的輸入,模型輸出應能夠無限地逼近現實世界的輸出 如 天氣預報模型 資訊檢索模型就是表示文件與使用者查詢以及查詢與文件的關係框架。下圖是常用的資訊檢索模型以及所支...
web搜尋學習筆記之概率模型
1.為什麼概率模型?直觀上,乙個ir系統不可能給出乙個確定的答覆 乙個文件是否滿足乙個查詢?就算是人類,也不能給出這樣確定的回答。因此,需要進行不確定性地判斷。而概率理論正是進行不確定性推理的理論。概率方法既是最古老的資訊獲取方法之一,也是當前最熱門的資訊獲取方法之一。2.跟別的模型的比較 布林模型...
Python與機器學習之模型結構 生成學習演算法
在前面我們談論到的演算法都是在給定x的情況下直接對p y x 進行建模。例如,邏輯回歸利用h x g tx 對p y x 建模。如果換個思路,首先根據大象 y 1 的特徵來學習出乙個大象的模型,然後根據狗 y 0 的特徵學習出狗的模型,最後對於乙個新的樣本,提取它的特徵先放到大象的模型中求得是大象的...