如何实现有序哈希表



我正在搜索如何实现有序哈希表,但没有找到任何内容

我想创建一个哈希表,您可以对其进行迭代,并根据定义或插入键的顺序为您提供元素。你通常是如何做到这一点的,以一种表演的方式?这是如何实现的?如果必须选择一种语言作为示例,我会考虑在JavaScript中这样做。例如,我知道JavaScript对象("哈希映射"(是有序的哈希映射,但我不知道它们是如何实现的。我想学习如何为自定义编程语言从头开始实现同样的东西。

举个例子,假设你列出了一个语言名称的本地脚本版本,比如";";对于";希伯来语";,作为关键,你想创建一个从母语到英语的映射,但你希望它们保持定义的顺序。你是如何实现的?

这个问题的通用、高性能解决方案是将链表与哈希表相结合。您将有一个双链接的节点列表,每个节点都通过哈希表进行索引。你可以在恒定的时间内向任何一个方向查询。大体上,操作实现如下,

  1. 插入-O(1(*-在链表的末尾插入一个节点,并通过散列映射通过其键引用该节点
  2. 按键检索-O(1(*-使用哈希表,找到相应的Node并返回其值
  3. 按键删除-O(1(*-使用哈希表,找到相应的节点,并通过删除其邻居对它的引用来删除它
  4. 遍历-O(n(-遍历链表。在这种情况下,n是节点数,而不是哈希表的全部容量

*实际的插入/检索/删除时间取决于哈希表实现的最坏情况。通常这是O(n(最坏情况,O(1(平均值。

(另一种选择是在每个节点中存储一个"下一个键",而不是指向下一个节点的直接指针。运行时是相同的,但遍历需要涉及哈希表,而在直接指针实现中可以绕过它。(

因此,如果你想自己实现这一点,你需要一个哈希表和一些节点在其中使用

相关内容

  • 没有找到相关文章

最新更新