@author: 小甲鱼
@location:
1.数据结构和算法的关系
还是拿把妹来说:数据结构就是:你和妹子之间的关系算法就是:你把妹的技巧相辅相成的好基友关系:关系确定技巧,技巧又能促进关系。
2.算法的初体验

相关算法实现
int i, sum = 0, n = 100;for(i=1; i <= n; i++){ sum = sum + i}printf("%d", sum)
对比一下,用高斯先生的算法,我们可以这么写:
int i, sum = 0, n = 100;sum = (1+n)*n/2;printf("%d", sum);
不难发现:
2个算法都可以解决问题,如果数据量达到千万或者上亿,差距可想而知,甚至人脑都可以比电脑计算还快。
那么什么是算法呢?
- -算法是解决特定问题求解步骤的描述,在计算机中国年表现为指令的有限序列,并且每条指令表示
一个
或多个
操作 - -懵逼呢? 用小甲鱼的话来讲,算法就是你泡妹的技巧和方式
3.算法的特性
算法5项基本特征:(说的都是一些废话,但是考试必备)
- 1.输入
- 2.输出
- 3.有穷性
- 4.确定性
- 5.可行性
1.输入
- -算法具有
0个
或多个
输入。 - -尽管对于绝大多数算法来说,输入参数都是必要的。但是有些时候,想打印“I love fishc.com”, 就不需要啥参数啦。
void print(){ print("I love fishc.com\n");}
2.输出
- -算法具有
1个
或多个
输出。 - -算法是一定要输出的,不需要它输出,那你要这个算法来干嘛? 输出的形式可以是打印形势输出,也可以是返回
一个值
或者多个值
等。
3.有穷性
- -指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。一个永远都不会结束的算法,我们还要他来干啥?
4.确定性
- -算法的每一个步骤都具有确定的含义,不悔出现二义性。
- -算法在一定条件下,只有一条执行路径,相同的输出只能有唯一的输出结果。
- -算法的每个步骤都应该被精确定义而无歧义。
5.可行性
- -算法的每一个都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。
4.算法设计的要求
解决同一个问题,算法并不是唯一的。对于很多应试教育的朋友来说,没有标准答案,其实很痛苦。例如:高斯同学的奇思妙想?尽管算法不是唯一,但我们要学习掌握一些好的算法,帮助我们解决问题!
1.正确性
- -算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性,能正确反映问题的需求,能够得到问题的正确答案。
- 大体分为以下4个层次:
- 1.算法程序没有语法错误。
- 2.算法程序对于合法输入能够产生满足要求的输出。
- 3.算法程序对于非法输入能够产生满足规格的说明。
- 4.算法程序对于故意刁难的测试输入都有满足要求的输出结果。
2.可读性
- -算法设计另一目的就是为了便于阅读、理解和交流。
- -我写代码的目的,一方面是为了让计算机执行,但还有一个重要的目的是为了便于他人阅读和自己日后阅读修改。
3.健壮性
- -当输入数据不合法时,算法也能做出相关的处理,而不是产生
异常
、奔溃
或莫名其妙的结果
。
4.
时间效率高
和存储量低
- -生活中,每个男人都希望找到一个贤惠的老婆,她们温柔又体贴,美丽又大方,还会做一手好菜。
- 好算法就犹如好老婆,应该具备
时间效率高
和存储量低
的特点。所以在设计算法的时候我们应该尽量思考着2方面的问题!