![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 96
看完这篇还有亿篇
这个作者很懒,什么都没留下…
展开
-
A*搜索C++实现
A*搜索A*算法原理代码实现A*算法原理你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。代码实现#include<iostream>#include<list>#include<queue>#include<vector>#include<cmath>#include<cstring>#inc原创 2021-02-17 23:19:21 · 543 阅读 · 0 评论 -
滚动hash实现字符串匹配
package 字符串匹配;public class 滚动hash { /** * 滚动哈希:常数时间生成哈希码 * 生成一个长度为 L 数组的哈希码,需要 O(L)O(L) 时间。 * 如何在常数时间生成滑动窗口数组的哈希码?利用滑动窗口的特性,每次滑动都有一个元素进,一个出。 * 由于只会出现小写的英文字母,因此可以将字符串转化成值为 0 到 25 的整数数组: arr[i] = (int)S.charAt(i) - (int)'a'。 * 按照这种规则,abcd 整数数组形原创 2020-08-23 11:11:01 · 519 阅读 · 0 评论 -
详解KMP算法
KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己的语言来把这个算法的一些细节梳理清楚,也算是考验一下自己有真正理解这个算法。 什么是KMP算法:KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第...转载 2020-08-23 10:44:38 · 224 阅读 · 0 评论 -
最长公共子序列C++
最长公共子序列问题描述最长公共子序列问题分析代码问题描述先来了解一下字串和子序列,一个串的子串是指该串的一个连续的局部。如果不要求连续,则可称为它的子序列。比如对串: “abcdefg” 而言,“ab”,“abd”,“bdef” 等都是它的子序列。特别地,一个串本身,以及空串也是它的子序列。最长公共子序列给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。例如:abcfbc与abfcab的最长公共子序列是a原创 2020-06-10 19:37:42 · 3212 阅读 · 0 评论 -
快速选择算法c++
快速选择算法c++Quick Selection原理Quick Selection复杂度分析前后指针法Quick Selection原理Quick Selection算法和Quick Sort算法是由同一个作者提出,这两者之间有很大的相似之处——分治,即将问题的规模一次次的减小,直到求出最终解,时间复杂度O(n),且数据无需有序。目标:找到第n大的数随机产生一个pivot根据这个piv...原创 2020-03-31 18:26:50 · 1823 阅读 · 0 评论 -
P1424 小鱼的航程(改进版)详解
题目背景原来的题目太简单,现改进让小鱼周末也休息,请已经做过重做该题。题目描述有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设x(1≤x≤7) 开始算起,过了n(n≤106) 天以后,小鱼一共累计游泳了多少公里呢?输入格式输入两个整数x,n(表示从周x算起,经过n天)。输出格式输出一个整数,表示小鱼累计游泳了多少公里。输入输出样例输入3 10输出200...原创 2019-11-04 21:10:45 · 1488 阅读 · 2 评论 -
实现TreeSet类,其中迭代器使用二叉查找树
TreeSet的实现类这里主要是实现TreeSet的迭代器的hasNext()、next()、remove()这三个方法。本例中所用到的节点都为其添加了一条指向其父节点的parent引用import java.util.ConcurrentModificationException;import java.util.Iterator;import java.util.NoSuchEle...原创 2019-09-21 15:01:45 · 232 阅读 · 0 评论 -
利用Java大整数类实现高次幂运算
利用Java大整数类解决高次幂运算思路:若N是偶数,则 XN = XN/2 * XN/2;若N是奇数,则 XN = X(N-1)/2 * X(N-1)/2 * X => (X2)(N-1)/2 * X。import java.math.BigInteger;/** * 利用Java大整数类解决高次幂运算 * 思路: *若N是偶数,则X^N = X^N/2 * X^N/2...原创 2019-08-05 22:48:44 · 1386 阅读 · 0 评论 -
后缀表达式实现简单的加减乘除运算
如何计算后缀表达式当遇到一个数是就把它推入栈中;在遇到一个运算符时该运算符就作用于从该栈弹出的两个操作数上,再将所得的结果推入栈中。最终,栈中只有一个元素,即为答案。注:本文是利用后缀表达式实现简单的加减乘除运算,所以在本文开始前还需要了解后缀表达式如何将标准表达式(中缀表达式)转换成后缀表达式。import java.util.List;import java.util.Stack;...原创 2019-07-31 19:21:40 · 1063 阅读 · 0 评论 -
将标准表达式(中缀表达式)转换成后缀表达式
什么是后缀表达式后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。例如:这里我给出一个中缀表达式:a+bc-(d+e)第一步:按照运算符的优先级对所有的运算单位加括号:式子变成了:((a+(bc))-(d+e))第二步:转换前缀与后缀表达式前缀:把运算符号移动到对应的括号前面则变成了:...原创 2019-07-31 18:42:57 · 983 阅读 · 0 评论 -
括号配对
import java.util.HashMap;import java.util.Map;import java.util.Stack;public class 平衡符号 { /** * 思路: * 做一个空栈。读入字符直到文件结尾。 * 如果字符是一个左括号,则将其推入栈中。 * 如果是右括号,则当栈空时报错。否则,将栈顶元素弹出。如果弹出的符号不是对应的左括号,...原创 2019-07-31 16:43:22 · 155 阅读 · 0 评论