c ++ - 查找没有循环的稀疏矩阵值

时间:2013-03-13 00:10:13

标签: c++ hashtable sparse-matrix

我有一个C ++程序,期望输入文件格式为:

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

文本文件很长 - 大约20,000行左右。我现在需要将其读入我的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

为了找到与(1.5,1.2)有关的Z值,我可以简单地返回在索引[1.5 /(x_spacing),1.2 /(y_spacing)]中找到的Z值。

当然,我还需要用这个间距减去我的查找值,如果不存在确切的(X,Y)对,则舍入。然而,最重要的是,它允许我在不进行任何搜索的情况下获得适当的Z值。我想完成同样的事情,除非不占用巨大的全矩阵所需的所有空间。这就是为什么文本文件只包含对应于非零Z值的对。

非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

我建议将其存储在结构化树中。例如四叉树。它将是稀疏存储空间节省,并且搜索最近点也很容易。

c ++中关于Quad Trees的教程是here