簡體   English   中英

如何在B +樹中實現字符串鍵?

[英]how to implement the string key in B+ Tree?

許多b +樹示例都是使用整數鍵實現的,但是我也看到了一些其他一些同時使用整數鍵和字符串鍵的示例,我了解了b +樹的基礎,但我不了解字符串鍵的工作原理?

我還使用了多層B樹。 擁有一個字符串可以說測試可以看作是[t,e,s,t]的數組。 現在考慮一棵樹。 每個節點在特定位置只能容納一個字符。 您還需要考慮某些鍵/值數組實現,例如數組,樹或其他內容的不斷增長的鏈接列表。 它還可以使節點大小動態化(字母數量有限)。

如果所有鍵都適合葉子,則將其存儲在葉子中。 如果葉子變大,則可以添加新節點。

現在,由於每個節點都知道其字母和位置,因此您可以從葉子中的鍵中剝離這些字符,並在搜索時或如果您知道葉子+葉子中的位置來重構它們。

如果現在,在創建樹之后,以某種格式編寫樹,最終將遭受字符串壓縮,即使每個字母組合(前綴)可以被1000個字符串共享,也只能存儲一次。

簡單壓縮通常會對普通文本(使用任何語言!)和內存以1:4進行1:10壓縮。 而且,您還可以搜索任何給定的單詞(這些單詞是您使用B + Tree的字典中的字符串。

這是一個極端,您可以在其中使用多層。

數據庫通常使用特定的前綴樹(前x個字符,其余的存儲在葉子中,並在葉子中使用二進制搜索)。 也有一些基於實際密度使用可變前綴長度的實現。 因此,最終它是非常特定於實現的,並且存在許多選擇。

如果樹應有助於查找確切的字符串。 通常會增加長度並使用每個字符的低位哈希來解決問題。 例如,您可以生成長度超過(8bit)+ 4bit * 6個字符= 32Bit的哈希->其哈希代碼。 或者,您可以同時使用第一個,最后一個和中間字符。 由於長度是最有選擇性的長度之一,因此在搜索字符串時不會發現很多沖突。

此解決方案非常適合查找特定的字符串,但會破壞字符串的自然順序,因此您沒有機會回答范圍查詢等問題。 但是在某些情況下,當您搜索特定的用戶名/電子郵件或地址時,這些樹就更好了(但問題是為什么不使用哈希圖)。

字符串鍵可以是指向字符串的指針(很有可能)。

或者,鍵的大小可以適合大多數琴弦。 64位包含8個字節的字符串,甚至16個字節的密鑰也不太荒謬。

選擇密鑰確實取決於您打算如何使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM