java - 在 log(n) 时间内插入和更新,性能更好

标签 java algorithm dictionary binary-search-tree

我正在使用 Java 开发一些金融算法。我有一个复杂的数据结构,其中有许多属性需要在算法的生命周期内更新。有时这个数据结构被更新超过1000次...

为了提高性能,尤其是 get(search)/update/insert,我决定使用 TreeMap 作为容器,在这方面效率很高。

现在是具有挑战性的部分。我需要更新我需要从需要的容器中检索它的数据结构属性:

  1. 检查容器是否有对象
  2. 如果是,则获取对象,否则创建新对象并添加到 map
  3. 如果对象存在于容器中则更新对象

这个过程需要三个 x log(n),即检查、获取和放置。我想在 SINGLE log(n) 时间内完成此操作。

为此,我的解决方案是:

我总是使用 put 在 map 中添加对象 (insert/update/get)。 put 返回旧对象,我用旧值更新当前对象,这解决了 log(n) 但不同的对象丢失了对先前对象的引用,因为新值在映射中被替换。

是否有更好的解决方案或更好的容器来更新数据结构。我可以使用 List 并使用集合的二进制搜索,但为此我需要再次对数据结构进行排序,因为列表未排序。

请指导

最佳答案

我觉得你做得很好。

O(k.log(n)) = O(log(n))

其中 k 是常数。所以你的时间复杂度实际上是 O(log(n))

关于java - 在 log(n) 时间内插入和更新,性能更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35060529/

相关文章:

java - 有没有更好的方法来实现这些嵌套循环?

algorithm - 一种检测 Hankel 矩阵排列的算法

javascript - 带 Minimax 和 Javascript 的井字游戏

c# - IndexOutOfRangeExpection 发生在 Dictionary.Add 方法上

c++已停止工作静态 map 功能

java - 为什么是 JFrame.EXIT_ON_CLOSE 与 EXIT_ON_CLOSE?

java - 有时,确实会创建唯一 id 的消费者组,并且消费者会在没有分区的情况下卡住

java - Spring 接线,单例与原型(prototype)

java - 我们如何使用单例模式存储 url 和时间戳?

c# - 按 Arraylist 中的顺序按键对字典进行排序