时间复杂度
时间复杂度实际就是一个函数(这里指的是数学里的函数),该函数计算的是执行基本操作的次数。
为什么时间复杂度不是计算执行的实践而是次数?
答:因为我们无法计算执行的时间,比如不同的机器不同的配置,同一个算法的运行时间都是不一样的。所以我们只能在这里执行的次数来表示算法的性能。
void test(int n)
{
int count = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
count++;
}
}
for (int k = 0; k < 2 * n; k++)
{
count++;
}
int m = 10;
while (m--)
{
count++;
}
}
语句执行次数:f(n)=n^2+2*n+10
算法分析的分类
(1)最坏情况:任意输入规模的最大运行次数。(上界)
(2)平均情况:任意输入规模的期望运行次数。
(3)最好情况:任意输入规模的最小运行次数,通常最好情况不会出现。(下界)
在实际中,我们通常考量的是算法的最坏运行情况,理由:
- 一个算法的最坏情况的运行时间是在任意输入下的运行时间的上界
- 最坏情况出现的较为频繁
- 平均情况和最坏情况一样差