algorithm - 插入和搜索时哈希表的时间复杂度
问题描述
查看维基百科的哈希表,它说插入和搜索是O(1)。但我担心的是,我的老师告诉我只有查找是O(1)并且散列是O(s),其中s是字符串的长度。插入和搜索不应该是O(s)。它说散列(s)+查找(s)= O(散列(s)+查找(s))= O(s)。
谁能解释一下用大 O 表示法为哈希表编写时间复杂度的正确方法是什么,为什么?如果假设它是完美的散列并且没有发生冲突。
解决方案
哈希表不仅仅用于字符串。插入和查找的 O(1) 复杂性通常适用于哈希表,并且只计算已知操作。
散列和比较算作 O(1),因为必须始终为它们做一些事情,即使你只是存储整数,但我们不知道那是什么。
如果您对某些数据类型(如字符串)使用哈希表,这会使这些操作的成本成倍增加,那么复杂性也会成倍增加。
在测量使用哈希表的具体算法的复杂性时,考虑这一点实际上非常重要。例如,此站点上的许多基于字符串的算法都基于输入字符串的长度受某个常数限制的假设而被赋予复杂性。值得庆幸的是,情况通常如此。
推荐阅读
- reactjs - useEffect 与局部变量
- sql-server - 如何将所有 ID 字段设置为主键?
- ibm-cloud - 运行 cf target 时,我得到 No org or space targets,使用 'cf.exe target -o ORG -s SPACE'
- c++ - dll 值 ESP 中的运行时检查失败 #0 未保存
- java - 在 App 中实现 Proguard 时出错
- android - 如何在奥利奥的应用程序图标上显示多个通知计数徽章?
- ffmpeg - FFmpeg 批量 .mov > .gif 转换
- ansible - 将寄存器的值分配给 Ansible 中的另一个变量
- prolog - 使用适当的括号格式化输出 - Prolog
- node.js - pm2 + KOA process.send 未定义