具有随机访问的自排序数据结构

时间:2009-10-30 15:13:15

标签: data-structures

我需要实现具有随机访问的自排序数据结构。有什么想法吗?

5 个答案:

答案 0 :(得分:1)

自排序数据结构可以是二叉搜索树。如果您想要自我排序的数据结构和自我平衡的数据结构。 AVL树是要走的路。随机访问的检索时间为O(lgn)。

答案 1 :(得分:0)

维护排序列表并随意访问它至少需要O(lgN)/操作。因此,请查找AVLred-black treestreaps或任何其他类似的数据结构,并丰富它们以支持随机索引。我建议treaps,因为它们最容易理解/实施。

丰富treap树的一种方法是在每个节点中保留以该节点为根的子树中的节点数。修改树时,您必须更新计数(例如:插入/删除)。

答案 2 :(得分:0)

我最近并未涉及数据结构实施。可能这个答案根本不是答案......你应该看看Thomas Cormen编写的“算法简介”。那本书有许多“食谱”,解释了许多数据结构的内部工作原理。 另一方面,你必须考虑你想花多少时间编写算法,输入的大小以及是否存在特殊类型数据结构的实际必要性。

答案 3 :(得分:0)

我发现这里的答案中缺少一件事,即跳过列表 https://en.wikipedia.org/wiki/Skip_list

您会自动获得订单,搜索和创建需要一个概率元素。

不比二叉树更适合这个问题。

答案 4 :(得分:-1)

自我排序有点暧昧。首先

什么样的数据结构?

有很多不同的数据结构,例如:

  • 链接列表
  • 双重链表
  • 二叉树
  • 哈希集/地图
  • Stack

还有更多,他们每个人的行为都不同于其他人,当然也有其好处。

现在,并非所有这些都可以或应该进行自我排序,例如Stack,如果那个是自我排序的话会很奇怪。

但是,链接列表和二叉树可以自我排序,为此您可以在不同的时间以不同的方式对其进行排序。

对于链接列表

我愿意为此Insertion sort做好准备,你可以在维基和其他地方阅读各种关于此的好文章。我喜欢粘贴的链接。看看它并尝试理解这个概念。

如果要在插入后进行排序,即在随机时间排序,那么你可以实现一个与插入排序不同的排序算法,bubblesort或者quicksort,我会避免使用bubblesort虽然,它慢了很多!但更容易让人心跳加速。

随机访问

随机总是被讨论的内容所以请阅读有关如何执行良好随机化的内容,如果你有一个链表并且有一个“getAt”方法,那么你就可以了,你可以随机化一个索引介于0和n之间,并获取该索引处的项目。