【问题标题】:Time complexity on multiple variables & functions多个变量和函数的时间复杂度
【发布时间】:2020-11-06 08:49:08
【问题描述】:

我编写了一个算法来读取一个文本文件并将里面的内容提取到两个数组中,然后排序。该程序正在运行,但我对计算时间复杂度感到困惑。只是需要有人澄清一下。

假设我有两个函数,一个 main 和一个 helper。

辅助函数

insertion(int array[], int length)
    ...

主要功能

int main()
    while(...) // this while loop read the input text file and push integer into vector
        ...
        while(...)
            ...

    if(...)
        for(...) // this for loop validates array B only
    
    insertion(arrayA, lengthA)
    insertion(arrayB, lengthB)
  1. 在文本文件中读取程序
  2. 将第 1 行推入阵列 A,将第 2 行推入阵列 B
  3. 'for loop' 使用外部 'if' 验证数组 B 数组整数
  4. 对数组 A 和数组 B 执行插入排序

据我所知,在计算 Big-O 或操作数之前,我必须让数据数为“n”。现在,显然这里有两个数据点 - 一个用于数组 A,一个用于数组 B。

所以,数组 A = n,数组 B = m。

但是,我不确定辅助函数中的数据数量应该使用“n”还是“m”。同样对于嵌套的while循环,如果数据的数量也应该使用'n'或'm'。

我尽力解释了我在理解这个时间复杂度方面的困难以及我的程序的简化形式(实际的程序有大量的循环......)。希望有人能理解我的意思并提供一些澄清,否则我会进一步修改,看看我是否可以更清楚。谢谢!

编辑:在为我的算法找到 Big-O 之前,我需要计算操作数。

【问题讨论】:

    标签: algorithm time-complexity big-o computation-theory


    【解决方案1】:

    我知道在您阅读文件后,将有数组 A 和 B。 如果 m 和 n 接近,则可以说 m = n。否则,你选择最大的一个,说它是n。

    然后你读n两次,n + n = 2,但是在大O中,你可以取出常数,那么此时你有O(n)时间。

    如果验证只通过你的数组 B 一次,那么你说的复杂度时间是 3n,但 3 仍然是一个常数,那么时间复杂度仍然是 O(n)。

    但是,插入排序可以做的最坏情况是 O(n^2)。你做两次 n^2 + n^ 2 = 2*n^2,两个是一个常数,所以插入排序和平的时间需要 O(n^2)。

    最后,你有 O(n) + O(n^2)。由于它是大符号,因此成本最高的部分是真正重要的部分:O(n^2) 是您的复杂度。

    例如,如果您使用插入排序 n 次,那么您将有 O(n(n^2)) 时间,也就是 O(n^3)。

    计算机每秒执行 10^9 次操作。这么小的 n 算不了什么。

    如果您不确定 n 和 m 是否接近,假设 0

    如果 0

    【讨论】:

    • 谢谢。在找到 Big-O 之前,我需要找到我的算法所执行的操作数(我的错,忘记在问题中提及)。 n 有 6 个元素,而 m 在这种情况下有 2 个元素;不太确定你所说的 m 和 n 是什么意思。这就是为什么我需要将两个输入分开,这也让我对我的辅助函数应该是什么感到困惑(无论是 n 还是 m)
    • m and n is close if it's n and m is 2 and 6. 差异按 10^3 或以上(向上)的顺序发生。
    • 现在我完成了。哈哈
    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 2012-06-11
    • 2020-12-03
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2016-12-20
    相关资源
    最近更新 更多