![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
三国小梦
计算机专业在校大学生一枚,个人github网址:https://github.com/q314872695
展开
-
字符串模式匹配kmp算法总结
首先呢先展示一下万能的暴力匹配算法,它的思想最简单,只是时间复杂度高了那么一点点,不过问题不大。算法思想:从主串的第一个字符起,与模式串的第一个字符比较,若相等,则继续逐个比较后续字符;否则从主串的下一个字符起,重新和模式串的字符比较;以此类推,直至模式串中的每个字符依次和主串中的一个连续的字符序列相等,则称匹配成功,函数值为与模式串中第一个字符相等的字符在主串中的序号,否则称匹配不成功,函数值为-1。代码:KMP算法求next数组PM表字符串的前缀、后缀和部分匹配值以为例说明:故字符串的部分匹配值为原创 2022-06-01 14:58:59 · 175 阅读 · 0 评论 -
c++实现全排列的三种方式
递归方式#include <cstdio>#include <iostream>#include <algorithm>#include <string>using namespace std;const int MAXN = 10;bool visit[MAXN];//判断某个元素是否被访问过char sequence[MAXN];//存放找到的全排列void GetPermutation(string str, int index){原创 2022-04-18 15:19:55 · 8185 阅读 · 1 评论 -
使用c++实现矩阵相加、相乘、转置、求幂
引言对于矩阵我们应该并不陌生吧,在大学线性代数里面每天对它相加,相乘,转置等等,那么在计算机中该怎么实现呢?首先,先定义一个矩阵的结构体。const int MAXN = 100; //矩阵最大的行和列// 定义一个矩阵struct Matrix{ int row,col; //行,列 int matrix[MAXN][MAXN]; Matrix(){} Matrix(int r,int c):row(r),col(c){} // 初始化时同时给行列赋值};原创 2022-04-09 09:55:04 · 2798 阅读 · 1 评论 -
使用c++求快速幂
引言所谓快速幂是指快速求得a的b次方的方法。求a^b,最朴素的想法便是不断进行b次累乘,但真的需要进行b次乘法运算吗?分析假如要计算232,当求得216次方之后,可以直接对216进行平方得到232,并不需要在2^16基础上再进行16次累乘。相应地,求216只需对28求平方即可。同理,求28,只需对24平方……以此类推。例如求3^29等价于求31∗34∗38∗3163^1 * 3^4 * 3^8 * 3^{16}31∗34∗38∗316那么1,4,8,16是怎么算出来的呢?29的二进制表示为11原创 2022-04-05 21:15:30 · 1396 阅读 · 0 评论 -
质数、质因数个数和约数个数的求解
质数的判定质数也称素数,是指只能被其自身和1整数的正整数。那么如何判断一个数是否为质数呢?可以用所有小于该数的正整数去试着除该数,若能整数,则不是质数;若这些数都不能整除它,则该数是质数。要求给定一个数n,要求判定是否为质数(0,1和负数都不是质数),若是则输出yes,否则输出no代码#include <cstdio>#include <cmath>using namespace std;/* * 判断一个数是否是质数(素数) * */bool Judge(原创 2022-03-31 18:27:12 · 481 阅读 · 0 评论 -
使用c++求最大公约数与最小公倍数
分析最大公约数最大公约数是指两个或多个整数共有约数中,最大的一个约数。常用的方法是欧几里得算法,也叫辗转相除法。假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:1997 / 615 = 3 (余 152)615 / 152 = 4(余7)152 / 7 = 21(余5)7 / 5 = 1 (余2)5 / 2 = 2 (余1)2 / 1 = 2 (余0)至此,最大公约数为1以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所原创 2022-03-30 09:38:56 · 4914 阅读 · 0 评论 -
java实现稀疏矩阵的压缩与解压
任务要求把棋盘当作一个稀疏矩阵,0表示没棋,1表示黑棋,2表示蓝棋。把该稀疏矩阵压缩以三元组形式表示并以文件形式保存,再写另一个程序读取文件中的信息把压缩后的三元组还原成原来的稀疏矩阵。其中三元组的第一行用来存储原始稀疏矩阵的行数、列数和有效的数据个数,其余行用来存储有效的非0数据思路分析稀疏矩阵的压缩遍历原始的稀疏矩阵,得到有效的数据个数sum根据sum创建三元组new int [sum+1] [3](即sum+1行3列的二维数组)将二维数据的有效数据存入三元组中稀疏矩阵的解压原创 2022-03-29 21:19:58 · 703 阅读 · 0 评论 -
使用c++实现各种进制之间的转换
前言我们最常见的进制转换就是十进制转换为二进制了,就是不停的作除法,取余数。例如:十进制的10转换为二进制10÷2=5···05÷2=2···12÷2=1···01÷2=0···1直到商为0,然后把余数倒着写,所以10的二进制表示为1010。十进制->N进制会了十进制转换为二进制,那么十进制转换为任意进制也就迎刃而解了,只要不停的除法和取余就好了。#include <iostream>#include <cstdio>#include <stack原创 2022-03-27 17:21:32 · 13230 阅读 · 0 评论