我需要实现具有随机访问的自排序数据结构。有什么想法吗?
答案 0 :(得分:1)
自排序数据结构可以是二叉搜索树。如果您想要自我排序的数据结构和自我平衡的数据结构。 AVL树是要走的路。随机访问的检索时间为O(lgn)。
答案 1 :(得分:0)
维护排序列表并随意访问它至少需要O(lgN)/操作。因此,请查找AVL,red-black trees,treaps或任何其他类似的数据结构,并丰富它们以支持随机索引。我建议treaps,因为它们最容易理解/实施。
丰富treap树的一种方法是在每个节点中保留以该节点为根的子树中的节点数。修改树时,您必须更新计数(例如:插入/删除)。
答案 2 :(得分:0)
我最近并未涉及数据结构实施。可能这个答案根本不是答案......你应该看看Thomas Cormen编写的“算法简介”。那本书有许多“食谱”,解释了许多数据结构的内部工作原理。 另一方面,你必须考虑你想花多少时间编写算法,输入的大小以及是否存在特殊类型数据结构的实际必要性。
答案 3 :(得分:0)
答案 4 :(得分:-1)
自我排序有点暧昧。首先
什么样的数据结构?
有很多不同的数据结构,例如:
还有更多,他们每个人的行为都不同于其他人,当然也有其好处。
现在,并非所有这些都可以或应该进行自我排序,例如Stack,如果那个是自我排序的话会很奇怪。
但是,链接列表和二叉树可以自我排序,为此您可以在不同的时间以不同的方式对其进行排序。
对于链接列表
我愿意为此Insertion sort做好准备,你可以在维基和其他地方阅读各种关于此的好文章。我喜欢粘贴的链接。看看它并尝试理解这个概念。
如果要在插入后进行排序,即在随机时间排序,那么你可以实现一个与插入排序不同的排序算法,bubblesort或者quicksort,我会避免使用bubblesort虽然,它慢了很多!但更容易让人心跳加速。
随机访问
随机总是被讨论的内容所以请阅读有关如何执行良好随机化的内容,如果你有一个链表并且有一个“getAt”方法,那么你就可以了,你可以随机化一个索引介于0和n之间,并获取该索引处的项目。