我正在閱讀有關作者Robert Sedwick在C++算法中使用符號表實現的索引實現。使用符號表實現二元搜索樹索引
下面是從書中
我們可以適應二叉搜索樹建立索引的正是 相同的方式,我們的排序和堆提供間接片段。 像往常一樣,通過關鍵成員 函數安排從項目中提取密鑰。而且,我們可以使用並行數組作爲鏈接,就像我們爲鏈接列表所做的那樣。我們使用三個數組,每個數組用於 項目,左側鏈接和右側鏈接。鏈接是數組索引 (整數),並將我們替換鏈接引用如
X = X->升
在我們與數組引用如爲X = L的所有代碼
[X] 。
這種方法避免了動態內存分配的每個 節點的項目的成本佔據了陣列,而不考慮搜索功能, 我們預先分配每個項目兩個整數來抱樹鏈接, 認識到我們需要所有 項目都在搜索結構中時,至少需要這麼多的空間。鏈接的空間不是 總是在使用中,但它在那裏供搜索例程使用,不需要任何時間開銷用於分配。這種 方法的另一個重要特徵是它允許額外的數組(額外的信息與每個節點相關聯的 )被添加,而根本不改變樹操縱碼 。當搜索例程返回一個項目的索引時, 通過使用該索引訪問適當的數組,可以立即訪問與該項目相關聯的所有信息 。
實施BSTS在搜索的 項大型陣列,以幫助的這種方式有時是有用的,因爲它避免了 複製物品的額外費用進入ADT的內部表示,和分配的 開銷和建設的新。如果空間有限且符號表增長並且顯着縮小,特別是如果預先很難估計符號表的最大尺寸時,則使用陣列 不適用。如果沒有準確的大小 預測是可能的,未使用的鏈接可能會浪費項目 陣列中的空間。
我上面的文字問題是
什麼是筆者的「因爲我們沒有爲鏈表,我們可以使用並行陣列來鏈接」是什麼意思?這個說法是什麼意思,什麼是平行陣列。
作者所指的鏈接是數組索引,我們用x = l [x]替換鏈接引用,例如x = x-> l。
作者所說的「這種方法的另一個重要特點是,它允許額外的數組(額外的信息與每個節點相關聯)被添加,而根本不需要改變樹操作代碼。」 ?
使用'的std :: map'。如果可能,請使用C++ 11編譯器。 –
@Basile,這可能是因爲您只想使用數據結構,但如果您的目的是要理解數據結構實際如何工作,這不太可能有幫助_work_ :-) – paxdiablo
另請參閱wikipages [二進制搜索樹]( http://en.wikipedia.org/wiki/Binary_search_tree),[自平衡二叉搜索樹](http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree),[紅黑樹](http: //en.wikipedia.org/wiki/Red-black_tree),[AVL樹](http://en.wikipedia.org/wiki/AVL_tree)等等...... –