2012-05-06 26 views
0

我需要實現一個B +樹,它適用於d樹。由於這一短 解釋,一個ķ -d樹相似,但二叉樹在其 節點有一個多值的關鍵,是與幾個值的關鍵。並且它將 也可以是B +樹引起的內部節點僅意在存儲密鑰和真實數據的 值的1存儲在所述葉節點。下面是它的一個短 圖形的解釋:如何用OO實現一組用kdtree的C++密鑰

short graphical explanation

我的葉節點具有的空間爲2組的元素,當我添加的第一個2的一切,直到我加入第三,我必須做一個分裂 工作正常。對於這一點,因爲我 選擇密鑰的第一個值是定義的順序一個,我拿 所有三個元素的中值,結果是27,那麼所有元素 小於27向左走和那些大於或等於右邊的人。

當我添加第4個元素時,由於Tom和Linda的年齡小於27歲,他們已經完成了葉子節點,子添加Dom使得節點再次分裂,但是這次我必須切換鍵的哪個值定義了社會安全號碼爲 的訂單。我再取中間值,結果是530,所以 所有那些SS數小於530向左走,等等。

與最終ķ -d樹所得,與鍵作爲索引的某些值在 內部節點,和在葉節點中的完整鍵。

現在的問題是,解釋的背景後,我怎麼能實現對密鑰的 的解決方案,因爲我有在葉存儲節點的 完整的關鍵,但在內部節點我只用一個 鍵的值。

你可以看到同一個數據庫,在那裏我們有多個領域 與價值觀的相似,我們可以在同一時間 排序與不同領域的信息,一個比下等更重要。

我想製作class命名Key或任何其他名稱,具有atributes是 容納所有的值,上面的例子中,它可能是名 SSNumber int年齡和intstring。但我的問題是,如果我的客戶決定他想要增加更多價值,那麼我的班級會越來越大。這是一個很好的OO決定嗎?我能否以另一種方式實施並仍然是面向對象?我知道我的 的想象可能會比較差,但因爲我可以假設客戶想要更多的價值我 可以使某種保存我的價值觀清單的話,那就意味着我將不得不 做,可以支持任何類型的數據的列表,這聽起來不像OO 的方法。有任何想法嗎?

另外我想補充一點,因爲在我樹算法的某些時候我需要把1個屬性的關鍵字用作樹中的索引,所以我必須支持這個。

我真的很感激如何通過遵循OO 的方法來解決這個問題。

回答

1

製作一個Key一個KeyPart的數組,然後每種類型的鍵值(age,ss#)可以從KeyPart繼承。然後你的樹的每個內部節點可以存儲一個單獨的KeyPart和一個關鍵部分索引(知道它是什麼部分)。葉子可以存儲完整Key

+0

這是哇,真棒解決方案,非常感謝你!只是1個問題,我不知道你的意思是什麼「關鍵部分索引」像一個數字映射每個子類?無論如何,我現在非常有信心,我可以與這個想法合作,我可以找出其餘的。再次,非常感謝! – Ale

+0

無視我關於關鍵部分索引的問題,我現在完全明白。你的答案正是我需要的。 – Ale

相關問題