算法是什么?
百度百科,知乎,C语言中文网 … 到处都有对算法的定义。总结来看,算法就是告诉你如何去解决一个问题,在计算机中表现为指令的有限序列。比如,上班族每天怎么上班?开车,坐地铁,挤公交… 都能解决,而每一种方式都是解决上班问题的算法。
算法和程序一样吗?
程序和算法是完全不同的概念。算法是解决某个问题的想法、思路;而程序是在根据算法编写出来的真正可以运行的代码。例如,要依次输出一维数组中的数据元素的值,首先想到的是使用循环结构,在这个算法的基础上,我们才开始编写程序。
算法有什么特点?
1.有穷性:算法在有限的步骤之后会自动结束而不会无限循环,别人走了,还没算完。
2.确定性:相同的输入必须得到相同的输出。
3.可行性:算法的每一步都是可行的。
4.输入:算法应该有零个或多个输入。
5.输出:算法应该有一个或多个输出,没有输出那还有什么意义。
算法设计有什么要求?
1.正确性:算法应该能够正确的解决所面临的问题。
2.可读性:算法要方便阅读,理解和交流。简言之,它是给人看的,别让人看不懂。
3.健壮性:面对不合理的输入,算法不应该产生莫名其妙的结果。
4.高性价比:利用最少的时间和资源得到满足要求的结果。
算法效率的评估
1.时间复杂度:算法在计算机内执行所需运行时间的度量。
2.空间复杂度:算法在计算机内执行所需存储空间的度量。
生活中的算法
- 计算 1+2+3+4 … +100000 =?怎么办?下面有两个算法。
- 哪种算法好?两者都试试,先看算法一,直接用 C语言 解决
#include<stdio.h>
int main() {
//算法一:先算1+2=3,然后算3+3=6,然后继续...
int sum_1=0;
for (int i = 1; i <= 100000; i++) {
sum_1 = sum_1 + i;
printf("%d\n", sum_1);
}
}
-
经过 8.67s 的等待,结果出来了。
-
再看算法二,还用 C语言 解决
#include<stdio.h>
int main() {
//算法二:等差数列求和公式:Sn=n (a1+an)/2
int sum_2 = 100000 * (1 + 100000) / 2;
printf("%d\n",sum_2);
}
- 经过 0.1s 的等待,结果出来了。
- 结果都一样,但是在效率上明显算法二优于算法一。 其实生活中还有很多涉及到算法的例子。比如,你在淘宝上搜索你想要的东西,它是如何在上百亿件产品中又快又准地找到,这就离不开优秀的算法。
练习题
-
计算机算法指的是(C)
A.计算方法 B.排序方法
C.解决问题的有限运算序列 D.调度方法 -
一个算法应该是(B)
A.程序 B.问题求解步骤的描述
C.要求满足5个基本特征 D.A和C -
设计一个 “好” 的算法应考虑(A B C D)
A.正确性 B.可读性
C.健壮性 D.效率于低存储量需求