- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在使用合并排序对数组进行排序时计算倒置。为此,我在条件语句中添加了一个变量,以便在遇到反转时该变量会递增。伪代码:
mergesort(M, l, r) begin
if (l < r) then
int m <- (l + r - 1)/2; //for rounding down I use explicitly int
inv <- 0; //set number of inversions
mergesort(M, l, m)
mergesort(M, m+1, r)
i <- l;
j <- m + 1;
k <- l;
while(i <= m and j <= r) do
if (M[i] <= M[j]) then
M'[k] <- M[i];
i <- i + 1;
else
M'[k] <- M[j];
j <- j + 1;
inv <- inv + 1; //Counting inversions
k <- k + 1;
for (h = i, .. , m) do
M[k + (h - 1)] <- M[h];
for (h = l, .. , k -1) do
M[h] <- M'[h];
end.
但是我不确定复杂度是否保持不变:O(n log n)。
仅增加一个变量是否会导致更差的 WC 复杂度?据我所知,它仅取决于最大的加数(n 因子)。并且添加一个常数或最坏情况下 (n - 1) + (n - 2) = 2n - 3 增量会大大改变复杂性吗?如果是,您有什么建议?
最佳答案
如果你看这两行
j <- j + 1;
inv <- inv + 1; //Counting inversions
它们都是T(1)
算术运算,它们处于相同的深度,因此 T(1)+T(1) = T(1)
. inv <- inv + 1;
的额外行无法改变复杂性,因为执行时间保持不变。
关于algorithm - 修改后的 MergeSort 的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33650687/
我刚刚实现了这两种算法,当我绘制结果时我很惊讶!递归实现显然比迭代实现更快。之后,我将插入排序与两者相结合,结果是一样的。 在讲座中,我们经常看到递归比阶乘计算中的迭代慢,但在这里似乎并非如此。我很确
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 8年前关闭
尝试在 Java 中实现归并排序。我在脑海中仔细检查了我的代码,我觉得它应该可以工作,但显然我做错了什么。这是代码 public static void mergeSort(int[] inp
我有一个程序 Mergesort 与无序列表一起工作。我得到的问题是段错误(核心转储)。 实际上,我经常收到此错误,但我不知道如何解决。此外,它不会显示任何错误或警告消息来查找它。在这个源代码和其他一
我正在尝试使用多线程实现合并排序的版本。首先,我知道这里有十亿条线索(给予或接受......),而我读了一些但无济于事!我试图证明并行使用线程可以加快进程的速度。然而,我遇到的问题是我的代码没有显示和
package merge; public class Merger { int[] a = {1, 10, 5, 9}; // int[] a = {1, 10, 5, 9, 8, 6, 3,
我正在上算法课,并试图在 C++ 中实现合并排序。我试图存储左右子数组,但意识到我无法这样做,因为我无法在运行时初始化大小。有没有办法解决这个问题,或者我是否错误地进行了排序过程?我在下面列出了我所拥
遇到合并排序问题。对数组进行排序后,我希望它只打印完全排序的数组,而不是每次传递。我的代码如下。我在数组似乎已排序后运行 printArray(intArray) 。也许我把它放在错误的地方?您可以在
练习合并排序时遇到问题。我在线程“main”java.lang.ArrayIndexOutOfBoundsException 中收到异常:1mergeSort 部分工作得很好,但重新组装数组对我来说很
在多次递归调用后,low 变为等于 high,递归中断。之后会发生什么?谁能解释一下。合并过程对我来说很清楚:当调用 mergesort(0,5) 时,它会再次调用自身:mergesort(0,2)
这是基于 Cormen 书中给出的算法。我做错了什么? #include #include void mergesort(int a[],int,int); void merge(int a[],
我正在尝试在合并函数中使用 for 循环为 mergesort 编写 C 代码。不幸的是它不工作。在 main 函数中,我按降序在 10 个 int 上创建了一个 array,然后调用 mergeso
代码目录结构, ./Computing$ ls -LR .: list file.txt mergeSort.c program.exe type.h ./list: arrayImpl.c l
我想制作一个 MergeSort 算法,我想从外部文件(如 txt)获取我的数据,当我导入我的文件时,我得到一些奇怪的结果 [9. 9. 9. 9.] 我的输入数据是 [12, 44, 11, 9]
我一直在尝试实现我的“自己的”MergeSort,它似乎适用于较小的值,但我正在以随机顺序在 1-100,000 的数组上尝试它,并在打印时混合了一些奇怪的数字退出。我已经跟踪了 10 次,但都没有运
我一直在尝试编写一个基本的自上而下的归并排序,但代码执行完毕后数组并未完全排序。我试过调试它,但所有的递归使得很难查明。我也曾尝试将我的代码与其他合并排序示例进行比较,但我没有找到任何差异 p
我在 python 中使用递归编写了一个 MergeSort 程序,但我不断收到有关第 27 行、第 23 行、第 18 行和递归错误的错误: “RecursionError:比较时超出了最大递归深度
我正在使用“算法简介”中描述的算法实现 Mergesort。但是,在每次执行时,我都会得到一个垃圾值作为排序数组的第一个元素。这是它的代码: #include #include #include
以下合并排序来自数据结构和算法分析 (Weiss)。我想知道的是合并步骤中的最后一个 for 循环。我知道我们必须将 tmpArray 复制回 array,但我不明白为什么我们从 rightend 开
我的教授分配了一个问题,我们必须使用堆栈(或队列)来进行非递归 MergeSort。目前代码如下: private static void sort(Comparable[] a, int[] in
我是一名优秀的程序员,十分优秀!