【发布时间】:2013-07-25 13:46:55
【问题描述】:
我有大约 400.000 个“项目”。 每个“项目”由 16 个双精度值组成。
在运行时我需要相互比较项目。因此,我正在复制他们的双重价值。这非常耗时。
我做了一些测试,发现无论我将哪些项目相互比较,都只有 40.000 个可能的返回值。
我想将这些值存储在一个查找表中,这样我就可以轻松地检索它们,而无需在运行时进行任何实际计算。
我的问题是如何有效地将数据存储在查找表中。
问题是,如果我创建一个查找表,它会变得非常庞大,例如:
item-id, item-id, compare return value
1 1 499483,49834
1 2 -0.0928
1 3 499483,49834
(...)
总计大约有 1.2 亿个组合。 对于现实世界的应用程序来说,这看起来太大了。
但我不确定如何避免这种情况。
有人可以分享一些很酷的想法吗?
非常感谢!
【问题讨论】:
-
“我正在复制他们的双重价值”是什么意思?您是说查找速度慢吗? unordered_map 有什么问题?
-
从文件中加载双精度值已经比我能承受的速度慢了,计算最终让我走到了边缘。
-
所以,你有类似的东西:
typedef double[16] item,你做了一个看起来像item a,b,c; for(int i = 0; i < 16; i++){ c[i] = a[i] * b[i];}的操作,这个乘法太慢了。您的目标是更有效地将结果存储在c中。这一切都正确吗? -
是的,没错。可能只有 40.000 个不同的返回值。我认为我可以以某种方式利用这个事实。
-
查找可能像乘法一样慢 - 我们可以加快文件读取速度吗?
标签: c++ lookup lookup-tables