数据结构笔记1
算法
算法的定义
算法是对特定的问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令呢都可仪表一个或几个操作呢。
算法的5个重要特性
- 有穷性,不能无边无际永远也解答不完哦
- 确定性,你得有确定的答案哦
- 可行性,如果不可行,那何必浪费时间计算呢
- 输入,没有输入怎么开始呢
- 输出,没有输出计算又有和意义呢,对吧。
算法设计要求什么
- 正确性,设计或者算法的选择否和某种需求才搞,否则没有衡量的标准呀。
- 可读性,你的代码别人看不懂,除非你去搞黑客- -|
- 健壮性,输入不合法就给我们脸色的或者罢工的算法你会喜欢?
- 效率与存储量的需求,就好比两边之和大于第三边,有近路我们就不要绕远了,其实这块最是体现你对数据结构以及算法能力高低的地方。
刚才我们说了最能体现算法高低的地方就是效率和存储量也即是占用计算机存储空间的因素。所以我们引出了算法效率的度量。度量有两种方法:
- 事后统计,有缺陷。
事前分析估算,这个地方也是最考验人技术的地方。
- 消耗时间的因素
- 程序所选选用算法的策略,比如各种排序
- 问题的规模,再比如排序,数据量很大的时候不同算法效率不一样的哦。
- 程序语言。最接近底层的有语言很快滴。
- 程序的代码质量,这个有而是体现个人能力高低的重点
- 机器执行的速度,这个跟硬件相关了。在高级的编程中这个也是很重要的考虑因素,尤其是现在深度学习的发展,GPU上编程越来越普遍,相关的程序执行策略也会变化。
时间复杂度
这个就是我们通常所得“欧”几的问题O(?),通常的做法是从算法中选取一种过对于所研究的问题来说是基本运算的原操作,我们呢就用这个基本操作的重复执行的次数作为算法的时间量度。我们用数学角度看一下:算法中基本操作重复执行次数是问题规模n的某个好函数f(n),算法时间量度为:T(n) = O(f(n)),表示随着问题的规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称作苏案发的渐进时间复杂度,简称时间复杂度。算法的时间复杂度仅仅考虑的是对于问题的规模n的增长率。所以很难精确计算基本操作执行的次数,所以只需要求出关于n的增长率或者阶即可。
算法的存储空间计算
- 输入数据所占空间
- 程序本身所占空间
- 辅助变量所占空间
S(n) =O (f(n))
其中n为问题的规模
- 消耗时间的因素