![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
慌张而黑糖
简书地址:https://www.jianshu.com/u/ddef7d10e06a
github地址:http://li-kexue.github.io/
展开
-
字符串匹配
字符串匹配 在了解kmp算之前,先来看一下最简单的字符串匹配算法。 BF算法 这个算法,比较暴力,也比较容易理解,不做过多描述,下面给出一张图,一般都能理解。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-664cNPOK-1575690342372) 很简单,下面直接给出代码。 public class BF { public static void m...原创 2019-12-07 11:51:17 · 135 阅读 · 0 评论 -
快速排序
快速排序算是我接触的第一个排序速度比较快的算法,之前一直也没有写快排的博客,闲来无事,就算温习一下了。 快排的原理 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。(来自wiki百科) 我们首先设置一个哨兵,为了方便,就设置第一个为哨兵(这里哨兵的设置对快排的性能也有影响),然后设置两个指针,分别指向数组...原创 2019-10-26 18:26:01 · 193 阅读 · 0 评论 -
KMP算法详解
KMP算法详解KMP的next串手算求法 我会结合代码对KMP算法进行详细讲解。由于编代码和做数据结构的题不一样所以,我分两部分对KMP进行讲解。 KMP的next串手算求法 书上对next串求法的定义是这样的: next[j]={0,j=1Max(k∣1<k<j且有"t1t2...tk−1"="tj−k+1tj−k...原创 2019-04-21 14:46:37 · 158 阅读 · 0 评论 -
图解堆排序
什么是堆? 堆通常是一个可以被看做一棵完全二叉树的数组对象。——百度词条 堆又分为大根堆和小根堆 大根堆(最大堆),即每个父节点都大于等于他的子节点 小根堆(最小堆),即每个父节点都小于等于他的子节点 一般情况下,堆排序使用的是最大堆。 做堆排序之前的准备工作 如何将一个数组变成为一个最大堆 首先将数组和二叉树对应起来 先看一个例子: [4 8 3 6 1 2]这个数组是下面这棵完全二叉树通过...原创 2019-09-21 18:44:26 · 261 阅读 · 0 评论 -
全排列
问题 生成n个元素的所有排列对象 递归生成 这里我先把代码贴出来,结合代码和下面的解释会更容易理解(java版) public void swap(int arr[],int a,int b){ int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } public void sort(int arr[],int len,in...原创 2019-09-27 19:45:10 · 195 阅读 · 0 评论 -
最大子段和
问题描述 给定由n个整数(可能有负整数)组成的序列(a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an),要求该序列形如∑k=ijak\sum_{k=i}^{j}a_k∑k=ijak的最大值(1≤i≤j≤n1\leq i \leq j \leq n1≤i≤j≤n)。 例如,序列(-20,11,-4,13,-5,-2)的最大子段和为∑k=24ak=20\sum_...原创 2019-09-27 19:48:32 · 241 阅读 · 0 评论