Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 大文本中搜索词的哈希表。O(1)_C++_Algorithm_Dictionary_Hashtable_Hash Collision - Fatal编程技术网

C++ 大文本中搜索词的哈希表。O(1)

C++ 大文本中搜索词的哈希表。O(1),c++,algorithm,dictionary,hashtable,hash-collision,C++,Algorithm,Dictionary,Hashtable,Hash Collision,我必须为大文本(搜索、粘贴、删除)创建操作速度为O(1)的哈希表。 是真的吗?如何减少碰撞?有什么例子吗?以后我再也不用C++了。我找不到任何文本字典的示例哈希表。 目标语言C++(仅STL)。 您可以使用属于C++11标准的unordered\u映射或unordered\u集,如果C++11不是一个选项,则可以使用boost版本的这些容器。如果您需要自己实现解决方案,我相信您可以使用的实现作为参考 编辑:作为amit的指针,这仍然不是常量,因为您需要散列一个字符串,因此您至少需要遍历它一次。因

我必须为大文本(搜索、粘贴、删除)创建操作速度为O(1)的哈希表。 是真的吗?如何减少碰撞?有什么例子吗?以后我再也不用C++了。我找不到任何文本字典的示例哈希表。

目标语言C++(仅STL)。 您可以使用属于
C++11
标准的
unordered\u映射
unordered\u集
,如果
C++11
不是一个选项,则可以使用boost版本的这些容器。如果您需要自己实现解决方案,我相信您可以使用的实现作为参考


编辑:作为amit的指针,这仍然不是常量,因为您需要散列一个字符串,因此您至少需要遍历它一次。因此复杂性是
O(| S |)
其中
S
是正在搜索的字符串。此外,复杂性是预期的
O(| S |)
,因为无论哈希函数冲突发生得多么好(除了极少数情况下可以使用完美哈希,由于生日悖论,将以非常非常高的概率使用)。

哦,真的吗?请注意,它不是O(1),而是O(| S |),其中| S |是字符串的长度。显然,你不能期望O(1),因为你需要阅读全文string@amit这是正确的。还有摊销的复杂性。它不是摊销的,而是预期的,这是一件非常不同的事情。@NiklasB。摊销复杂性正是如此。它不处理最坏的情况。就像向量中的push_back是摊销常数一样,尽管最坏的情况是它使容器的大小增加了一倍。@IvayloStrandjev您对摊销的定义似乎不正确。摊销是指考虑一系列操作的成本,并计算单个操作产生的平均成本。例如,即使在最坏的情况下,应用于空向量的一系列n个push_-back/pop_-back操作也可以显示为O(n),因此操作的摊销成本为O(n)/n=O(1)。说“摊销的复杂性不能处理最坏的情况”是错误的