数据结构
数据间的关系
逻辑结构
是指数据元素之间的相互关系,是我们想象出来的,并没有实质性的将其存储在计算机中
-
线性结构:线性结构中的数据元素之间是一对一的关系
-
树形结构:树形结构中的数据元素之间存在一种一对多的层次关系
-
图形结构:图形结构的数据元素是多对多的关系
物理结构
是指数据的逻辑结构在计算机中的具体存储形式
- 顺序存储结构:开辟一组连续的空间存储数据通常用数组来实现,数组中空间本身是连续的,保证了数据之间的关系
- 链式存储结构:开辟一组随机的空间存储数据通常用节点来实现,节点不仅要存储数据还要存储下一个节点的位置以保证数据之间的关系
算法概述
什么是算法:
是解决特定问题的求解步骤的描述,分析问题,求解问题这些步骤就是算法
(1.自然语言描述,2.流程图描述 3.伪代码描述 4.代码描述)
如何评价算法的好坏
1.事后统计法:
这种方法主要时通过设计好的程序与数据,利用计算机计时器对不同算法程序的运行时间惊醒比较,从而确定算法效率的高低。
弊端:
-
必须事先编写好程序,在进行运行,如程序处理的数据两比较大,则会花费大量的时间和精力
-
时间的比较主要依赖于计算机硬件功能与软件环境
-
在算法测试时,若数据量较小时,相差几乎为零,数据量大了,算法的优越性就表现出来了,但是会耗费时间。
-
对于编程语言而言只是实现算法的一种工具,对算法本身没有任何影响。
2.事前分析法
这种方法主要是计算机程序编制前,依据统计方法对算法进行估算。
一个高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:
- 算法采用的策略、方法(算法好换的根本)
- 编译产生的代码质量(取决于具体的编程语言)
- 问题的输入规模
- 机器执行指令的速度 (硬件的性能)
一个程序的运行时间依赖于算法的好坏和问题的输入规模,所谓问题输入规模是指数据入量的多少
算法的时间复杂度
简单来说就是 算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度。
1.常数阶O(1)
无循环、无递归、与问题输入规模N无关的、逐行执行的代码。
2.线性阶(O(n))
与问题输入规模有关的,主要是 一层循环代码,也有可能会有递归的情况
3.线性阶(O(n+m))
和线性阶O(n)一样,只是有两种数据的输入规模
4.平方阶O(n^2)
与问题输入规模有关的,主要是两层嵌套循环的代码
5.对数阶
与问题输入规模有关的,主要是一层循环迭代或递归的代码
常见阶的比较
对于时间复杂度的简单计算方法:忽略常数项,只保留幂高项,且忽略最高项的系数;
注意:当一个算法的时间复杂度超过O(n^2)时该算法不可取