一. 两种算法的比较
求1+2+3+4+...+100的结果
算法一:
#include<stdio.h>
int main()
{
int i;
int sum = 0;
for(i = 1; i <= 100; i++)
{
sum = sum + i;
}
printf("%d\n", sum);
return 0;
}
算法二:
sum = 1 + 2 + 3 + ... + 100
sum = 100 + 99 + 98 + ... + 1
2sum = 101 + 101 + 101 + ... + 101 (共100个101)
所以 sum = 2sum / 2 = 5050
#include<stdio.h>
int main()
{
int i;
int n =100;
int sum = 0;
sum = (1 + n) * n / 2;
printf("%d\n", sum);
return 0;
}
五个基本特性:输入输出,有穷性,确定性,可行性。
三. 算法的设计要求
正确性,可读性,健壮性,时间效率高和存储量地
四 . 算法效率的度量方法
1). 事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。
2) 事前分析估算方法:在计算机程序变编制前,依据统计方法对算法进行估算。
一个程序运行的时间,依赖于算法的好坏和问题的输入规模
输入规模和操作数量的关系:f(n) = 1或n或n^2等。
五. 函数的渐进增长 :给定2个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)增长渐进快于g(n)。
判断 一个算法的效率时,函数中的常数项和其他次要项常常可以忽略,而更应该关注主项的阶数。
六. 算法时间复杂度
O(1)叫常数阶, O(n)叫线性阶, O(n^2)叫平方阶,O(logn)叫对数阶
书上对时间复杂度的解释非常好,也非常好理解,看书。
常用的时间复杂度所消耗的时间从小到大依次是; O(1) < O(logn) < O(n) < O(nlogn) < O(n^2)
七. 最坏情况与平均情况
最坏情况运行时间是一种保证,那就是运行时间将不会再坏了,在应用中,这是一种最重要的需求,通常,除非特别指定,我们说的运行时间都是最坏情况下的运行时间。