javascript - 在 JavaScript 中创建省略索引的数组结构

标签 javascript arrays node.js time-complexity constant-time

数组中的索引(维护索引)使 Array.prototype.shiftArray.prototype.unshift O(N) 而不是 O(1)。

但是,如果我们只想使用 pop()/push()/shift() 和 unshift() 而从不使用索引进行查找,是否有一种方法可以实现省略索引的 JavaScript 数组?

我想不出办法。 我能想到的唯一方法是使用数组,并且只使用 pop()/push()(因为它们是 O(1))……但即使有多个数组,也不确定是否可行。

如果可能,希望在不使用链表的情况下执行此操作。我使用双向链表实现了此解决方案,但想知道是否可以在不使用链表的情况下执行此操作。

最终目标:尝试创建一个 FIFO 队列,其中所有操作都在恒定时间内进行,而不使用链表。

最佳答案

ES2015 怎么样 Map你用整数索引?

我们将 map 称为 myFIFOMap

您保留一个firstlast 整数成员作为您的FIFO 类的一部分。将它们都从零开始。

每次你想push()到你的FIFO队列,你调用myFIFOMap.set(++last,item)pop() 看起来像这样:

const item = myFIFOMap.get(first); 
myFIFOMap.delete(first++); 
return item;

应该是 O(1) 来推送或弹出。

不要忘记检查边界条件(例如,当 first===last 时不要让它们 pop())。

鉴于 JavaScript 实际上使用 double float ,您应该能够运行 ~2^53 objects在您遇到整数精度问题之前通过您的 FIFO。因此,如果您每秒通过 FIFO 运行 10,000 个项目,那么对于大约 28,000 年的运行时间来说应该是好的。

关于javascript - 在 JavaScript 中创建省略索引的数组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50689204/

相关文章:

javascript - 更改无序列表元素的焦点颜色?

php - 引用 - 这个错误在 PHP 中是什么意思?

arrays - 在haskell中迭代数组

javascript - 如何使用 es6 样式导入导入 MongoDB?

javascript - Js如何从fetch()获取数据到服务器?

javascript - HTML文本溢出省略号检测

javascript - 当第二个请求依赖于第一个请求时,如何在 Angular 中同步 http.get 请求?

c# - 在 C# 中,创建新字节数组时字节的默认值是多少?

javascript - 即使在 hasOwnProperty 检查之后也是 "Cannot read property of undefined"

node.js - 无法连接到数据库MongoParseError : Unescaped at-sign in authority section