对于我的编程和算法设计考试,我必须熟悉时间复杂度和Big-Oh表示法。我理解其中的大部分内容,但后来我遇到了这个问题,我的解决方案似乎相当简单;但我不明白哪些步骤是必要的。有人可以澄清所采取的步骤吗?
练习:
处理时间为T(n)= cn ^ 2的二次算法花费T(N)秒来处理N个数据项。假设N = 100且T(N)= 1 ms,处理n = 3000个数据项将花费多少时间?
给出解决方案:
常数因子c = T(N)/(N ^ 2),因此T(n)= T(N)*(n ^ 2)/(N ^ 2)= n ^ 2/10000并且 T(3000)= 900毫秒
答案 0 :(得分:3)
这是一个非常简单的数学问题:
如果T(n) = cn²
和T(100) = 1ms
则
T(100) = c * 100²
= c * 10,000
= 1ms
因此,解决c
会产生:
c = (1/10,000)ms
然后可以使用它来计算T(3000)
:
T(3000) = (1/10,000)ms * 3,000²
= (1/10,000)ms * 9,000,000
= (9,000,000 / 10,000)ms
= 900ms
答案 1 :(得分:1)
直截了当。您有N = 100
,T(N) = 1
。所以c = T(N)/N^2 = 1/10000
。
然后你做T(3000) = 1/10000 * (3000 ^ 2) = 900
。
答案 2 :(得分:1)
这与Big-Oh符号甚至计算机科学没有任何关系。你需要的只是基本代数。鉴于某些c的T(n)= cn ^ 2,而T(100)= 0.001,那么什么是T(3000)?
0.001 = T(100) = c (100*100) = 10000c
c = 10^-7
T(3000) = c n^2 = 10^-7 * 3000 * 3000 = 0.9