
基础算法
ma_ke_xin
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
KMP算法,字符串模式匹配
KMP算法,字符串模式匹配,返回匹配的索引位置 KMP算法,又称作“看猫片”算法(误),是一种改进的字符串模式匹配算法,可以在O(n+m)的时间复杂度以内完成字符串的匹配操作,其核心思想在于:当一趟匹配过程中出现字符不匹配时,不需要回溯主串的指针,而是利用已经得到的“部分匹配”,将模式串尽可能多地向右“滑动”一段距离,然后继续比较。 朴素的字符串模式匹配算法 求一个字符串(模式串)在另一个字符串...原创 2020-03-11 23:26:01 · 352 阅读 · 0 评论 -
最短路径算法——迪杰克斯拉算法/floyd算法
最短路径算法——迪杰克斯拉算法 Dijkstra算法的思想 1、设置两个顶点集S和T,集合S中存放已经找到最短路径的顶点,集合T中存放着当前还未找到最短路径的顶点; 2、初始状态下,集合S中只包含源点V1,T中为除了源点之外的其余顶点,此时源点到各顶点的最短路径为两个顶点所连的边上的权值,如果源点V1到该顶点没有边,则最小路径为无穷大; 3、从集合T中选取到源点V1的路径长度最短的顶点Vi加入到集...原创 2020-03-02 18:08:15 · 1578 阅读 · 0 评论 -
排序函数接口
排序函数接口定义 public interface Sorter{ public <T extends Comparable<T>> void sort(T[] arr); public <T> void sort(T[] arr, Comparator<T> comp); } 冒泡排序实现 public class Bubble imple...原创 2020-03-01 10:04:59 · 233 阅读 · 0 评论 -
二叉树的前序、中序、后序遍历,非递归java
二叉树的前序、中序、后序遍历,非递归java 核心思路是把每一个结点看成父节点,叶子结点是左右孩子是null的父结点。 前序遍历 思路: 使用一个栈来存储结点,以便回到之前的父结点。 不断往左子树深入并不断先打印值再入栈直到左叶子的空左孩子 弹出栈顶,将指针指向它的右孩子 循环1,2步骤直至栈为空且指针也为空(意思是当栈为空但指针不为空时,继续。比如当栈顶元素是二叉树的根节点时,就会出现这种情况,...转载 2020-02-18 14:44:19 · 325 阅读 · 0 评论 -
生产者消费者模型Java实现
生产者消费者模型 首先是共享数据类: 在共享数据类里发生生产和消费的行为。生产和消费的时候都要同步。需要使用循环来判断不能生产或不能消费的情况,不能用if判断,否则可能产生虚假唤醒的情况。即就是没有notify就唤醒了wait的线程。 可以对整个方法加synchronized或者是对共享变量加。 如果是对整个方法同步的话,就是this.wait。 如果是对共享变量加同步的话,就是共享变量.wait...原创 2020-02-17 19:24:56 · 225 阅读 · 0 评论 -
排序算法之选择排序
选择排序 选择排序(不稳定)的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。举个栗子,对5,3,8,6,4这个无序序列进行简单选择排序,首先要选择5以外的最小数来和5交换,也就是选择3和5交换,一次排序后就变成了3,5,8,6,4.对剩下的序列一次进行选择和交换,最终就会得到一个有序序列。其实选择排序...原创 2020-02-17 19:18:45 · 162 阅读 · 0 评论 -
排序算法之快速排序
快速排序 快速排序(不稳定)一听名字就觉得很高端,在实际应用当中快速排序确实也是表现最好的排序算法。快速排序虽然高端,但其实其思想是来自冒泡排序,冒泡排序是通过相邻元素的比较和交换把最小的冒泡到最顶端,而快速排序是比较和交换小数和大数,这样一来不仅把小数冒泡到上面同时也把大数沉到下面。 举个栗子:对5,3,8,6,4这个无序序列进行快速排序,思路是右指针找比基准数小的,左指针找比基准数大的,交换之...原创 2020-02-17 19:17:50 · 153 阅读 · 0 评论 -
排序算法之归并排序
归并排序 归并排序(稳定)是另一种不同的排序方法,因为归并排序使用了递归分治的思想,所以理解起来比较容易。其基本思想是,先递归划分子问题,然后合并结果。把待排序列看成由两个有序的子序列,然后合并两个子序列,然后把子序列看成由两个有序序列。。。。。倒着来看,其实就是先两两合并,然后四四合并。。。最终形成有序序列。空间复杂度为O(n),时间复杂度为O(nlogn)。 public class Merg...原创 2020-02-17 19:16:20 · 156 阅读 · 0 评论 -
排序算法之插入排序
插入排序 插入排序(稳定)不是通过交换位置而是通过比较找到合适的位置插入元素来达到排序的目的的。相信大家都有过打扑克牌的经历,特别是牌数较大的。在分牌时可能要整理自己的牌,牌多的时候怎么整理呢?就是拿到一张牌,找到一个合适的位置插入。这个原理其实和插入排序是一样的。举个栗子,对5,3,8,6,4这个无序序列进行简单插入排序,首先假设第一个数的位置时正确的,想一下在拿到第一张牌的时候,没必要整理。然...原创 2020-02-17 19:15:02 · 182 阅读 · 0 评论 -
排序算法之堆排序
堆排序 堆排序(不稳定)是借助堆来实现的选择排序,思想同简单的选择排序,以下以大顶堆为例。注意:如果想升序排序就使用大顶堆,反之使用小顶堆。原因是堆顶元素需要交换到序列尾部。 首先,实现堆排序需要解决两个问题: 1. 如何由一个无序序列键成一个堆? 2. 如何在输出堆顶元素之后,调整剩余元素成为一个新的堆? 第一个问题,可以直接使用线性数组来表示一个堆,由初始的无序序列建成一个堆就...原创 2020-02-17 19:13:28 · 184 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序 冒泡排序是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡向上升一样,因此而得名。举个栗子,对5,3,8,6,4这个无序序列进行冒泡排序。首先从后向前冒泡,4和6比较,把4交换到前面,序列变成5,3,8,4,6。同理4和8交换,变成5,3,4,8,6,3和4无需交换。5和3交换,变成3,5,4,8,6.这样一次冒泡就完了,把最小的数3...原创 2020-02-17 19:11:30 · 228 阅读 · 0 评论