我在Java编码,我需要一个排序的整数数据结构,它有最大的O(log(n))插入时间和O(1)按索引查找。是否有一个内置的数据结构可以做到这一点,或者如果没有,我如何自己编程一个?
我知道集合可以完成第一个任务,但要查找元素I,我需要在元素I之前遍历所有元素。
可能的解决方案是跟踪子元素数量的树,维基百科称之为“顺序统计树”。然而,查找性能与树的高度有关,即O(logn)。
快速展开的树,如B-树,可以通过索引显著减少查找,尽管它始终保持O(logn)。
不幸的是,Java的集合框架中没有这样的树。然而,几天的工作和测试应该会产生一个合理的实现:)
即使在最坏的情况下,是否有任何数据结构可以提供O(1)——即常数——插入复杂性和O(log(n))搜索复杂性? 排序后的向量可以进行O(log(n))搜索,但插入需要O(n)(考虑到我并不总是在前面或后面插入元素这一事实)。而列表可以进行O(1)插入,但不能提供O(log(n))查找。 我想知道这样的数据结构是否可以实现。
null 高++;storage.put(high,element); 低++; 高--;
问题内容: 我刚刚开始学习数据结构,并且在进行数组插入时想知道为什么数组插入的时间复杂度为O(n)而不是O(n + 1)? 在最佳情况下,当插入在最后时,时间复杂度为O(1)。我想我们正在考虑1插入元素,因为这里没有元素被移动。在最坏的情况下,假设我们必须移动n个元素然后插入新元素,那么时间时间复杂度是否应该为O(n + 1)?n用于移动元素,1用于插入。 非常感谢您的帮助。 问题答案: O(n)
我可以使用什么样的算法将两个排序数组合并为一个排序数组,最坏情况下的时间复杂度为O(log(m n)),其中n,m是数组的长度?我对算法的经验很少,但我检查了merge-sort,似乎合并步骤的时间复杂度是O(n)。在O(log(n))中是否有不同的合并方法? 编辑:我最初没有考虑过,但可能无法在O(log(n))中合并两个排序的数组?实际目标是找到两个排序数组的中值。有没有办法做到这一点而不合并
我正在寻找一个非常具体的数据结构。假设已知元素的最大数量。所有元素都是整数。允许复制。行动包括: 查阅如果我插入n个元素,是最小的元素,是最高的元素是k个最小的元素。所需运行时间: 插入。执行排序的插入,其中是一个整数。所需的运行时: 删除。删除(i)删除第i个元素。所需的运行时: 我想要一种数据结构,是这样吗?我的问题与语言无关,但我用C语言编写代码。
本文向大家介绍java数据结构之插入排序,包括了java数据结构之插入排序的使用技巧和注意事项,需要的朋友参考一下 插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。 插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。 如果输入数组已经是排好序的话,插入排