14天阅读挑战赛
努力是为了不平庸~
算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!
- 打开算法之门
- 妙不可言 —— 算法复杂性
- 算法是什么?
- 如何写出好的算法?
- 本章小结
1.打开算法之门
在生活中,算法无处不在。每天做饭,用什么食材、调料、烹饪方法和具体的操作步骤,做完之后,还要品尝一下咸淡,看是否合口味。平日逛超市,在money有限的情况下,考虑碰见什么可以买,什么不买,算算是否超额。所以,不要说你不懂算法,其实你每天都在用!
但对于计算机专业的算法,很多人都有感慨:难!难!难!还是难!就像莫高窟里的壁画,看到它,感受它,却无法走进。每一个初学者都需要一把打开算法之门的钥匙,就如陶渊明《桃花源记》中的“初极狭,才通人。复行数十步,豁然开朗。”
妙不可言——算法的复杂性
在这里我们出一道题来小试牛刀:
当你看到这个题目时,你会用什么方法呢?for?while?
先看算法1
//算法1
int Number1(int n)
{
int sum = 0;
for (int i = 0; i <= n; i++)
{
sum += pow(-1, i);//表示(-1)^i
}
return sum;
}
算法2
我们观察数列,可得存在一定的规律,每两个数和为0,即当n等于奇数时,数列和为-1;当n等于偶数时,数列和为0。
//算法2
//
int Number2(int n)
{
if (n % 2 == 0)
return 0;
else
return -1;
}
看到这里,你可能会恍然大悟,原来可以这样啊?这不就是数学家高斯使用的算法吗?虽然不大一样,但有异曲同工之妙!
代码求取1,2,3,4,…,100之和
int number()
{
ret = (1+100)*50;
return ret;
}
10岁的高斯用了很短的时间就算出了结果,而全国范围内同龄的孩子还要花费几倍的时间才能算出,甚至算不出来!算法的魅力显而易见。
算法是什么?
学了算法的妙处之后,可能会有同学有疑问了
高斯的算法我知道,但遇到类似的题还是…我用的笨办法也算算法吗?
答案是:是算法!
算法是对特定问题求解的步骤的一种描述。
算法只是对问题求解方法的一种描述,它不依赖于任何一种语言,既可以用自然语言、程序设计语言(C/C++/Java/Python)描述,也可以用流程图、框图来表示。
如何写出好的算法
算法具有以下特性。
- 有穷性:算法是由若干条指令组成的有穷数列,总是在执行若干次后结束,不可能永不停止。
- 确定性:每条语句都有确定的含义,无歧义。
- 可行性:算法在当前环境条件下可以通过有限次运算来实现。
- 输入/输出:有零个或多个输入以及一个或多个输出。
算法2的确算的很快,但怎么知道我写的算法好不好呢?
“好”的算法的标准如下:
- 正确性:正确性是指算法能够满足具体的需求,程序运行正常,无语法错误,能够通过典型的软件测试,达到预期。
- 易读性:算法遵循标识符命名规则,简洁易懂,注释语句恰当适量,方便自己和他人阅读,便于后期调试和修改。
- 健壮性:算法对非法数据及操作有较好的反应和处理。例如,在学生信息管理系统中登记学生年龄时,若将21岁误输入为210岁,则系统应该有错误提示。
- 高效性:高效性是指算法运行效率高,即算法运行时间所耗时间短。
- 低存储性:低存储性是指算法所需的存储空间小。对于像手机、平板电脑这样的嵌入式设备,算法如果占用空间过大,则无法运行。算法占用的空间大小被称为空间复杂度。
除了1~3基础标准之外,好算法的评判标准是高效率、低存储。
总结
本节我们用一个高斯的知识点引入算法的概念,初步了解了什么是算法,以及算法的四大特性是什么:
- 有穷性、确定性、可行性、输入/输出。
还有如何写出好的算法以及好的算法的评判标准是怎样的:
- 正确性、易读性、健壮性、高效性、低存储性。
- 以及好算法的评判标准是高效率、低存储。
数据结构是程序的骨架,算法是程序的灵魂。