2011-10-10 66 views
1

假设我们有一个大的(int,string)元素的只读列表。用于并行搜索的最快的.net数据结构

什么是从列表中获取物品的最快方法?

我知道一个通​​用字典是快速的,但据我所知它只使用1个CPU,而今天的计算机至少有2个CPU。

作为一个侧面的问题:什么是最快的解决方案来搜索这个集合的多个项目?例如collection.GetItems(new int [] {1,2,3,4}),其中1,2,3,4是键。

谢谢!

回答

2

字典使用散列表,它应该分配到O(1)。计算密钥上的散列值应该非常快,并且散列查找是直接数组内存偏移量,并且希望能够行走非常短的碰撞链。

因此,我不建议优化查找,除非字典无法满足您的需求,而且速度太慢。你可能会争辩说,有一个处理器会浪费,但试图利用该处理器来优化一个可能不存在的问题将会使你的代码复杂化。

我会建议维护一个查找字典和每个查找。

唯一的考虑是记忆。字典将增加内存占用空间以使查找速度更快 - 典型的空间与时间的关系。

如果你需要保持低内存,你需要更快的查找,你有更多的处理能力(多核),那么也许。

在这种情况下,我会建议您查看任务并行库。这里是一篇文章:http://www.codeproject.com/KB/cs/TPL1.aspx

+0

我同意你的答案。我似乎忘记了哈希表如何工作。对于任何无法生成好散列码的问题,该问题仍然有效。使用并行扩展方法可行,但我期望看到一个BCL实现。 – user973156

+0

BCL词典 - 词典 bryanmac

+0

如果我理解正确,hastable和哈希函数一样好。就我的例子而言,字典就足够了。如果不使用良好的散列函数,则仅使用1个CPU进行比较搜索可能会让我感到无用。 – user973156