![]() |
1
17
Perl5中的关联数组是用 hash tables 已摊销o(1)(即固定时间)插入和查找。这就是为什么我们倾向于称它们为散列而不是关联数组。
很难找到说明Perl5使用哈希表实现关联数组的文档(除了我们称关联数组为“hashes”),但至少在
更好的引述
当然,O(1)只是理论性能。在现实世界中,我们没有完美的散列函数,因此散列函数在变大时会变慢,并且有一些退化的情况会将散列转换为O(N),但是Perl尽其所能防止这种情况发生。下面是一个Perl哈希的基准,其中有10、100、1000、10000、100000个键:
以下是基准代码:
|
![]() |
2
7
Perl哈希是 哈希表 ,所以它已经有了O(1)插入和查找。 |
![]() |
3
2
任何认为哈希插入或查找时间为0(1)的人 现代硬件 非常天真。测量相同值的GET很简单 wrong . 下面的结果将使您更好地了解正在发生的事情。
以上结果在具有5MB CPU缓存的系统上进行测量。请注意,性能从3.5 m/s显著下降到1 m/s查找。不管怎样,它仍然非常快,在某些情况下,如果你知道你在做什么,你甚至可以击败像RDBMS这样的系统。您可以使用以下代码测量系统:
您也不应该忘记哈希查找时间取决于密钥长度。简单地说,没有真正的O(1)访问时间的技术。每个已知的真实技术都有最佳的O(logn)访问时间。只有系统具有O(1)访问时间,因为限制了它们的最大N值,并且降低了它的低N值的性能。这就是现实世界中事情是如何工作的,这也是为什么有人会制造像这样的算法的原因。 Judy Array 进化也越来越糟。 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
BioRod · 我不能用Perl打印键和值 2 年前 |
![]() |
user17227456 · Perl CLI代码无法追加字符串行 2 年前 |
![]() |
LearnToBeBetter · 读取文件,搜索字符串,打印字符串 3 年前 |
![]() |
KJ7LNW · 一些波斯语文本的宽字符印刷,但其他文本则没有 3 年前 |
![]() |
con · 如何搜索大型数据结构并返回一系列给出特定值的键/数组? 3 年前 |
![]() |
Pranay Nanda · 使用regex解析许可证文件 7 年前 |