一个例子
计算1到100的前n项和
第一种算法
int i,sum=0,n=100;
for(i=1;i<=n;i++){
{
sum=sum+i;
}
printf("%d",sum);
}
第二种算法
((1+100)+(2+99)+…+(100+1))/2=(101*100)/2
int sum=0,n=100;
sum=(1+n)*n/2;
printf(%d",sum);
第一种算法要循环100次,当这个n项和很大的时候,效率远远低于第二种.这就是算法的好处。
算法
算法的定义
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作
算法的特性
输入、输出、有穷性、确定性和可行性
输入输出: 算法具有0个或多个输入,算法至少有一个或多个输出。输出的形式可以是打印输出,也可以是返回一个或多个值等。
有穷性: 算法在执行有限的步骤后,自动结束而不会出现无限循环,并且每一个步骤都在可接受的时间内完成。
确定性: 算法的每一条步骤都具有确定的含义,不会出现二义性。
可行性: 算法的每一步都必须是可执行的,也就是说,每一步都可以通过执行有限次数完成
算法设计的要求
正确性:
算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到正确的答案。
算法的正确通常在语法上有很大差别,大体分为以下四个层次:
- 算法程序没有语法错误
- 算法程序对于合法的输入数据能够长盛满足要求的输出结果
- 算法程序对于非法的输入数据能够得到满足规格说明的结果
- 算法程序对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果
通常我们把层次3作为一个算法是否正确的标准。
可读性:
算法设计的另一目的是为了便于阅读、理解和交流
个人认为可读性应该是算法具有很好的逻辑性,层层递进或者实现方式显而易见。比如变量名称的命名、括号等等。必要的时候可以加上注释便于自己阅读检查和他人阅读。
健壮性:
一个好的算法应该考虑到输入数据不合法的情况