【发布时间】:2017-07-22 10:47:13
【问题描述】:
我必须在某些条件下创建一个数据结构。
首先这4个函数必须在O(log(n))中:
insert(Object o)
insert(int index, Object o)
delete(int index)
update(int index, Object o)
第二:数据结构必须实现java.util.List
我的问题是 O(log(n)) 和列表。有很多树可以在 O(log(n)) 中进行操作(例如 BST、红黑树、AVL 树),但是这些树如何被索引以及如何插入到任何地方?
将其设置为仅列表确实会带来问题。
java.util.List 有这些实现类:
AbstractList、AbstractSequentialList、ArrayList、LinkedList、Stack、Vector
这些类中的大多数都有 O(1) 和 O(1)
有人对这个问题有任何建议或方法吗?
基本上,我正在寻找能够满足这些要求的数据结构。
【问题讨论】:
-
您在编程过程中来这里寻求帮助有点太早了。你需要问一个更具体的问题,最好能展示你编写的代码。
-
提示:如果按顺序遍历树,则可以将其视为列表。以项目的 index 作为排序值的平衡二叉树和每个节点中的 Object 有效负载将起作用;基本上它是一个
TreeMap<Integer, Object>,可能还有一个防止非连续索引的附加检查。 (如果要求索引是连续的,delete(int)不会是 O(log(n))。) -
排序数组呢?应该是 O(log(n))
-
@9000 是的,这是我的问题,delete(int) 不是 O(log(n))..
-
@9000 不确定如何在您的方法中实现具有随机访问的列表。如果一个元素当前映射到 3,并且其中一个使用
add(3,object),那么应该将位于 3 的元素移动到 4。你如何在 O(log n) 中做到这一点?
标签: java algorithm list arraylist data-structures