数据结构
文章平均质量分 72
0 errors 0 warnings
这个作者很懒,什么都没留下…
展开
-
无向图的最小代价生成树之普里姆算法
【普里姆算法基本思想】从图中任取一个顶点作为一棵树。然后从与这棵树相连的边中选取一条最短(权值最小)的边,并将该边及其所连接的顶点也并入这个树中,此时便得到了具有两个顶点的树。接着从与这棵树相连的边中选取一条最短的边,并将该边及其所连接的顶点也并入这个树中,得到了了具有三个顶点的树。以此类推,直到图中所有顶点都被并入这棵树中为止,此时便得到了该图的最小代价生成树。【普里姆算法用到的存储结构】用普里...原创 2018-06-04 10:37:04 · 1822 阅读 · 1 评论 -
序列化与反序列化二叉树分析
题目依旧来自《剑指Offer》和牛客网在线编程。【题目】实现两个函数,分别实现序列化与反序列化二叉树。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = v...原创 2018-05-31 10:10:30 · 987 阅读 · 0 评论 -
二叉搜索树的第K个结点分析
题目依旧来自《剑指Offer》和牛客网在线编程。【题目】给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第3小结点的值为4。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; ...原创 2018-05-31 10:28:33 · 987 阅读 · 0 评论 -
图中关键路径的求解
【再次回顾AOV网】AOV网是活动在顶点上的网(Activity On Vertex network,AOV)的英文简称。AOV网是用有向图来表示的,在有向图中,顶点表示活动,边表示活动的先后次序且没有回路。【什么是AOE网】AOE网是活动在边上的网(Activity On Edge network,AOE)的英文简称。AOE网是用有向图来表示的,在有向图中,边表示活动,边具有权值,边的权值代表了...原创 2018-06-07 13:50:26 · 4377 阅读 · 2 评论 -
冒泡排序
【冒泡排序思想】冒泡排序属于交换类排序算法。基本思想为:首先将第一个记录和第二个记录进行比较,如果第一个记录大,则将两者交换位置,否则不交换;然后将现在的第二个记录和第三个记录比较,如果第二个大,则二者交换,否则不交换……一直按照这种方式进行下去,最终整个数列中的最大值将被交换到数列的最后,一趟冒泡排序结束。根据这个思想我们可以看出,一旦一趟冒泡排序结束,那么就一定能把参与这趟排序的数列中的最大值...原创 2018-06-08 10:53:16 · 211 阅读 · 0 评论 -
快速排序
【快速排序思想】快速排序属于交换类排序。一趟快速排序是以一个“枢轴”为中心,将序列分为两部分,枢轴的一边全是比它小(或者小于等于)的,另一边全是比它大(或者大于等于的)。根据快速排序的思想可以看出,在一趟快速排序结束后,枢轴元素将到达它在数列中的正确有序位置,即一趟快速排序结束后,枢轴元素排序完成。【快速排序Java代码实现】package com.ccff.sort.QuickSort;pu...原创 2018-06-08 11:12:25 · 156 阅读 · 0 评论 -
直接选择排序
【直接选择排序算法思想】直接选择排序属于交换类排序算法。默认数列的第一个元素是有序的。从头到尾顺序扫描序列,找出最小的一个记录,将它和第一个记录交换,接着从剩下的记录中继续这种选择和交换,最终使序列有序。根据直接选择排序的算法 思想可以看出,每一次扫描结束后,都可以将一个元素排到它最终的位置上。【直接选择排序Java代码】package com.ccff.sort.ChooseSort;pub...原创 2018-06-08 11:21:46 · 489 阅读 · 0 评论 -
直接插入排序
【直接插入排序算法思想】直接插入排序属于插入类排序算法。每趟将一个待排序的元素作为关键字,按照其关键字值的大小插入到已经排好的部分有序序列的适当位置,知道插入完成。【直接插入排序算法Java实现】package com.ccff.sort.InsertSort;public class InsertSort { public void insert_sort(int[] array){...原创 2018-06-08 11:27:23 · 182 阅读 · 0 评论 -
数据结构中排序复杂度整理
今天上午复习了一下《数据结构高分笔记》中的各个排序算法,现在先对各个排序算法的复杂度做一个整理。1、各个排序算法复杂度分析 最坏情况最好情况平均情况空间复杂度直接插入排序O(n^2)O(n)O(n^2)O(1)折半插入排序O(n^2)O(n)O(n^2)O(1)希尔排序 O(nlogn)O(1)冒泡排序O(n^2)O(n)O(n^2)O(1)快速排序O(n^2)O(nlogn)O(nlogn)O...原创 2018-06-01 17:27:45 · 1515 阅读 · 0 评论 -
拓扑排序
【什么是AOV网】AOV网是活动在顶点上的网(Activity On Vertex network,AOV)的英文简称。AOV网是用有向图来表示的,在有向图中,顶点表示活动,边表示活动的先后次序且没有回路。【拓扑排序核心算法】对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若存在u到v的路径,则在拓扑排序序列中一定是u出现在v的前边。拓扑排序算法的执行...原创 2018-06-06 20:51:16 · 821 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目依旧来自《剑指Offer》和牛客网在线编程。【题目】请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。import java.util.ArrayList;/*public class TreeNode { int val = 0; TreeNode left = null; ...原创 2018-05-30 13:49:42 · 1284 阅读 · 0 评论 -
无向图的最小代价生成树之克鲁斯卡尔算法
【克鲁斯卡尔算法基本思想】每次找出候选边中权值最小的边,就将该边并入生成树。重复此过程,直到所有边都被检测完成为止。【克鲁斯卡尔算法执行过程】将图中边按照权值从小到大排序,然后从最小边开始扫描各边,并检测当前边是否是候选边,即是否该边加入到最小生成树中会产生回路。如果不构成回路,则将该边并入当前生成树中,直到所有边都被检测完成为止。【并查集在克鲁斯卡尔算法中的应用】并查集中保存了一棵或者几棵树,这...原创 2018-06-04 11:15:56 · 1226 阅读 · 0 评论 -
折半查找
【折半查找思路】折半查找首先需要要查找的序列是有序的(下面的讨论基于递增有序)。假设Array[start , ... , end]为当前的查找区间,首先确定该区间的中间位置,即mid = (start + end) / 2;然后将待查找的k值与Array[mid]做比较,此时有三种情况:第一,若k = Array[mid]。则查找成功,返回mid即为查找到的位置;第二,若k > Array...原创 2018-06-11 11:23:52 · 1528 阅读 · 0 评论 -
重建二叉树问题分析心理
题目要求:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。【直观感受1】二叉树的三种遍历方式无论是本科考试、考研考试还是在工作的笔试和面试中均为重点内容。首先我们需要知道的是三种遍历(前、中、后)的访问顺序。前序遍...原创 2018-05-29 13:42:18 · 379 阅读 · 0 评论 -
利用迪杰斯特拉算法求某一顶点到其余各顶点的最短路径
【迪杰斯特拉算法思想】 设有两个顶点集合S和T,集合S中存放图中已找到最短路径的顶点,集合T存放图中剩余顶点。初始状态下,集合S中只包含源点V0。然后不断从集合T中选取到顶点V0路径长度最短的顶点Vu并入集合S中。集合S中每次并入一个新的顶点Vu后,都要修改顶点V0到集合T中顶点的最短路径长度值。不断重复此过程,直到集合T中的顶点全部并入集合S中为止。【深入理解】 当集合T中的...原创 2018-06-05 20:29:57 · 21074 阅读 · 0 评论 -
利用弗洛伊德算法求某一顶点到其余各顶点的最短路径
虽然能用迪杰斯特拉算法求出图中某一个顶点到其余各个顶点的最短路径,但是如果求图中任意一对顶点间的最短路径,通常用弗洛伊德算法求解。【弗洛伊德算法求解最短路径的一般过程】、 第一步,这是两个矩阵A和Path,初始时将图的邻接矩阵赋值给A,将矩阵Path中元素全部设置为-1。 第二步,以顶点k为中间顶点,k取0-n-1(n为图中顶点个数),对图中所有顶点对{i,j}进行...原创 2018-06-05 21:04:02 · 3336 阅读 · 0 评论 -
二叉树的下一个结点分析
题目依旧来自《剑指Offer》和牛客网的在线编程。【题目】给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。【分析1】二叉树的前中后三种顺序遍历这个是树这个数据结构的核心内容之一,相信看到这篇文章的每一个人都知道中序遍历的顺序是:左子树——根结点——右子树。【分析2】如果给定了一棵二叉树,我们用笔很容易在纸上写出该...原创 2018-05-30 09:43:16 · 99 阅读 · 0 评论 -
把二叉树打印成多行分析
题目依旧来自《剑指Offer》和牛客网在线编程。【题目】从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。import java.util.ArrayList;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tre...原创 2018-05-30 10:22:06 · 207 阅读 · 0 评论 -
对称的二叉树分析
题目依旧来自《剑指Offer》和牛客网在线编程。【题目】请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode...原创 2018-05-30 10:41:42 · 1325 阅读 · 0 评论 -
利用大顶堆进行堆排序
今天上午在看《数据结构高分笔记》中的排序算法时,发现里面将的堆排序很好,在此记录一下。1、什么是堆 堆是一种数据结构。可以把堆看成是一棵完全二叉树,这棵完全二叉树满足:任何一个非叶子结点的值都不大于(或不小于)其左右孩子的值。若父亲大孩子小,则这样的堆称为大顶堆;若父亲小孩子大,则这样的堆称为小顶堆。2、堆排序执行过程(大顶堆)① 从无序序列所确定的完全二叉树的第一个非叶子结点开始,从右...原创 2018-06-01 17:54:07 · 2159 阅读 · 1 评论