数据结构
基本的数据结构
saltedfishust
这个作者很懒,什么都没留下…
展开
-
8-加权有向图的遍历(前序、后序、拓扑)和最短路径树(Dij、BF、Flyod)
有向图的可达性(遍历)与无向图不同,有向图的遍历(或者叫排列)基于DFS,分为以下三种:前序遍历:根最先后序遍历:根最后逆后序遍历(拓扑排序)拓扑排序是将DAG中所有顶点排成一个线性序列,使得图中任意一对顶点 u 和 v,若边<u,v>∈E(G),则 u 在线性序列中出现在 v 之前;定理1:当且仅当一幅有向图是无环有向图(DAG)时它才能进行拓扑排序(即拓扑有序);定理2:一幅有向无环图的拓扑顺序即为所有顶点的逆后续排列;注意:在拓扑排序之前必须检查图中有没有环,如果有则返回原创 2020-11-18 21:16:15 · 1467 阅读 · 0 评论 -
7-加权无向图的遍历(DFS、BFS)和最小生成树(Prim、Kruskal)
无向图的遍历DFS算法思想深度优先搜索思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。算法特点:栈深度优先搜索是一个递归的过程。首先,选定一个出发点后进行遍历,如果有邻接的未被访问过的节点则继续前进。若不能继续前进,则回退一步再前进,若回退一步仍然不原创 2020-11-18 21:14:52 · 2798 阅读 · 1 评论 -
6-二叉搜索树、平衡二叉树、红黑二叉树
树树的定义:树是一种数据结构,它是由n(n>=1)个有限结点组成的一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树;树的大小:节点的数量;树中一个节点的深度:该节点到根节点的路径上的链接数;树的高度:所有节点中的最大深度;根节点的深度:0,所以只含根节点的树的高度为0。二叉搜索树原创 2020-11-18 21:13:45 · 243 阅读 · 0 评论 -
5-各种排序算法的总结
性能指标稳定性:如果一个排序算法能够保留数组中重复元素的相对位置则可以称为是稳定的。原地排序:如果在排序过程中,是直接在输入数组上进行操作(比较和交换)来完成排序的,则称为原地排序。时间复杂度:交换和比较的次数随数组规模 N 增长的函数。空间复杂度:需要额外的空间随数组规模 N 增长的函数。各种排序算法的比较算法是否稳定是否原地排序时间复杂度空间复杂度备注选择排序否是N^21插入排序是是N~N^21取决于输入元素的顺序希尔排序否原创 2020-11-18 21:11:53 · 110 阅读 · 0 评论 -
4-排序之优先队列与堆排序
优先队列堆有序定义:当一颗二叉树的每个节点都大于等于(或小于等于)它的两个子节点时,它被称为堆有序。堆有序原理:根节点是堆有序的二叉树的最大节点(最小节点)。二叉堆表示法:堆有序的二叉树使用完全二叉树来表示,由于使用了完全二叉树,使得我们可以用数组来存储二叉堆,而数组的索引代表节点的位置,即按照层级顺序放入数组,根节点在索引1(第一个位置不使用),两个子节点在索引2,3…二叉堆定义:二叉堆是一组能够用堆有序的完全二叉树排序的元素,并在数组中按照层级存储(不使用数组中的第一个元素)。优先队列:基于原创 2020-11-18 21:11:17 · 176 阅读 · 0 评论 -
3-排序之快速排序
import java.util.Arrays;import java.util.Collections;import java.util.List;/** * 快速排序:基于分治思想,将一个数组分成两个数组独立排序,与归并排序是互补的,与归并排序不同的是它不是任意的划分,而是基于某个值的切分,使两边的数组分别不大于 * 和不小于这个值,所以当两边子数组都有序时整个数组也有序了,并不需要归并;其核心方法是切分,切分的过程也就是排序的过程,每次切分后返回选定值的索引。 * 时间复杂度:对于长..原创 2020-11-18 21:10:39 · 98 阅读 · 0 评论 -
2-排序之归并排序
import java.util.Arrays;/** * 归并排序:基于递归和分治的思想,将一个数组对半分,然后将结果归并起来,被对半的数组又可以递归的对半分和归并... 其核心方法是原地归并,归并的过程就是排序的过程。 * 时间复杂度:对于长度为N的任意数组,归并排序需要 1/2NlogN~NlogN 次比较,最多访问数组 6NlogN 次。 * 特点:能够将任意长度为N的数组排序所需时间降低到与NlogN成正比,主要缺点是所需的额外空间和N成正比。 * 理论:归并排序是一种渐进最优的基于比原创 2020-11-18 21:09:57 · 187 阅读 · 0 评论 -
1-排序之初级排序算法(选择排序、插入排序、冒泡排序、希尔排序)
import java.util.Arrays;/** * 初级排序算法: * 选择排序 -- N^2 * 插入排序 -- N ~ N^2 * 希尔排序 -- NlogN ? * * 高级排序算法: * 归并排序 -- NlogN * 快速排序 -- NlogN * 堆排序 -- NlogN */public abstract class Sort { protected Comparable[] toBeSortedArray; // 待排序的数组原创 2020-11-18 21:09:17 · 130 阅读 · 0 评论 -
对于数据结构的理解
程序是什么?程序 = 数据结构 + 算法;把编写程序想象成搭积木的过程,那么数据结构就是一块块形状各异的积木块,而算法则是你要搭配它们的策略,只有你真正了解了每个积木块的特点和用途,然后运用不用的算法,就可以搭建出漂亮的房子、车子…最基本的数据结构是什么?很多人可能对这个问题一头雾水,数组?栈和队列?他们都很基本啊,但显然我想要的答案不是这些,最基本的数据结构是变量,在面向对象的语言中,这个变量的范畴会更加宽泛,例如在Java中,变量包括基本类型变量(基本类型的实例)和对象(类的实例)。接下来我会解原创 2020-10-30 11:03:57 · 264 阅读 · 0 评论