赞
踩
数据结构是指相互之间存在一种或多种关系的数据元素的集合。
逻辑结构是指 数据元素之间的逻辑关系 ,而物理结构则是 数据的逻辑结构在计算机中的存储形式 。
算法的五大特征:
“好”的算法应考虑达到的目标:
时间复杂度:一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法最深层循环内的语句频度与T(n)同数量级。
空间复杂度:算法的空间复杂度S(n)定义为该算法所消耗的存储空间,它是问题规模n的函数。算法原地工作是指算法所需的辅助空间为常量,即O(1)。
(1)是操作数则进栈
(2)是运算符则将两个元素出栈并将得到的结果进栈
(3)表达式扫描完成后,栈顶元素为所求结果
题问:给定一个单链表,只给出头指针h:
相同点:
不同点:
树是一种非线性的数据结构,其元素之间有明显的层次关系,由结点和边组成且不存在环;
在树的结构中,每个结点都只有一个前件称为父结点,没有前件的结点为树的根结点,简称为树的根;
每个结点可以有多个后件成为结点的子结点,没有后件的结点称为叶子结点。
树的存储结构,常用的有三种:
二叉树的存储结构,常用的有两种:
深度优先遍历类似于二叉树的先序遍历
步骤:
<1>访问起始点v
<2>若v的第一个邻接点没有被访问过,则深度遍历该邻接点
<3>若v的第一个邻接点已经被访问,则访问其第二个连接点,进行深度遍历;重复以上步骤,直到所有节点都被访问为止
广度优先遍历类似于层次遍历
步骤:
<1>访问起始点v
<2>依次遍历v 的所有未访问过得邻接点
<3>再次访问下一层中未被访问过的邻接点;重复以上步骤,直到所有节点都被访问过为止
连接图的各个顶点且边的权值之和最小的是最小生成树;
重要用途:如设计通信网。
Prim(普里姆):采用了贪心算法的思想
(1)将起始顶点并入生成树
(2)将各顶点到生成树距离最短的那个顶点并入生成树
(3)更新各顶点到生成树的距离(比较第二步并入的顶点到各顶点的距离是否会比原顶点距离短,会的话则更新顶点到生成树的距离)
(4)重复以上三步直到所有顶点并入,此时最小生成树完成
Kruskal(克鲁斯卡尔):
将连通网中所有的边按照权值大小做升序排序,从权值最小的边开始选择,只要此边不和已选择的边一起构成环路,就可以选择它组成最小生成树。对于 N 个顶点的连通网,挑选出 N-1 条符合条件的边,这些边组成的生成树就是最小生成树。
通常用并查集来判断已选边是否构成回路(若待加边的两个顶点同属一个集合则构成回路,不同属则将边的一个顶点加入另一个顶点的集合中,完成加边)
所有权值都不相同,或者有相同的边,但是在构造最小生成树的过程中权值相等的边都被并入到最小生成树中的图,其最小生成树是唯一的。
从源点出发,每次选择离源点最近的一个顶点前进,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径。
a.从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
b.对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。
注意:
(1)Dijkstra算法适用稠密图(邻接矩阵),因为稠密图问题与顶点关系密切;Floyd稠密图、稀疏图都适用;
(2)Dijkstra不能处理负权图,Flyod能处理负权图;
(3)Dijkstra处理单源最短路径,Flyod处理多源最短路径;
排序算法:
不稳定的排序:“心情不稳定,快些选堆朋友来聊天”
经过一趟排序,能够保证一个关键字到达最终位置:冒泡排序、快速排序、简单选择排序、堆排序
关键字比较次数和原始序列无关:简单选择排序、折半排序
排序最优和最差相同的排序算法:简单选择、归并排序、堆排序
时间复杂度为O(nlogn):快些以nlogn的速度归队;快(快速),些(希尔),归(归并),队(堆)。
(1)当整个序列有序时退出算法
(2)当序列长度很小时(根据经验是大概小于8),应该使用常数更小的算法,比如插入排序等。
(3)随机选取分割位置
(4)当分割位置不理想时,考虑是否重新选取分割位置
(5)分割成两个序列时,只对其中一个递归进去,另一个序列仍可以在这一函数内继续划分,可以显著减小栈的大小(尾递归)
(6)将单向扫描改成双向扫描,可以减少划分过程中的交换次数
递归和循环两者完全可以互换。不能完全决定性地说循环的效率比递归的效率高
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。