当前位置: 首页 > 知识库问答 >
问题:

从n个排序数组中获得k个最小值的时间复杂度?

岳曦
2023-03-14

我有n个数组。这些数组中的每一个都可以是无限长的。(长度可以可变)。所有这n个数组都被排序了。

2 4 6 7 9 

23 45 67 78 99

1 2 6 9 1000 4567 6567 67876

45 56 67 78 89 102 103 104

91 991 9991 99991 

共有1个答案

田仲卿
2023-03-14

我想是O(n+k.log(n))。

首先,构建每个数组中最小元素的堆(也存储数组的索引)。构建大小为n的堆是O(n)。然后,重复k次:从堆中取出一个元素(它是O(log n)),并从您取出的元素所在的数组中插入下一个最小的元素(也是O(log n))。总的来说,这是O(n+k.log(n))。

 类似资料:
  • 如果您有长度的排序数组,请查找其中最小的元素。这里有一些潜在的解决方案,有些涉及最小堆或二进制搜索,但我想知道使用QuickSelect的时间复杂度是多少。如果我们简单地将每个数组连接在一起,并在组合数组上使用quickselect。 Quickselect在一般情况下以线性时间运行,但是数组的组合确实会扩展搜索空间,但它比使用合并策略更有效,因为如果选择了好的枢轴,Quickselect必然允许

  • 在研究合并k个排序的连续数组/向量的问题以及它在实现上与合并k个排序的链表有何不同时,我发现了两个相对简单的用于合并k个连续数组的朴素解决方案和一个基于成对合并的很好的优化方法,该方法模拟了mergeSort()的工作原理。我实现的两个朴素解决方案似乎具有相同的复杂性,但在我进行的一个大型随机测试中,似乎一个比另一个效率更低。 我天真的合并方法如下所示。我们创建一个输出向量 我的第二个天真解决方案

  • 问题: 我必须分析时间复杂度来对几乎已排序的整数值列表进行排序(使用快速排序)。 我做了什么? 我读过SO Q1、SO Q2、SO Q3和这一本。 但是,我没有发现任何明确提到使用快速排序对k排序数组进行排序的时间复杂度的内容。 由于快速排序算法的时间复杂度取决于选择数据透视的策略,并且由于几乎排序了数据,因此有可能面临最坏情况,为了避免最坏情况,我使用了三个值(第一、中间、最后)的中位数作为这里

  • 这可能是微软的面试问题。 从排序的数组中找出第k个最小的元素(忽略重复项) [编辑]:数组可能包含重复项(未指定)。 想了很多次,但仍然质疑自己:还有更好的解决方案吗? 取最大堆 时间复杂度:O(NlogK) 空间复杂度:O(K) 这些元素可能是重复的。所以,通过与以前的元素进行比较来检查是否有唯一的元素 还可以使用改进版的快速排序分区算法。但它可能会导致最坏的情况,因为数组已经排序<这里出现了两

  • 通过上述解决方案,我们可以解决这个问题,但它不是O(N)时间复杂度。因此,我正在寻找一个用Java解决这个问题的优化方案。

  • 本文向大家介绍从一个无序的整数数组中,找出最小和最大数之间缺失的数字,要求最小的时间复杂度相关面试题,主要包含被问及从一个无序的整数数组中,找出最小和最大数之间缺失的数字,要求最小的时间复杂度时的应答技巧和注意事项,需要的朋友参考一下