java - 为在任何地方插入而优化的新列表数据结构?

标签 java arrays algorithm data-structures

<分区>

我一直在寻找一个针对任意插入优化的列表数据结构,在任何索引处,但我没有找到很多关于这个问题的信息,除了一些有趣的二叉树和很多痛苦的数组操作。

二叉树很有用,但我认为广义列表更适合此目的。无论如何,我不知道为什么它们不像树那样被广泛使用。

但是,广义列表本身不足以实现列表:它们必须具有一个属性,可以使它们保持清晰,在随机插入后不会在大量子列表中退化。

I propose this propery: A Generalized list cannot have sublist with equal or more items than its containing list. If this property is violated, it can be restored if we spill the elements of the sublist in the parent list.

例如 (1 2 3 (4 5 7 (9 1) 0)) 是“不稳定的”,因为它有一个子列表比其父列表有更多的“插槽”(不算元素递归)。可以使用之前提出的属性将其重写为 (1 2 3 4 5 7 (9 1) 0)

此外,新元素会创建新的子列表,而不是直接添加到父列表中。例如:

如果一个新元素“x”被添加到

的索引 1
(1 2 3 5)

那就是

(1 ("x" 2) 3 4)

如果将“y”添加到索引 1,则它将是

(1 (("y" "x") 2) 3 4)

这是“不稳定的”,所以它会被转换成

(1 ("y" "x" 2) 3 4)

这也是不稳定的,所以它会被转化为

(1 "y" "x" 2 3 4)

我的问题是:之前是否描述过这种数据结构?我的意思是,我认为它真的很有用,而且几乎微不足道。如果它以前存在,为什么不那么为人所知? 它真的有用吗?它有名字吗?我确实认为它很有用,但我可能错了。

implemented it in a persistent fashion ,但我的代码 (Java) 有点乱和丑陋,尽管它似乎可以工作并且也有记录。你怎么看?

最佳答案

这听起来类似于跳过列表:http://en.wikipedia.org/wiki/Skip_list

关于java - 为在任何地方插入而优化的新列表数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15691191/

相关文章:

java - spring boot多行import.sql application.yml配置

java - WeavingURLClassLoader 只能编织本地 jar 的各个方面吗?

java - 在 Java 中解析缩进文本树

algorithm - 在多个处理器上进行大整数模乘的最快运行时间是多少?

java - WSDL 到 Java 还是 Java 到 WSDL?

java - 如何让 TestNG 一次打开一个浏览器

arrays - 无法使用数组成员变量分配数组

java - Java 中的二叉树。 System.out.println() 的问题

javascript - 确保不存在重复的目录路径

c++ - 文件 I/O 行尾