Java数据结构和算法
文章平均质量分 82
凌凌小博客
一直,一直,一直努力的用汗水去浇灌梦想开出奇迹!
为什么要努力?
因为我是凌王啊!!!
展开
-
判断一条链表上是否存在环
判断一条链表上是否存在环方法一、简单粗暴的方法,两套循环遍历链表,查看是否存在相同的节点,如果有,则存在环;没有,则不存在环,时间复杂度O(n^2),面试官肯定不愿意看到这种解决方式。是否存在时间复杂度为O(n)的算法求解该问题呢?有的有效的方法(内存开销更少的方法)是由Floyd提出的,所以该方法称为Floyd环判定算法。方法二、该方法使用两个在链表中具有不同移动速度的指针。一旦它们...原创 2018-07-26 14:22:09 · 24563 阅读 · 14 评论 -
图-最短路径—Dijkstra算法和Floyd算法
一、Dijkstra算法1.定义概览:单源最短路径算法Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算...原创 2018-12-01 12:07:52 · 1789 阅读 · 0 评论 -
字符串匹配算法---KMP算法
转载:https://blog.csdn.net/v_july_v/article/details/7041827#commentBox7注:虽是转载,但有些繁琐的介绍也有添加自己的注解和删除一些啰嗦的话语,以及代码都是我自己用java实现的,相应的关键步骤也添加了注释。下面是在理解next表求解时在bilibili看到的一个视频,对我理解next表作用很大,也贴出来让有疑惑的同学自行去看看(...转载 2018-11-23 21:26:12 · 393 阅读 · 0 评论 -
B树和B+树的插入、删除图文详解
简介:本文主要介绍了B树和B+树的插入、删除操作。写这篇博客的目的是发现没有相关博客以举例的方式详细介绍B+树的相关操作,由于自身对某些细节也感到很迷惑,通过查阅相关资料,对B+树的操作有所顿悟,写下这篇博客以做记录。由于是自身对B+树的理解,肯定有考虑不周的情况,或者理解错误的地方,请留言指出。转: http://www.cnblogs.com/nullzx/1. B树1. B树的定...转载 2018-11-21 21:56:40 · 220 阅读 · 0 评论 -
图解排序算法---堆排序
预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,...转载 2018-10-09 15:56:39 · 124 阅读 · 0 评论 -
归并排序
基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式...转载 2018-11-01 09:48:33 · 104 阅读 · 0 评论 -
二叉平衡树的旋转操作
平衡二叉树简称平衡树,是由Adelson-Velskii和Landis于1962年首先提出的,所以又称为AVL树。他的定义很简单,就是若一棵二叉树的每个左右节点的高度差最多相差1,此二叉树即是平衡二叉树。把二叉树的每个节点的左子树减去右子树定义为该节点的平衡因子。二叉平衡树的平衡因子只能是1、0或者-1。平衡二叉树是对二叉搜索树(又称为二叉排序树)的一种改进。二叉搜索树有一个缺点就是,树的结构...原创 2018-11-10 12:07:56 · 1275 阅读 · 0 评论 -
彻底理解线索二叉树
一、线索二叉树的原理 通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。如下图所示。 因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。 记ptr指向二叉链表中的一个结点,以下是建立线索的规则: (1)如...转载 2018-11-09 17:35:24 · 419 阅读 · 0 评论 -
进程和线程关系及区别
1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动;进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位;它是比进程更小的能独立运行的基本单位;同属一个进程的不同线程之间共享进程所拥有的全部资源。一个程序至少一个进程,一个进程至少一个线程。为什么会有线程? 每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下...转载 2018-07-27 10:52:31 · 174 阅读 · 0 评论 -
快速排序
快速排序两种快排实现形式,原理是一样的1、快排原理: 在要排的数(比如数组A)中选择一个中心值key(比如A[0]),通过一趟排序将数组A分成两部分,其中以key为中心,key右边都比key大,key左边的都key小,然后对这两部分分别重复这个过程,直到整个有序。 整个快排的过程就简化为了一趟排序的过程,然后递归调用就行了。 一趟排序的...原创 2018-07-26 17:37:21 · 128 阅读 · 0 评论 -
漫画算法:无序数组排序后的最大相邻差值
一、题目:有一个无序整型数组,如何求出这个数组排序后的任意两个相邻元素的最大差值?要求时间和空间复杂度尽可能低。例如:无序数组 2,3,1,4,6,排序后是1,2,3,4,6,最大差值是6-4=2。解法一:解法一:用一种较快的稳定排序算法(比如归并算法,时间复杂度NlogN)给原数组排序,然后遍历排好序的数组,每两个相邻元素求差,最终得到最大差值。**注:该解法的时间复杂度是O(Nl...原创 2019-03-09 21:35:36 · 13105 阅读 · 0 评论