问题1)
我在 C++ 中有一个大的稀疏双精度向量,我需要从向量中有效地解析出非零元素的索引。我显然可以遍历长度并做到这一点,有更好的方法吗?
除非您对双打向量的构成有一些特殊的了解(例如,它已排序),否则您将获得最有效的循环。
当然,您可能应该考虑 eladidan 建议的结构变化。
我在 C++ 中有一个大的稀疏双精度向量,我需要从向量中有效地解析出非零元素的索引。我显然可以遍历长度并做到这一点,有更好的方法吗?
如果向量是真正稀疏的(n = o(N)
其中n
是非零元素的数量并且N
是向量的大小),那么用std::map<int,double>
or表示它std::unordered_map<int,double>
可能是最好的。通过std::map
方式,您可以在O(log(n))
. 使用std::unordered_map
查找操作需要的摊销时间为O(1)
. 在这两种情况下,非零元素的数量只是容器的大小。这两种方法也占用O(n)
空间而不是O(N)
.