我有一個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值的對的原因。
任何幫助,你可以提供將不勝感激。
所以你的意思是問有沒有辦法以稀疏的方式解析文件?也許只能根據查找來讀取它的一部分? – AxelOmega 2013-03-13 00:54:52
我想讀取整個文本文件,並以這種方式存儲它,當我查找一個值時,我可以在不搜索正確的X和Y鍵的情況下執行此操作。 – user1764386 2013-03-13 01:03:59
因此,只需使用答案中建議的四叉樹即可。 – AxelOmega 2013-03-13 01:21:16