Algorithm 多变量的时间复杂度&;功能

Algorithm 多变量的时间复杂度&;功能,algorithm,time-complexity,big-o,computation-theory,Algorithm,Time Complexity,Big O,Computation Theory,我已经编写了一个算法来读取文本文件,并将其中的内容提取到两个数组中,然后进行排序。程序正在运行,但我对计算时间复杂度感到困惑。只是需要有人澄清一下 假设我有两个函数,一个main和一个helper 辅助函数 insertion(int array[], int length) ... 主要功能 int main() while(...) // this while loop read the input text file and push integer into vecto

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

假设我有两个函数,一个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推到阵列A,将线2推到阵列B
  • “for loop”用于验证带有外部“if”的数组B数组整数
  • 对数组A和数组B执行插入排序
  • 据我所知,在计算大O或操作数之前,我必须让数据数为“n”。现在,这里显然有两个数据点——一个用于数组A,一个用于数组B

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

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

    我尽量用我的程序的简化形式来解释我在理解这个时间复杂性方面的困难(实际的程序有很多循环…)。希望有人能理解我的意思,并提供一些澄清,否则我会进一步修改,看看我是否可以把它说得更清楚。谢谢


    编辑:在为我的算法找到大O之前,我需要计算运算次数。

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

    然后你读n两次,n+n=2,但在大O中,你可以去掉常数,这时你有O(n)时间

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

    但是,插入排序最糟糕的情况是O(n^2)。做两次,n^2+n^2=2*n^2,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