2013-03-13 40 views
2

我有一個C++程序,其在格式期待一個輸入文件稀疏矩陣值:C++ - 仰視沒有循環

X Y Z 
1 1 .642 
1.1 1 .482 
1.2 1 .394 
1.3 1 .420 
1.4 1 .948 

該文本文件是很長 - 大約2萬線左右。我現在需要將它讀入我的C++程序中,以便爲任何(X,Y)對執行Z查找。如果(X,Y)對與我的輸入文件中的對不完全相同,我需要使用最接近的X和最接近的Y值。如果我有一個完整的矩陣而不是非零值,那麼X和Y座標將會均勻分佈。

我的問題是確定最快的方法來做到這一點。我想避免實際搜索最接近X的向量,然後搜索最接近Y的向量。有沒有辦法在沒有循環和搜索的情況下完成此操作?某種哈希表可用於查找值嗎?

我是一個腳本人和一個C++新手,所以我很抱歉,如果這似乎微不足道。所以,以供參考,我需要快速的方法來做到:

lookup(1.1,1) 
    >>> .482 

lookup(1.112, 1) 
    >>> .482 // value corresponding to closest x and closest y 

lookup(0,0) 
    >>> .642 // value corresponding to closest x and closest y 

這是可能的直接,如果我有充分的矩陣,例如:

1.1 1.2 1.3 1.4 1.5 
1.1 
1.3 
1.5  (Z values) 
1.7 
1.9 

爲了找到屬於Z值(1.5 ,1.2)我可以簡單地返回在索引[1.5 /(x_spacing),1.2 /(y_spacing)]處找到的Z值。

授予我也需要通過此間距減去我的查找值,如果確切(X,Y)對不存在,則舍入。但底線是,它允許我在不進行任何搜索的情況下得到適當的Z值。我想要完成同樣的事情,除非不佔用巨型全矩陣需要的所有空間。這就是文本文件只包含對應於非零Z值的對的原因。

任何幫助,你可以提供將不勝感激。

+0

所以你的意思是問有沒有辦法以稀疏的方式解析文件?也許只能根據查找來讀取它的一部分? – AxelOmega 2013-03-13 00:54:52

+0

我想讀取整個文本文件,並以這種方式存儲它,當我查找一個值時,我可以在不搜索正確的X和Y鍵的情況下執行此操作。 – user1764386 2013-03-13 01:03:59

+0

因此,只需使用答案中建議的四叉樹即可。 – AxelOmega 2013-03-13 01:21:16

回答

2

我建議將它存儲在結構化樹中。例如,四叉樹。這將是節省空間的稀疏存儲空間,搜索最近點也很容易。

C++中的四叉樹教程是here

+0

我考慮使用樹。我想我真正要問的是,如果有一種方法(類似於哈希表)取任何X,Y對並直接得到Z.這將是可能的一個完整的表。例如,我可以取任何x值,除以X座標之間的差值(假設等距),並給出正確的索引。我想要完成同樣的事情,而不必實際存儲整個完整的矩陣。 – user1764386 2013-03-13 00:19:33

+0

好吧,哈希表可以工作,但如果你想要的x不存在,那麼搜索一個接近的位置將非常困難。 – 2013-03-13 01:02:42

+0

有沒有其他方法可能會給我〜O(1)的複雜性?是否還有其他信息可以從第一個程序(生成文件)中提供給文件,所以這可能是可能的? – user1764386 2013-03-13 03:47:54