我正在寻找一种具有高效插入、删除和查找的数据结构,二叉树通常符合条件,但是我的项目不是根据它们的值排序的——而是我需要根据它们的实际插入位置对它们进行排序(即像一个数组)。所有操作都将基于此位置访问、插入或删除项目,就像使用数组一样。
- getItem(int 位置)
- addItem(int insertPosition, 对象项)
- removeItem(int 位置)
所以基本上问题是插入/删除一个项目会导致它之后的所有项目的索引移动 1。显然存储索引永远不会产生比 O(n) 更好的结果,所以基本的二叉树/哈希表已经不存在了。
是否有一种结构能够在亚线性时间内实现所有这些操作?我一直认为可以以某种方式调整二叉树,并且我会通过让每个节点存储其左分支中的节点数来支持按索引查找。