我有一个结构数组,~100个独特元素,结构不大。由于遗留代码,为了在这个数组中找到一个元素,我使用哈希函数来找到一个可能的起始点,开始循环,直到找到我想要的元素。
我的问题是:哈希函数(以及产生的哈希表)是否过度?
我知道大型表哈希对于良好的响应时间至关重要,但是对于表这个大小?
更简洁的是,是否有一个表格大小低于哪个写入哈希函数是不必要的?
语言不可知的答案请。
谢谢,
答案 0 :(得分:2)
散列查找可以获得更好的可扩展性,从而获得更大的前期计算成本。没有固有的表大小,因为它取决于哈希函数的成本。粗略地说,如果计算哈希函数的成本与100个相等比较的成本相同,那么理论上只能在一百个项目以上的某个点上受益于哈希映射。获得特定答案的唯一方法是衡量绩效。
我的猜测是,出于性能原因,100个项目的哈希映射是过度的。
答案 1 :(得分:1)
标准的,明显的答案是编写可以完成工作的最简单的代码。确保您的代码接口尽可能干净,以便在需要时替换它。稍后,如果您发现代码花费了不可接受的时间,请将其替换为可提高性能的内容。
然而,从理论上讲,无法猜测线性搜索为您的任务提供可接受性能的项目数量的上限。也不可能猜测哈希表提供比线性搜索更好的性能的项目数。
然而,重点是,在特定情况下,很少需要弄清楚(特别是在定义不明确的理论基础上)哪种数据结构 best 。在大多数情况下,您只需要做出可接受的决定,然后实施它,这样如果事实证明它毕竟是不可接受的,您可以改变主意。
答案 2 :(得分:1)
创建时(或创建后)按“键值”对“独特元素数组”进行排序。然后使用'二分搜索'而不是哈希或线性搜索。现在你得到一个简单的实现,没有额外的内存使用和良好的性能。