
基础算法学习
文章平均质量分 65
基础算法学习笔记
BIT_Ethan
这个作者很懒,什么都没留下…
展开
-
数据结构(三)KMP算法
在长度为m的模式串和长度为n的主串的匹配中,如果纯用双指针暴力匹配,那么在主串上的指针i需要反复回溯,这样的时间复杂度为O(mn)。每次匹配失败的过程中,只要j指针往后移动了,就说明此时模式串和主串的一部分是匹配成功的,这部分主串的信息我们是已知的,如果此时i不动,而让j移动到另一位置k,且满足模式串上的1~j-1与(k-j+1)~(k-1)这两部分是完全一致的,则下一次匹配可以让i不动,而使模式串直接从k开始即可,这样可以大大的减小时间复杂度。因此,我们就明白,KMP算法主要分为两步,第一步是求j原创 2022-01-29 16:14:02 · 1076 阅读 · 0 评论 -
数据结构(二)栈与队列(数组模拟版)
一、栈特性:先进后出。基本操作写法如下://stk为模拟栈所用数组,tt为栈顶下标int stk[N], tt;//插入新元素stk[++tt] = x;//弹出栈顶tt--;//判断是否为空栈if(tt > 0) not empty;else empty;//取栈顶stk[tt];可以看出,用数组模拟栈的各种操作都极为简单!...原创 2022-01-29 00:46:45 · 1323 阅读 · 0 评论 -
数据结构(一)链表(数组模拟版)
一、数组模拟单链表单链表作用:常用于作为邻接表,可以存储树或图。数组模拟单链表方法:创建两个数组,e[N]用来存每一个结点的value值,ne[N]用来存每一个结点的next指针,空节点的ne值为-1,两个数组是通过下表关联起来的,都是int型,head表示头指针,指向链表头,链表空时为-1,idx表示当前用到了哪个点,如下图所示:初始化、插入、删除基本操作如下:#include <iostream>using namespace std;const int .原创 2021-12-26 22:13:55 · 293 阅读 · 0 评论 -
基础算法模板(一)
一、快速排序#include <iostream>using namespace std;const int N = 1e6 + 10;int n;int q[N];void quick_sort(int q[], int l, int r){ if(l >= r) return; int i = l - 1, j = r + 1; int x = q[l + r >> 1]; while(i < j){原创 2021-09-05 23:08:03 · 258 阅读 · 0 评论