Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何计算算法的运行时间?_C++_Runtime - Fatal编程技术网

C++ 如何计算算法的运行时间?

C++ 如何计算算法的运行时间?,c++,runtime,C++,Runtime,当我试图找出如何计算运行时间时,我看到了这段代码。我知道两个for循环的计算结果是n^2,但交换部分让我感到很困惑。我想了解交换部分是否对最坏情况场景的运行时有任何影响,这是否仅在^2上 确定最坏情况,在考虑最坏情况的情况下进行数据设置,然后使用time命令测量实时时间,time命令根据运行时间、CPU时间和用户时间显示程序工作的时间 for(int i = 0; i < N-1; ++i) { for(int j = 0; j < N-1; ++j) { i

当我试图找出如何计算运行时间时,我看到了这段代码。我知道两个for循环的计算结果是n^2,但交换部分让我感到很困惑。我想了解交换部分是否对最坏情况场景的运行时有任何影响,这是否仅在^2上


确定最坏情况,在考虑最坏情况的情况下进行数据设置,然后使用time命令测量实时时间,time命令根据运行时间、CPU时间和用户时间显示程序工作的时间

for(int i = 0; i < N-1; ++i) {
    for(int j = 0; j < N-1; ++j) {
        if a[j] > a[j + 1] {
            swap(a[j], a[j + 1]);
        }
    }
}
比较次数在n-1*n-1时是恒定的。交换的数量取决于输入数组。最坏的情况是反向排序数组:{n,n-1,n-2,…,2,1}这会产生n*n-1/2交换

对于bubblesort,您可以在内部循环未产生交换时立即停止:

for(int i = 0; i < N-1; ++i) {
    bool hasSwap = false;
    for(int j = 0; j < N-1; ++j) {
        if a[j] > a[j + 1] {
            swap(a[j], a[j + 1]);
            hasSwap = true;
        }
    }
    if(!hasSwap)
        break;
}

现在,比较的数量也取决于输入数组。

最坏情况下的计算复杂度为^2。如您所述,就总体复杂度而言,可以忽略比较和交换,因为主导项为^2,代码可以重写如下:

for(i = -1; i < N; i++)
  for(j = 0; j < N-1; j++)
    function...
您应该看看大O简化的规则:

如果外汇是几个项目的总和,则保留增长率最大的项目,而忽略所有其他项目。 如果fx是多个因素的乘积,则该乘积中不依赖于x的任何常数项都将被忽略。
取决于您计算的内容:比较或交换-它们的不同之处在于,比较正好是n^2个,但交换取决于您的输入数组—想想已经排序的数组->0交换;也许你的任务是为Swapt的最佳/平均/最坏情况找到一个示例数组这是他给我们的所有代码,没有输入数组。虽然他给了我们一些选择。不,这不是家庭作业,哈哈,这是我们在幻灯片上看到的,我被它难住了,想弄清楚它,以防他在考试中给出它。我以为这是选择2 1A*N+B+C,2A*N^2+B*N+C,3A*N+B*log N+C,4A*N*log N+B*log N+C不能代表你的老师,但正如我所说:交换的数量取决于输入数组。你不需要得到所说的数组,想象一下:最好的和最坏的情况各有一个,而平均情况下则有很多-这些情况下的互换数量不同,但比较的数量不同!好吧,我明白你的意思了,所以最坏的情况是。我想巫婆会出现一次,我想哈哈。我想一个有两个道具的阵列是最坏的情况,对吗?因此,对于包含n个对象的数组,switc oncethere通常是最坏的情况。尝试从2到3,再到4,直到看到模式:
for(i = -1; i < N; i++)
  for(j = 0; j < N-1; j++)
    function...