
算法
文章平均质量分 93
坏小哥
To be or not to be,that's a question...
展开
-
深入理解BM算法
我之前和大家分享过KMP算法,下面和大家分享一个比BM更高效的算法——BM算法。一、简介:Boyer-Moore字符串搜索算法是一种非常高效的字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。二、基本原理1、坏字符:2、好后缀规则三、php实现代码展示<?php/** * Class BM Algorithm */class BM{ public function原创 2021-01-13 21:00:57 · 2921 阅读 · 0 评论 -
谈谈字符串算法
一、一个字符串中最长不重复子串问题思路:记录当前字符之前的最长不重复子串长度,记为L(i - 1),其中i为当前字符的位置。遍历字符串:(1)若当前字符第一次出现,则MaxL = L(i - 1) + 1(2)若不是第一次出现,计算当前字符与它上次出现位置之间的距离,记为d:1> 若d > L(i - 1),说明前一个非重复子字符串中没有包含当前字符,则MaxL = L(...原创 2020-01-03 17:34:32 · 2737 阅读 · 0 评论 -
PHP实现快排算法——>递归VS非递归
算法思路分析:快速排序的思想就是,选一个数作为基数(这里我选的是第一个数),大于这个基数的放到右边,小于这个基数的放到左边,等于这个基数的数可以放到左边或右边,看自己习惯,这里我是放到了左边,一趟结束后,将基数放到中间分隔的位置,第二趟将数组从基数的位置分成两半,分割后的两个的数组继续重复以上步骤,选基数,将小数放在基数左边,将大数放到基数的右边,在分割数组,直到数组不能再分为止,排序结束。...原创 2019-08-26 16:18:14 · 3542 阅读 · 0 评论 -
浅谈八大排序
首先,我们先说说排序的分类和特性:一、排序的分类内部排序和外部排序(1) 内部:待排序记录存放在计算机随机存储器(内存)中进行的排序过程。(2) 外部:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序过程。比较和非比较排序(1)比较类:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排...原创 2019-06-02 18:20:49 · 3461 阅读 · 0 评论 -
Java实现普里姆和克鲁斯卡尔——最小生成树
import java.io.IOException;import java.util.Scanner;public class Graph { private char[] vertex; //顶点集合 private int[][] matrix; //邻接矩阵 private static final int INF = Integer.MAX_VALUE; //最大值...原创 2019-04-02 22:11:56 · 4047 阅读 · 0 评论 -
Java实现深度优先和广度优先遍历
其实这两个算法思想很好理解。深度优先遍历:在一个图中选择一个起始点v0,然后遍历其子节点。再以子节点为起始点,遍历子节点的子节点。就这样一直递归下去,重复2。然后一直遍历到没有子节点,开始回溯。广度优先遍历:从图中某个顶点v0出发,并访问此顶点。从v0出发,访问V0的各个未曾访问的邻接点W1,W2,…,Wk;然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点。重复...原创 2019-04-08 10:17:45 · 4932 阅读 · 0 评论 -
Java实现迪杰斯特拉和弗洛伊德——最短路径
迪杰斯特拉算法介绍:杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。算法思想:对于一个图G,计算最短路径时候,需要指定起点v0(从起始点开始计算)把点划分为两组:1)第一组S:为已经求出的最短路径的终点集合...原创 2019-04-05 16:18:45 · 4330 阅读 · 0 评论 -
深入理解KMP算法
背景:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。俗称:看猫片算法。 核心思路:1. 主串不需要回滚,即 i 一直往后走。2. 子串通过子串本身的一种性质,调整 j 的位置,再继续与 i 比较。3. 时间复杂度由暴力破解的O(m * n)提高到O(m + n...原创 2019-03-26 22:33:40 · 4175 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环:它是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。算法原理:约瑟夫环运作如下:1、一群人围在一起坐成 [2] 环状(如:N)2、从某个编号开始报数(如:K)3、数到某个数(如:M)的时候,此人出列,下一...原创 2019-02-19 21:26:29 · 4378 阅读 · 0 评论 -
java实现两个大数的四则运算
在很多的算法题中,我们经常会遇到两个大数相加,相减,相乘,相除。那么,今天分享一下java如何实现大数的四则运算。两个大数相加:核心算法:两个大数存入字符数组,再定义一个结果数组,长度为前面最大的数组长度 加 1,再定义一个进位变量,从右到左开始计算(个位开始)。利用循环,遍历两个数组,实现两个数字相加。中间需要判断一下,两个数相加是否大于9,如果大于,要进1。最后循环输出结果数组。...原创 2019-02-02 15:33:36 · 6189 阅读 · 1 评论