【问题标题】:What is the time complexity for looking up an item in a Perl hash?在 Perl 哈希中查找项目的时间复杂度是多少?
【发布时间】:2010-09-23 15:17:32
【问题描述】:

假设我有一个包含 n 个单词的文件。当我阅读文件中的每个单词时,我会将它存储在哈希中(在 Perl 中)。当我回去查找哈希中的单词时,在哈希中查找字符串(单词)的时间复杂度是多少?

例如:

my %seen = ();
@arr=("one","two","three");
foreach $item (@arr){
    if($seen{$item}) {//do something}
}

在这个程序中,我在哈希中查找一个项目。在哈希中查找字符串的时间复杂度是多少?

另外,能否详细说明一下 Perl 是如何实现散列的? (内部在哈希中发生了什么?或者它只是一个关联数组)

【问题讨论】:

标签: perl hash


【解决方案1】:

Perl 哈希提供恒定时间查找。它们被实现为真正的哈希表(根据需要自动重新调整),而不是关联数组。

【讨论】:

  • 这是否与密钥无关?键也可以是字符串..对吗?
  • @sekhar,密钥只能是字符串。数字和引用在用作哈希键时会转换为字符串。
  • Perl 哈希关联数组。 associative array 是一种抽象数据类型;哈希表是实现它的一种方式。
【解决方案2】:

如果您想了解 Perl 如何实现散列,请通过 hv.chv.h 中的源代码进行操作。如果您只想要概览,您可以尝试perlguts。但是,正如friedo 所说,查找任何键的时间与查找任何其他键的时间相同。这是一个真正的哈希。

您可能还想在 Programming Pearls(不是 Perl 书籍)中查看 Jon Bentley 关于散列的文章。

【讨论】:

    猜你喜欢
    • 2011-09-25
    • 2014-08-06
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2020-11-19
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多