【问题标题】:Find if an array has duplicates in O(N) time, with auxiliary structure [closed]使用辅助结构查找数组是否在 O(N) 时间内重复
【发布时间】:2018-06-16 01:18:09
【问题描述】:

我想知道在 C 语言中是否可以在 O(N) 时间内找到一个数组是否有重复项,但是您可以使用辅助数据结构,例如哈希表。请记住,数据结构中的插入也很重要。感谢您的关注。

【问题讨论】:

  • 你试过什么?你提到了哈希表——它看起来是一个很好的方向——你会用它做什么?
  • 这个问题不是 C 特有的。

标签: c arrays time duplicates


【解决方案1】:

是的,哈希表可以工作。

为每个单词计算哈希并尝试将其插入表存储桶中。如果桶非空,则比较桶中的单词,如果新词不存在,则将其添加到桶中,否则您会发现重复。

这意味着您只处理输入的单词一次,但是,您可能需要多次检查存储桶中的单词。

处理输入是 O(N),处理桶是哈希表大小的函数。

大小为 1 的表格将导致检查每个单词 N 次,因此是 O(N2)。 N 的表大小将导致检查每个单词 0 次,因此将是 O(N)。

【讨论】:

  • "你比较桶中的单词 [the hash?],如果新单词不存在" 碰撞呢?
  • @alk,您对输入的单词进行哈希处理。哈希是一个介于 0 和 has table size-1 之间的数字。在该哈希(称为存储桶)的哈希表条目中,可以有多个单词(冲突)。您将哈希桶中的每个单词与输入单词进行比较。如果桶中不存在该单词,则添加它(新的冲突),否则该单词是重复的。
猜你喜欢
  • 2011-11-28
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 2020-01-22
相关资源
最近更新 更多