大O与功能类型定义

时间:2018-10-21 17:38:53

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

我正在尝试找出以下各项的正确名称(定义)。

假设algorithm 1的时间复杂度如下:

T1(n) = 5 * n^2 + n + 123 = O(n^2)

如何命名具有这种复杂性的算法?说算法具有quadratic complexity typealgorithm type is quadraticalgorithm is quadratic complexity class是否正确?

我使用单词type,因为根据这个article,如果我们有类似这样的功能:

T(n) = n^2

我们说函数具有二次型。

我认为class一词绝对是不正确的,因为复杂度类涉及NPNL等问题。

现在,我们假设algorithm 2的复杂程度如下:

T2(n) = 2 * log n + 15 = O(log n)

更新: 因此问题是:说算法1和2具有不同的types or classes or something else复杂度是正确的吗?正确的词是什么?

更新2: 让我们想象以下内容。您正在与您的朋友Bob聊天,并说:Bob,第一个算法具有二次复杂度,第二个算法具有对数复杂度。所以鲍勃,正如您所看到的,这种算法具有不同的复杂性...?您应该使用什么词代替...? Typesclasses还是其他?

问题在于英语不是我的母语,对我而言,当我们谈论复杂性时,几乎找不到正确的定义。因为我所能做的就是尝试将其翻译成我的语言,但是我的语言甚至没有这个定义。

1 个答案:

答案 0 :(得分:0)

O(n^2)是二次时间复杂度。您可以参考this Wiki page来详细了解各种时间复杂度。

简单来说,您可以将具有二次时间复杂度的算法称为:该算法以二次时间运行。

更多信息:

一种算法将具有空间复杂度和时间复杂度。

时间复杂度提供了有关算法根据其输入运行将花费多长时间的信息。

具有二次时间复杂度O(n^2)的算法的运行时间将与n的平方成比例。 (例如气泡排序)

具有对数时间复杂度O(log n)的算法的运行时间将与n的对数成比例。 (例如,二进制搜索)

这两个类都有确定性的时间,因此它们属于复杂性类P

运行时间说明:

O(n)是比O(n^2)更好的算法。对于特定的O(n^2)O(n)的性能可能会优于n的算法。但是随着n的增长,O(n^2)将比O(n)算法慢。

示例:

T1(n) = 5 * n = O(n)
T2(n) = 9999*n = O(n)
T3(n) = n^2 = O(n^2)

案例1:n = 10

T1 takes 5*10 = 50 sec
T2 takes 9999*10 = 99990 sec
T3 takes 10 * 10 = 100 sec

T3的性能优于T2,即使它是O(n^2)

案例2:n = 100

T1 takes 5*100 = 500 sec
T2 takes 9999*100 = 999900 sec
T3 takes 100 * 100 = 10000 sec

T3的性能优于T2,即使它是O(n^2)

案例3:n = 10000

T1 takes 5*10000 = 50000 sec
T2 takes 9999*10000 = 99990000 sec
T3 takes 10000 * 10000 = 100000000 sec

现在,T2的性能优于T3。对于所有n> 10000,T2的性能将优于T3。