- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这道题是我计算机科学概论期中考试的准备题。
There exists an algorithm which can find the kth element in a list in O(n) time, and suppose that it is in place. Using this algorithm, write an in place sorting algorithm that runs in worst case time O(n*log(n)), and prove that it does. Given that this algorithm exists, why is mergesort still used?
我假设我必须编写某种替代形式的快速排序算法,它的最坏情况为 O(n^2),因为合并排序不是就地算法。让我感到困惑的是给定的算法来查找列表中的第 k 个元素。遍历数组元素的简单循环迭代不是 O(n) 算法吗?
如果提供的算法在执行时间上没有任何改变,那么它如何能对排序算法的运行时间产生任何影响?我看不出如何与快速排序、插入排序或选择排序一起使用,它可以将最坏的情况降低到 O(nlogn)。感谢任何输入!
最佳答案
检查 wiki ,即“按排序选择”部分:
Similarly, given a median-selection algorithm or general selection algorithm applied to find the median, one can use it as a pivot strategy in Quicksort, obtaining a sorting algorithm. If the selection algorithm is optimal, meaning O(n), then the resulting sorting algorithm is optimal, meaning O(n log n). The median is the best pivot for sorting, as it evenly divides the data, and thus guarantees optimal sorting, assuming the selection algorithm is optimal. A sorting analog to median of medians exists, using the pivot strategy (approximate median) in Quicksort, and similarly yields an optimal Quicksort.
为什么合并排序在某些情况下优于快速排序的简短回答是 it is stable (而快速排序不是)。
关于algorithm - O(nlogn) 就地排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33270868/
直觉上,我认为这三个表达式是等价的。 例如,如果一个算法在 O(nlogn) + O(n) 或 O(nlogn + n) 中运行(我很困惑),我可以假设这是一个O(nlogn) 算法? 什么是真相?
假设我有一个长度为 n 的数组,我使用时间为 nlogn 的排序算法对它进行了排序。得到这个排序后的数组后,我遍历它以找到任何具有线性时间的重复元素。我的理解是,由于操作是分开发生的,所以时间是 O(
我有 2 个 int 数组,我需要在 O(nlogn) 中打印所有相同的整数数组未排序,排序后可以是: X [ 1,2,3,4,5,6,7,8,9] Y [1,2,8,9] 所以只检查到第 4 个位置
我理解了合并排序的概念。但我很难分析合并排序的时间复杂度。我知道对于所有情况,即最坏情况、平均情况和最好情况,它都是 o(n log n) 。但我无法理解它是如何o(n log n) 的。在每次迭代中
给定两个已排序的整数数组 A1、A2,具有相同的长度 n 和一个整数 x,我需要编写一个算法在 O(nlog(n)) 中运行,确定是否存在两个元素 a1, a2(每个数组中的一个元素)使 a1+a2=
我正忙着准备考试,只是在做一些旧的试卷。下面的问题是我似乎唯一做不到的问题(我真的不知道从哪里开始)。任何帮助将不胜感激。 使用 Ω(nlogn) 比较排序边界、theta(n) 边界用于自下而上的堆
我正在阅读一本关于算法分析的书,发现了一个我不知道如何获得时间复杂度的算法,尽管书上说它是 O(nlogn)。 算法如下: sum1=0; for(k=1; k<=n; k*=2) for(j=1
我现在正在阅读 Cracking the Coding Interview 一书,并且正在做一个二叉树练习。根据 O(NlogN) 一书,有一段代码,但是,我不明白为什么会这样。我能理解算法是否为 O
假设我有一个空间要求为 nlogn 的函数,我想计算出该函数在给定可用空间下的最大输入大小。即我想在 nlogn=c 处找到 n。 我关注了an approach计算 n,在 R 中看起来像这样: s
我试图了解不同数据结构的时间复杂度,并从堆排序开始。根据我的阅读,我认为人们共同同意堆排序的时间复杂度为 O(nlogn);但是,我很难理解这是怎么回事。 大多数人似乎同意 heapify 方法采用
我得到了字符串哈希值数组,例如:“123-51s-12as-dasd1-das-41c-sadasdgt-31”。我需要找出是否有重复的内容。问题是,我需要在 O(nlogn) 时间内找到它们。 1)
我今天有一个实习面试,我无法弄清楚。 total = 0 product(int array[]) { if (array.length == 1) { return arra
该函数使用 int 列表并按递增顺序生成列表中的唯一元素。例如: singles([4,1,4,17,1]) => [1,4,17] 我只能在O(n^2)的运行时间内完成,想知道如何在不循环的
给定一个整数数组,返回一个新数组,其中每个元素新数组是其右侧较小元素的数量原始输入数组中的元素。例如,给定数组 [3, 4, 9, 6, 1],返回 [1, 1, 2, 1, 0]。 import b
我想找出数组中两个数字之间的最大差值,被减数必须在减法器之前。例如:在一个数组(3,1,5,4,2)中,最大差应该是3(5-2)。在数组(100, 3 ,200)中,最大差应该是97(100-3)。
我正在尝试解决所附图片中显示的问题。我得到了划分部分,您可以在其中递归地将线集分成两半,并且可以看到具有最小和最大斜率的线。 虽然我不知道如何进行合并部分,但我也不理解。 凭直觉,起初,我认为如果没有
在这本在线教科书中https://runestone.academy/runestone/static/pythonds/SortSearch/TheMergeSort.html他们为合并排序提供了以
我们最近在学习中接到任务,用主定理解决递归函数的复杂性。我知道这些问题在这里被问了很多,但我无法从这些问题中找出这个问题的答案。特别是一个问题很好地描述了问题:here 我的问题是递归函数 T(n)
问题陈述:目标是在 nlogn 时间内找到最长的递增子序列(不连续)。 算法:我理解这里解释的算法: http://www.geeksforgeeks.org/longest-monotonicall
我知道这里有很多与我的问题相关的问题,但我仍然感到困惑。我对计算几何有点陌生,任何建议都会有所帮助。 问题:一组n矩形,其边平行于x轴或y轴,并且每个矩形的长度和高度都相同;已知每个矩形的四个角点的坐
我是一名优秀的程序员,十分优秀!