【发布时间】:2011-05-12 10:12:19
【问题描述】:
我正在搜索长度为 12 的向量空间,其中条目为 0、1、2。例如,一个这样的向量是
001122001122。我有大约一千个好的向量和大约一千个坏的向量。对于每个坏向量,我需要找到最接近的好向量。两个向量之间的距离只是不匹配的坐标数。好的向量排列得不是特别好,它们“好”的原因在这里似乎没有帮助。我的首要任务是算法要快。
如果我做一个简单的穷举搜索,我必须计算大约 1000*1000 的距离。这似乎很笨拙。
如果我首先使用好的向量应用 Dijkstra 算法,我可以计算空间中每个向量的最近向量和最小距离,因此每个坏向量都需要简单的查找。但是空间中有 3^12 = 531,441 个向量,因此预计算是一百万次距离计算。节省不多。
你能帮我想想更好的办法吗?
编辑:因为人们认真地问是什么让他们“好”:每个向量代表六个等边三角形的六边形图片的描述,这是一个 3D 立方体排列的 2D 图像(想想广义的 Q-bert)。等边三角形是立方体 (45-45-90) 面的一半,倾斜成透视图。其中六个坐标描述了三角形的性质(感知的地板、左墙、右墙),六个坐标描述了边的性质(感知的连续性,两种感知的不连续性)。 1000 个好的向量是那些代表透视立方体时可以看到的六边形的向量。搜索的原因是对充满三角形的十六进制地图应用局部校正...
【问题讨论】:
-
“他们‘好’的原因在这里似乎没有帮助。”如果您的手指在尝试时不会掉下来,那么解释是什么使向量“好”和“坏”可能会很好。我经常遇到这样的情况,我认为某些东西没用,而其他人却想出了如何使用它。
-
找到 1000*1000 的距离似乎并不需要很长时间......一百万距离计算可能需要一两秒钟,即使是用高级语言编码。
标签: algorithm math search dijkstra