有没有人知道一个数据结构,我可以在最坏的情况下访问和删除第k个项目O(logn),并且还支持在最坏的情况下O(logn)在第k个项目之后插入项目的操作?通过O(logn)访问和O(logn)插入实现数据结构?
1
A
回答
1
是的。你所描述的可以通过增强树来实现。每个节点都有一个计数器,指示其子树(包括其本身)中的节点数量。对于叶节点,计数器为1.对于根节点,计数器是节点的总数。这样,您可以从根开始查找具有二分搜索的第k个项目。无论何时插入/移除元素,都必须更新从该位置到根的路径中的计数器。
这种树被称为order statistic trees,排名树木,树木柜台...
请参阅Cormen,Leiserson,Rivest和Stein撰写的名为“Intorduction to Algorithms”的第14章“增加数据结构”。
0
相关问题
- 1. 在O(logn)O(logn)删除和索引访问的数据结构
- 2. 是O(LogN)== O(3LogN)?
- 3. 比较O((logn)!)和O(2^n)
- 4. 时间复杂度:O(logN)或O(N)?
- 5. BIg O符号:n * logn
- 6. O(logn)^ 2时间表现的示例
- 7. O(logn)时间和算法关系
- 8. 查找第n个fib数,在O(logn)
- 9. O(logn)中从0〜N的位计数
- 10. 在O(logn)运行时间中通过数组?
- 11. dificulty解决O(logn)中的代码
- 12. 为什么deleteMin的堆取O(logn)?
- 13. 分钟堆比O(logn)增加键好?
- 14. 查找RBTREE在O(LOGN)的算法
- 15. 为O蟒蛇heapq删除(LOGN)
- 16. 这段代码是O(n)还是O(logn)?
- 17. 为什么TreeSet迭代O(n)而不是O(n * logn)?
- 18. 哪一个更好? O(n^1/2)或O(logn)
- 19. 查找O(nlogn)和O(logn)附加空间中的最小正数
- 20. 添加,删除的O型插接件(LOGN)
- 21. 运行时间为O(logn)的二进制数除算法
- 22. 这个解决方案的时间复杂度是O(N)还是O(LogN)?
- 23. 用于删除O(logN)中小于k的元素的数据结构其中N是元素数
- 24. 在O(logn)时间使用STL堆执行减少键
- 25. 证明是n +(logn)时间^ 2是O(n)
- 26. 3Sum算法版本O(N^2 logn)时间
- 27. 在Elixir中进行二元搜索O(logN)?
- 28. 给出一种预处理方法,允许您在O(logn)
- 29. C++数据结构大O
- 30. Redis:当插入的元素在开始或结束时,ZADD是否优于O(logN)?