Algorithm 证明10次交换存在O(n)算法
一个著名的问题是找到排序数组的最小交换量。我的问题是我们有一个大小为n的数组,我们知道我们可以用10次交换对它进行排序(我们不知道移动次数,只知道移动次数)。我想证明存在一个O(n)算法(对于时间)对这个数组进行排序 首先,为了证明这些陈述,我应该提供一些代码吗?我不知道如何证明这一点 第二,这与排序数组的最小交换量有关吗Algorithm 证明10次交换存在O(n)算法,algorithm,sorting,swap,Algorithm,Sorting,Swap,一个著名的问题是找到排序数组的最小交换量。我的问题是我们有一个大小为n的数组,我们知道我们可以用10次交换对它进行排序(我们不知道移动次数,只知道移动次数)。我想证明存在一个O(n)算法(对于时间)对这个数组进行排序 首先,为了证明这些陈述,我应该提供一些代码吗?我不知道如何证明这一点 第二,这与排序数组的最小交换量有关吗 感谢您的帮助如果我们知道10次交换就足以对一个数组进行排序,那么该数组几乎已排序,最多有10*2=20个元素无序排列。所以,如果我们找到某种排序算法,它在几乎排序的数组上有O
感谢您的帮助如果我们知道10次交换就足以对一个数组进行排序,那么该数组几乎已排序,最多有10*2=20个元素无序排列。所以,如果我们找到某种排序算法,它在几乎排序的数组上有O(n),那么它就足以证明您的语句了 例如,我们可以使用两步解决方案:
n>>10
,那么对于您的情况,它会得到O(n)。这个证明对于任何恒定数量的交换都是正确的,如果它不依赖于您的解决方案
自适应排序算法的一个经典示例是直接插入排序。在这个排序算法中,我们从左到右扫描输入,反复查找当前项的位置,并将其插入到先前排序的项的数组中
我们知道:
该算法的性能可以用输入中的倒数来描述,然后T(n)
将大致等于I(A)+(n-1)
,其中I(A)
是倒数
所以,在你的例子中,反演的数量是恒定的,这个算法的复杂度将是θ(n)O(n),在什么情况下?您的前提已经说明存在一种算法,可以将数组按10次交换进行排序。我猜,算法在比较次数上必须是O(n)?有内存限制吗?@trentcl O(n)代表时间。我忘了提它。没有内存约束提示:Timsort可以做到这一点。您将如何定义“无序”元素,以及您建议使用什么O(n)算法来检测此类元素?@MarkDickinson“无序”元素可以作为数组元素序列的一部分找到,而数组元素序列不需要按需排序。当我们遇到比上一个元素少的新元素时,我们知道这个元素或上一个元素是无序的。可能还有其他人在附近。只要不超过20个这样的元素,就不难前后检查以找到这种错误序列的边界。即使我们使用的元素比所需的多(例如,每次出现的所有20个相邻元素),复杂性也不会改变。