我试图比较哈希表查找和线性搜索的性能。我创建了一个包含1000个项目的哈希表,并发现在哈希表中查找的时间为0.0002(我使用DateTime.Now查找查找前后的系统时间并减去它们)。我在一个数组中有相同的1000行,并使用线性搜索查找相同的值。事实证明它比哈希表查找所花费的时间要少。
我认为哈希表比线性搜索更快。它是如何工作的 ?
由于
答案 0 :(得分:3)
首先,你的计时机制并不好。如果要测试性能,则应使用高分辨率计时器,如System.Diagnostics.Stopwatch
。
其次,您需要在查找空间上随机均匀分布的许多查找中找到平均查找时间,而不仅仅是一个特定项目的查找时间。
答案 1 :(得分:1)
答案可以在这篇文章中找到:
An Extensive Examination of Data Structures Using C# 2.0,
在“ The System.Collections.Hashtable Class ”一节
这是(极端)简短的概要:
添加到集合(Add(object key, object value)
):
key
和value
参数key
参数。这是一个复杂的公式,它使用Object.GetHashCode()
方法并在索引中产生一个位于0和hashsize之间的位置(哈希表中的插槽数({{{}使用的内部查找结构1}})。访问集合中的项目(System.Collections.HashTable
):
object this[object key] { set; get; }
参数key
参数上的hash algorighm计算哈希表中的位置。key