2011-12-10 73 views
13

我在過去幾天中搜索R-Tree的穩定實現,支持無限維(20左右就足夠了)。我只發現這個http://sourceforge.net/projects/jsi/,但他們只支持2個維度。R-Tree實現Java

另一個選項將是間隔樹的多維實現。

也許我對使用R-Tree或Intervall-Tree來解決我的問題的想法完全錯誤,所以我簡單地說明了問題,您可以發送給我您關於此問題的想法。

我需要解決的問題是某種最近鄰居搜索。我有一組天線和房間,每個天線間隔整數。例如。天線1,最小-92,最大-85。實際上,它可以表示爲房間 - >天線集合 - >天線間隔。 這個想法是,每個房間在R-Tree上跨過天線的維度和每個維度的間隔。

如果我用N天線和每個天線的值得到一個查詢,那麼我可以僅僅將信息表示爲房間中的查詢點並檢索距離「最近」的房間。

希望你有問題的想法和我的想法。

+1

nvm它的一箇舊線程:請注意,有數據結構專門設計用於支持像M-trees這樣的最近鄰居查詢。 https://en.wikipedia.org/wiki/M-tree –

回答

3

我並不完全清楚你的確切問題是什麼,但是R樹或區間樹在20個維度中不能很好地工作。這並不是很多維度,但它足以讓維度的詛咒開始顯現。爲了明白我的意思,可以考慮僅僅考慮一個盒子的所有鄰居,包括角落和邊緣以外的所有鄰居。有20個尺寸,您將有3 - 1或3,486,784,400個相鄰的盒子。 (通過認識到每個軸上的鄰居可以是-1單位,0單位或+1單位,但(0,0,0)不是鄰居,因爲它代表原始框。)

我很抱歉,但你要麼需要接受蠻力搜索,要麼更好地分析你的問題,並提出一個更聰明的解決方案。

+0

Y我知道維度的詛咒。但是我會嘗試使用R-Tree,因爲20維是最糟糕的情況。也許我甚至可以以某種方式減小尺寸。但我想測試一下,並將其與其他更好的解決方案進行比較。 – drame

+1

這取決於您的數據。我已經在27+維顏色直方圖上成功使用了R-Trees。 –

3

請注意,當您有離散數據時,R-Trees可能會嚴重降級。你首先需要找出合適的數據表示,然後測試你的查詢是否適用於數據的一個子集。

R-Trees只會讓您的查詢更快。如果他們一開始不工作,這將無濟於事。 你應該先測試你的方法,而不要先使用R-Trees。除非您點擊大量數據(比如100.000個對象),否則內存中的線性掃描可以輕鬆地勝過R-Tree,特別是當您需要某個適配器層時,因爲它與代碼沒有很好的整合。

這裏明顯的方法是隻使用使用邊界矩形,併線性掃描它們。如果它們能夠工作,則可以將MBR存儲在R-Tree中以獲得一些性能改進。 但是,如果它不與線性掃描工作,也不會與R-樹工作,要麼(它不會工作得更快。)

+0

是的。但是爲了測試,我首先需要一個可行的實現。 ;) – drame

+0

是的,但不是R-Tree。只需通過線性掃描來完成!再次; R-樹只會*加速*,而不能解決以前無法完成的任何任務。 –

+1

加速正是我想要的。因此我正在尋找一個通用的,免費的,穩定的實現。例如在背景中使用紅黑樹的TreeMap的本地實現。 – drame