javascript - 如何提高字典的性能?

标签 javascript algorithm performance dictionary

我的问题是,我在这段代码中没有最快的性能。 我有大约 30 个测试,我必须用这段代码解决,但我只解决了 28 个,直到它抛出错误,因为它花了很长时间。

这是我的示例输入:

queryType: ["insert", "insert", "addToValue", "addToKey", "get"]
query: [[1,2], [2,3], [2], [1], [3]]
If queryType[i] === "insert" -> Add at query[i][0] value query[i][1].
If queryType[i] === "addToValue" -> Add query[i][0] to every value.
If queryType[i] === "addToKey" -> Add offset.
If queryType[i] === "get" -> Add query[i][0] to result value.

这是我当前的代码:

function testHashMap(queryType, query) {
    let hash = {};
    let result = 0;
    let offset = 0;
    let len = queryType.length;
    for (let i = 0; i < len; ++i) {
        let querys = query[i][0];
        switch (queryType[i]) {
            case "insert": 
                hash[querys] = query[i][1];
                break;
            case "addToValue": 
                for (let key in hash) {
                    hash[key] += querys;
                }
                break;
            case "addToKey": 
                offset += querys;
                break;
            case "get": 
                result += hash[querys - offset];
                break;
        }
    }
    return result;
}

有人知道如何提高此功能的速度吗? 感谢您的宝贵时间!

最佳答案

正如马特·蒂默曼斯 (Matt Timmermans) 在评论中指出的那样,一种加快速度的方法可能不是实际增加每个值。假设我们的起始值为

[1, 1, 1, 1]

现在给每个元素加 3,我们记录一个通用的 offset,3。

假设我们现在得到一个插入,[2, 4]。我们想将第三个元素设置为 4,因此我们首先减去我们的偏移量。 4 - 3 = 1 所以我们实际上根本不改变第三个元素!

现在我们被要求获取索引 2 处的元素。我们添加我们的一般偏移量:

1 + 3 = 4

正如预期的那样。

这样一来,所有更新都保持在 O(1) 时间复杂度,这应该会运行得更快。

关于javascript - 如何提高字典的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57758272/

相关文章:

javascript - 轮询数据库获取值的最佳替代方法是什么?

javascript - jQuery 单击事件不适用于 li 标签

javascript - 使用动态列将数据放入表中

java - array(or ArrayList) 和 LinkedList 在迭代时执行相同的操作吗?

MySQL 查询缓存在某些表上不起作用 - 正确的设置

javascript - 每 10 秒替换一次 <div> 内容不起作用

c - 添加自身的算法

sql - 提取 SQL 查询的基础表名的算法

java - 在 Java 中将带有列表值的映射转换为列表

c# - 诊断 asp.net 网站/应用程序池的性能