假设我有一个包含n个单词的文件。当我读取文件中的每个单词时,我将它存储在哈希(在Perl中)中。当我回过头来查找哈希中的单词时,在哈希中查找字符串(单词)的时间复杂度是多少?
例如:
my %seen = ();
@arr=("one","two","three");
foreach $item (@arr){
if($seen{$item}) {//do something}
}
在这个程序中,我正在查找哈希中的项目。在哈希中查找字符串的时间复杂度是什么?
此外,是否可以详细说明如何在Perl中实现哈希? (内部事情发生在哈希?或者它只是一个关联数组)
答案 0 :(得分:11)
Perl哈希提供常量时间查找。它们被实现为真正的哈希表(必要时自动重新调整),而不是关联数组。
答案 1 :(得分:4)
如果您想了解Perl如何实现哈希,请在 hv.c 和 hv.h 中完成源代码。如果您只想要概述,可以尝试perlguts。但是,正如弗鲁多所说,查找任何密钥的时间与查找任何其他密钥的时间相同。这是一个真正的哈希。
你可能还想看看Jon Bentley关于编程珍珠(而不是Perl书)中哈希的论文。