[编程笔记]-Trie_Tree字典树 前言听起来很高大上,事实上很简单( ̄︶ ̄) 作用快速存储和查询字符串。 原理首先建立一颗树,根节点为空节点。 插入时,一个字符一个字符地插入,每一个字符都作为上一个字符的子节点存在。如果上一个字符有对应的子节点,就直接进行下一个字符的操作;如果没有,就先新建一个,然后再进行下一步操作。最后一个字符打一个标记,表示这里有一个单词。(如果需要还可以储存下个数) 查询时,也是一个字符一个字符查询。如果 2024-08-02 编程笔记 > 数据结构 #原创 #编程 #c++ #笔记 #树论 #字典树
[编程笔记]-KMP 前言KMP真的很不好理解,但其实理解了原理,代码就没有任何的问题了。 原理总概KMP嘛,其实就是优化字符串匹配的过程。 优化的终点就是当前点匹配不上时的操作。对比如下: 暴力算法:后移一位,从头开始匹配。 KMP算法:找到匹配串中距离当前点最近的可以与被匹配串匹配的点,直到当前点可以匹配为止。 (这句话可能有点绕,但学完整个算法就理解了。) (至于为什么把它分在数据结构……你就说next数组存 2024-08-02 编程笔记 > 数据结构 #原创 #编程 #c++ #笔记 #字符串 #KMP
[编程笔记]-Monotonic_Queue单调队列 前言update2024/08/07: 写的太乱了,刚好后面动规要引用,回来看了一眼不堪直视,遂重写 单调队列,在STL中有priority_queue(其实人家是堆hh),但事实上和单调队列还是有差距的,详见正文。 而滑动窗口,就是利用单调队列思想,实现的一种算法。 本博客会在单调栈的基础上讲解,所以不会的自助吧。 “[编程笔记]-Monotonic_Stack单调栈” “[ 2024-08-01 编程笔记 > 数据结构 #原创 #编程 #c++ #笔记 #队列 #手打STL #滑动窗口
[编程笔记]-Monotonic_Stack单调栈 简介具有单调性的栈(站内元素单调递增或单调递减) 常见题型问数组中每一个元素左侧/右侧离它最近的比它大/小的元素是什么。 代码123456789101112131415161718192021class Monotonic_Stack{//这里是单调递减,要改的话改fix()就行了。 public: int a[N]; int siz 2024-08-01 编程笔记 > 数据结构 #原创 #编程 #c++ #笔记 #手打STL #栈
[编程笔记]-Queue队列 简介一种先进先出的数据结构,就像排队一样。 代码1234567891011121314151617class Static_Queue{ public: int front,back;//这里front可以视作第0个元素,它的下一位才是第一个真正的元素。 int a[N]; void push(int x){ 2024-08-01 编程笔记 > 数据结构 #原创 #编程 #c++ #笔记 #队列 #手打STL
[编程笔记]-Stack栈 前言作为STL库自带的数据结构,我就不多详细的解释了,主要记录一下手写的代码。 概念一种先进后出的数据结构,可以视为有底瓶。 代码1234567891011121314151617class Static_Stack{ public: int top; int a[N]; void push(int x){ 2024-08-01 编程笔记 > 数据结构 #原创 #编程 #c++ #笔记 #手打STL #栈
[编程笔记]-Double-Linked_Lists双链表 前言鉴于双链表和单链表基本上一毛一样,所以不会重新再写一遍链表基本操作,详见“[编程笔记]-Single-Linked_Lists单链表”。 概念就是双向链表,每个节点既指向后一个元素,又指向前一个元素。 代码对没错就是这么懒( •̀ ω •́ )✧ 123456789101112131415161718192021222324252627282930313233343536class Doubl 2024-08-01 编程笔记 > 数据结构 #原创 #编程 #c++ #笔记 #链表
[编程笔记]-Single-Linked_Lists单链表 前言开新章啦。 概念链表中,每一个元素都有一个指向下一个元素的指针,这样一个链接一个,就形成了一个链式结构。 动态链表动态链表通常就是真正意义上的链表,可以动态增加、修改、减少,但事实上用处并不大,这里就只给出模板,用以借鉴。 1234struct node{//组成链表的结点 int data; node* next;} 静态链表在竞赛中,静态链表才是大头。同时,在之后,我 2024-08-01 编程笔记 > 数据结构 #原创 #编程 #c++ #笔记 #链表
[编程笔记]-Discretization离散化 前言离散化和哈希差不多,但是还是有点区别。 离散化中元素按顺序获取地址,与元素值没有直接关联;而哈希中元素地址就是元素数值通过哈希函数获得的。 离散化需要二分预处理出所有地址,哈希是查询时在线计算地址。 如果有需要,可以看看哈希: “[编程笔记]-Hash_Table哈希表” 简介当遇到数值地址范围很大、数值量很少的问题时,可以使用离散化(或哈希)。 对原数组中所有地址进行排序、去重,然后记录 2024-07-31 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #离散化
[编程笔记]-Lowbit取最小1 前言lowbit是树状数组的基础啊,其重要性可想而知。 模板123int lowbit(int a){ return a&-a;} 演算众所周知,在二进制中,-a等同于~a+1(a的值取反再加一) a取反后,所有1变成0,0变成1,因此在原数中第一个1出现前,全都是1。 故而,再加上一个一,第一个1前面全部变成0,第一个1本来取反变成0了,进位又变回1,然后就结束了,它 2024-07-31 编程笔记 > 基础算法 #原创 #编程 #c++ #笔记 #位运算