算法及实现
Parzivval
。
展开
-
【经典算法】KMP
KMP原创 2023-05-11 11:44:24 · 47 阅读 · 0 评论 -
【经典算法】AC自动机
Ac自动机;字典树原创 2023-04-05 19:47:47 · 445 阅读 · 0 评论 -
AC自动机
1、概述Aho-Corasick自动机算法(简称AC自动机)1975年产生于贝尔实验室。该算法应用有限自动机巧妙地将字符比较转化为了状态转移。此算法有两个特点,一个是扫描文本时完全不需要回溯,另一个是时间复杂度为O(n),时间复杂度与关键字的数目和长度无关。好了,我们先看下最原始的多模式匹配算法:主串T,n=strlen(T)。模式串Pimi= strlen(pi)[...转载 2019-10-31 13:57:24 · 283 阅读 · 0 评论 -
五种内部排序C语言实现
1.插入排序:bool Insert(List L, ElementType X) { if (L == NULL)return false; if (L->Last == MAXSIZE - 1)return false; for (int i = 0; i <= L->Last; i++) if (L->Data[i] == X)return false...原创 2019-06-01 16:28:53 · 771 阅读 · 0 评论 -
欧拉筛(求素数)
线性筛,复杂度为O(n)。与埃氏筛相比,不会对已经被标记过的合数再进行重复标记,故效率更高。欧拉筛将合数分解为 (最小质因数 * 一个合数) 的形式,通过最小质因数来判断当前合数是否已经被标记过。const int maxn = 101; // 表长int prime[maxn], pNum = 0; // prime记录素数,pNum记录素数个数 bool p[max...转载 2019-05-22 13:22:01 · 301 阅读 · 0 评论 -
Manacher算法
#include<bits/stdc++.h>using namespace std; char s[3000],c;int sj = 0, p[3000] = { 0 },mx=0,id,len=1;// p[i]:以s[i]为中心回文串单向扩张长度// id:最大回文子串中心位置// mx:最大回文子串右边界 & mx = id+p[id] ;...原创 2019-04-09 15:35:37 · 196 阅读 · 0 评论 -
最小生成树(Prim)算法实现
#include<iostream>#include<vector>#define INF 65563using namespace std;typedef struct MyStruct *node;typedef vector<node> Graph;struct MyStruct { int adjv; int value;...原创 2019-01-16 15:42:10 · 260 阅读 · 0 评论 -
最短路径(Dijkstra)算法实现
#include<iostream>#include<vector>#define INF 65536 ;using namespace std;typedef struct MyStruct TableEntre;typedef vector<TableEntre> Table ;struct MyStruct ...原创 2019-01-20 22:23:32 · 156 阅读 · 0 评论 -
基数排序(桶排序)的C++实现
#include<iostream>#include<vector>#include<string>using namespace std;//低位优先//测试数据 278 109 63 930 589 184 505 269 8 83int main() { int n = 0; int max = 0; cout...原创 2018-12-17 21:29:36 · 866 阅读 · 0 评论 -
KMP算法详解
KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己的语言来把这个算法的一些细节梳理清楚,也算是考验一下自己有真正理解这个算法。 什么是KMP算法:...转载 2018-11-11 10:25:07 · 120 阅读 · 0 评论 -
快速排序
#include<iostream>using namespace std;void quicksort(int *left, int *right) { if (left > right) return; int *i, *j,t,temp; i = left; j = right; temp = *left; w...原创 2018-11-11 15:18:31 · 84 阅读 · 0 评论 -
KMP实现(C++)
#include<iostream>#include<string>#include<vector>using namespace std;vector<int> getNext(string p) { vector<int> next(p.size()); int j = 0; int k = -1;...原创 2018-11-11 12:33:05 · 1044 阅读 · 1 评论