【发布时间】:2015-05-22 20:22:14
【问题描述】:
面试题:如何使用数组设计一个获取、插入、删除O(1)的数据结构?
我的想法是首先选择一个素数作为数组的大小,然后使用“mod by the size of array”作为简单的哈希函数。对于数组中的每个点,我们存储一个链表来处理碰撞。
有没有更好的解决方案?
【问题讨论】:
-
O(1) 最多? Binary search algo. 哈希表也可以。如果你能创造出一个平均或最差 O(1) 的新结构,你应该成为一名大学教授。
-
您正在尝试以不打算使用的方式使用数据结构。如果索引已知,则数组旨在用于快速检索/插入/删除。这个结构基本上已经做好了;一个杂烩。如果您的目标是〜O(1),那么您应该查看哈希表的实现,而不是尝试以不打算使用的方式更改结构。
-
但如果你在面试中被问到,你不能告诉他们
-
@EvanBechtol 许多哈希表是使用数组实现的,因此一个合理的答案是“制作基于数组的哈希表”(以及如何执行此操作的详细信息)。
-
@user3692521 我实际上认为告诉你的面试官“这不只是一个哈希表吗?”可能是个好主意。并从那里开始讨论。他们可能会问您对哈希表了解多少,这可能会引导您就另一个主题进行良好的对话。如果他们说“是的,现在开始编写代码”,那么你就去实现一个哈希表。只要你一直诚实有礼貌,我看不出这种事与愿违。
标签: arrays data-structures hashtable