是否针对任何地方的插入进行了优化的新列表数据结构?

时间:2013-03-28 20:07:13

标签: java arrays algorithm data-structures

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

二叉树很有用,但我认为广义列表更适合这个目的。我不知道为什么它们不像树木一样广泛使用。

但是,广义列表本身并不足以实现列表:它们必须具有可以保持清晰的属性,而不是在随机插入后的许多子列表中退化。

  

我建议使用广义列表不能包含与其包含列表相同或更多项目的子列表。如果这个属性是   如果我们泄漏子列表的元素,它就可以恢复   在父列表中。

例如(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)有点混乱和丑陋,虽然它似乎有用,但它也有记录。你觉得怎么样?

1 个答案:

答案 0 :(得分:0)

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