数据结构与算法分析之概念扫盲

推荐电子科技大学 的 罗吴蔓老师讲的数据结构 在土豆上可以下载
/**
 * @author Administrator
 * DS--Data Structure--数据结构
 * 数据之间是有联系的(key-value),数据之间是有结构的(tree、binary-tree)、
 * 数据之间是可以进行运算的(search、delete、update、insert)
 * 基本概念6个:
 * 数据--Data--能被计算机处理的符号的集合
 * 数据元素--Data Element--数据中一个一个的个体
 * 数据项--Data Item--将数据元素进行进一步划分的单位
 * 数据对象--Data Object--具有相同特性的数据元素的集合
 * 数据结构--Data Structure--带有结构的数据元素的集合
 * 			DS=(D,R)
 * 		数据结构分类--逻辑结构(算法的设计依赖逻辑结构)、物理结构(算法的实现依赖物理结构)
 * 数据类型--Data Type--一个值的集合和定义在一个值上操作的总称
 * 常见的9种数据结构:
 * 线性表--n个数据元素的有限序列  
 * 		 linear_list=(D,R)
 * 		 D中,L=(a1,a2,a3,...,a i-1,ai,a i+1,...,an);
 * 		 R中,a i-1为ai的直接前驱元素,a i+1为ai的直接后继元素
 * 		 10个运算:INITIATE(L)、LENGTH(L)、CLEAR(L)、EMPTY(L)
 * 				PRIOR(L,ELEM)、NEXT(L,ELEM)、LOCATE(L,X)
 * 				INSERT(L,I,B)、DELETE(L,I)、GET(L,I)
 *      存储结构--
 *      		顺序存储--用一组地址连续的存储空间依次存放线性表的中元素  Loc(ai)=Loc(a1)+(i-1)*k
 *     			链式存储--用一组任意的存储空间(不要求地址连续)存放线性表中的元素 每个节点由数据域和指针域组成
 * 串--有限个字符构成的字符序列
 * 栈--插入和删除操作限定在表尾的线性表(先入后出 FILO)
 * 队列--限定在一端插入,另一端删除的线性表(先入先出 FIFO)
 * 数组--数组和广义表都是线性表的扩展,即线性表的数据元素本身也是一种数据结构 
 * 		二维数组中,每一个元素都是列向量的线性表或者是每个元素都是行向量的线性表
 * 广义表--数据元素可以是表的线性表
 * 树--至少有一个数据元素存在不止一个直接前驱或者后继元素,存在唯一一个称为根的数据元素
 * 	       结点的度--每个结点拥有的子树的个数
 * 	      树的度--树中所有结点的度的最大值
 *    树的深度--树的层次
 * 二叉树--结点数为0或者每个结点最多只有左右两颗子树的树
 * 		结论:第i层最多拥有2 i-1个结点  可进行论证
 * 			深度为k的二叉树最多只有2 k  -1个结点  可用等比数列求和进行论证
 * 			度为0的结点数比度为2的结点数多1  可用结点数和孩子数进行推理
 *      满二叉树--除去最后一层,其它层次上的结点数都达到最大值 2 i-1
 *      完全二叉树--每个节点的编号与相同深度的满二叉树--对应,即左子树的深度-右子树的深度等于0或者1
 * 图--Graph=(V,R)
 * 	   有向图--G=(V,{A})--顶点和弧
 * 	   无向图--G=(V,{E})--顶点和边
 *   深度优先--depth-first-search--将访问的顶点中未访问的顶点当做当前顶点,直到所有邻接点都已访问,然后回退,持续之前操作
 *   广度优先--breadth-first-search--将访问的顶点中所有未访问的顶点都访问,然后依次将访问过的邻接点作为当前结点进行访问,持续如此
 * 
 * AA--Algorithm Analysis--算法分析
 * Algorithm--算法--对特定问题的解决步骤的描述,是有限的指令集合
 * 算法3特征:
 * 有穷性--算法在有限步骤内结束
 * 确定性--算法的每一步的含义都是确定的
 * 可行性--算法的每一步都是可执行的
 * 程序是用某种特定的程序设计语言对算法的具体实现
 * 算法分析的2主要衡量标准:
 * 时间复杂度--算法运行所花费的时间
 * 		Frequency Count--语句频度--语句可能重复执行的最大次数
 * 		Time Complexity--
 * 				算法中所有语句的语句频度t(n)
 * 				f(n)为当n趋于无穷大时,t(n)的同阶无穷大
 * 				f(n)即为t(n)中去除首项系数和低阶项,只考虑最高阶次,因为同阶无穷大为 lim t(n)/f(n)=C,即求导
 * 				T(n)=O(f(n))
 *      常见的9种时间复杂度:
 *      	常数阶O(1)<对数阶O(log2 n)<线性阶O(n)<线性对数阶O(nlog2 n)<平方阶O(n2)<立方阶O(n3)

记录学习的笔记



你可能感兴趣的:(数据结构与算法分析)