我正在尝试找出以下各项的正确名称(定义)。
假设algorithm 1
的时间复杂度如下:
T1(n) = 5 * n^2 + n + 123 = O(n^2)
如何命名具有这种复杂性的算法?说算法具有quadratic complexity type
或algorithm type is quadratic
或algorithm is quadratic complexity class
是否正确?
我使用单词type
,因为根据这个article,如果我们有类似这样的功能:
T(n) = n^2
我们说函数具有二次型。
我认为class
一词绝对是不正确的,因为复杂度类涉及NP
,NL
等问题。
现在,我们假设algorithm 2
的复杂程度如下:
T2(n) = 2 * log n + 15 = O(log n)
更新:
因此问题是:说算法1和2具有不同的types or classes or something else
复杂度是正确的吗?正确的词是什么?
更新2:
让我们想象以下内容。您正在与您的朋友Bob聊天,并说:Bob,第一个算法具有二次复杂度,第二个算法具有对数复杂度。所以鲍勃,正如您所看到的,这种算法具有不同的复杂性...?您应该使用什么词代替...? Types
或classes
还是其他?
问题在于英语不是我的母语,对我而言,当我们谈论复杂性时,几乎找不到正确的定义。因为我所能做的就是尝试将其翻译成我的语言,但是我的语言甚至没有这个定义。
答案 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。