wolf鬼刀
明明已经知道结局,但是当结局正真来临时,还是会伤心欲绝
展开
-
什么是线段树?
什么是线段树?文章目录什么是线段树?一、简介二、线段树的结构与建树如何存储这个线段树呢?三、区间查询那么如何判断两个区间是否有交集?四、单点修改五、区间修改、懒标记懒标记六、完整代码线段树节点的构造下传标记的函数区间修改的函数加入懒标记后的建树函数加入懒标记后的查询函数主函数中的调用七、区间合并操作与懒标记的运用八、权值线段树动态开点九、查找排名第k的数十、查询数 k 的排名一、简介 线段树是在算法竞赛中常用来维护区间信息的数据结构,同时,线段树的理解难度较树状数组低(当然是在理解递归的前提下)。原创 2020-10-04 14:51:31 · 863 阅读 · 0 评论 -
动态规划之KMP字符匹配算法
动态规划之KMP字符匹配算法KMP 算法(Knuth-Morris-Pratt 算法) 是⼀个著名的字符串匹配算法, 效率很⾼, 但是确实有点复杂。先在开头约定, 本⽂⽤ pat 表⽰模式串, ⻓度为 M , txt 表⽰⽂本串,⻓度为 N 。 KMP 算法是在 txt 中查找⼦串 pat , 如果存在, 返回这个⼦串的起始索引, 否则返回 -1。读者⻅过的 KMP 算法应该是, ⼀波诡异的...原创 2020-03-02 17:23:37 · 839 阅读 · 0 评论 -
LFU缓存详解
LFU缓存详解文章目录LFU缓存详解一、LFU概念二、分析方法一:哈希表 + 平衡二叉树方法二:双哈希表一、LFU概念LRU详解:https://blog.csdn.net/wolfGuiDao/article/details/105862106 LRU 算法相当于把数据按照时间排序,这个需求借助链表很自然就能实现,你一直从链表头部加入元素的话,越靠近头部的元素就是新的数据,越靠近尾部的元素就是旧的数据,我们进行缓存淘汰的时候只要简单地将尾部的元素淘汰掉就行了。 而 LFU 算法相当于是淘原创 2020-08-04 23:28:09 · 2068 阅读 · 0 评论 -
AVL树
AVL树一、AVL树1 . AVL树的概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能**保证每个结点的左右子树高度之差的绝对值不超过1(**需要...原创 2020-02-10 18:47:08 · 557 阅读 · 0 评论 -
排序详解
排序详解一、选择排序代码:void SelectSort(int* arr,int len){ int begin = 0; int end = len - 1; while(begin < end) { int min_index = begin; int max_index = end; for(int i = begin;i <= ...原创 2020-01-10 00:43:15 · 4246 阅读 · 0 评论 -
十种基本排序算法
十种基本排序算法代码自己慢慢找哈#define _CRT_SECURE_NO_WARNINGS#include<Windows.h>#include<stdio.h>#define MaxSize 10//归并排序,桶排序等排序时需要申请和原数组一样大小的空间时用到,方便修改//快排int QuickShortchild(int *str, int lef...原创 2019-10-05 23:56:22 · 2247 阅读 · 0 评论 -
顺序表、链表、双向循环链表
顺序表、链表、双向循环链表SeqList.h#pragma once#include<stdio.h>#define ListSize 100 //线性表的最大长度typedef int DataType;typedef struct{ DataType data[ListSize]; //用数组存储线性表中的元素 DataType length; ...原创 2019-10-23 12:56:54 · 1321 阅读 · 0 评论 -
数据结构--图(Graph)详解(四)
数据结构–图(Graph)详解(四)文章目录数据结构--图(Graph)详解(四)一、图中几个NB的算法1.普里姆算法(Prim算法)求最小生成树2.克鲁斯卡尔算法(Kruskal算法)求最小生成树3.拓扑排序算法4.迪杰斯特拉(Dijkstra算法)算法5.弗洛伊德算法一、图中几个NB的算法1.普里姆算法(Prim算法)求最小生成树2.克鲁斯卡尔算法(Kruskal算法)求最小生成树3.拓扑排序算法4.迪杰斯特拉(Dijkstra算法)算法5.弗洛伊德算法...原创 2020-07-26 14:36:55 · 1108 阅读 · 0 评论 -
数据结构--图(Graph)详解(三)
数据结构–图(Graph)详解(三)文章目录数据结构--图(Graph)详解(三)一、深度优先生成树和广度优先生成树1.铺垫2.非连通图的生成森林3.深度优先生成森林4.广度优先生成森林二、几个特别NB的算法详解1.普里姆算法(Prim算法)求最小生成树2.克鲁斯卡尔算法(Kruskal算法)求最小生成树3.拓扑排序算法4.迪杰斯特拉(Dijkstra算法)算法5.弗洛伊德算法一、深度优先生成树和广度优先生成树1.铺垫本博客来解决对于给定的无向图,如何构建它们相对应的生成树或者生成森林。 其实在原创 2020-07-26 01:15:33 · 950 阅读 · 0 评论 -
数据结构--图(Graph)详解(二)
数据结构–图(Graph)详解(二)文章目录数据结构--图(Graph)详解(二)一、图的存储结构1.图的顺序存储法2.图的邻接表存储法3.图的十字链表存储法4.图的邻接多重表存储法一、图的存储结构1.图的顺序存储法2.图的邻接表存储法3.图的十字链表存储法4.图的邻接多重表存储法使用图结构表示的数据元素之间虽然具有“多对多”的关系,但是同样可以采用顺序存储,也就是使用数组有效地存储图。使用数组存储图时,需要使用两个数组,一个数组存放图中顶点本身的数据(一维数组),另外一个数组用于存储各顶点原创 2020-07-26 00:04:32 · 2786 阅读 · 0 评论 -
数据结构--图(Graph)详解(一)
数据结构–图(Graph)详解文章目录数据结构--图(Graph)详解一、图的基本概念1.图的分类2.弧头和弧尾3.入度和出度4.(V1,V2) 和 一、图的基本概念我们知道,数据之间的关系有 3 种,分别是 “一对一”、“一对多” 和 “多对多”,前两种关系的数据可分别用线性表和树结构存储,接下来学习存储具有"多对多"逻辑关系数据的结构——图存储结构。1.图的分类图 1 所示为存储 V1、V2、V3、V4 的图结构,从图中可以清楚的看出数据之间具有的"多对多"关系。例如,V1 与 V4 和 V2原创 2020-07-25 23:40:43 · 3183 阅读 · 0 评论 -
实现 LRU 缓存机制
实现 LRU 缓存机制文章目录实现 LRU 缓存机制一、什么是 LRU 算法二、LRU 算法描述三、LRU 算法设计四、代码实现一、什么是 LRU 算法LRU 就是一种缓存淘汰策略。(比较常见的内存替换算法有:FIFO(先进先出淘汰算法),LRU最近最少使用替换算法),LFU(最不经常访问淘汰算法),LRU-K(最久未使用K次淘汰算法),2Q(类似LRU-2)) 计算机的缓存容量有限,如...原创 2020-04-30 15:33:59 · 637 阅读 · 0 评论 -
B+树和B*树详解
B+树和B*树详解文章目录B+树和B*树详解一、B+树1.B+树的定义2.性质3. B+树的插入操作4.B+树的删除操作二、B*树一、B+树1.B+树的定义2.性质B+树是B树的变体,也是一种多路搜索树,除了: 1)B+树包含2种类型的结点:内部结点(也称索引结点)和叶子结点。根结点本身即可以是内部结点,也可以是叶子结点。根结点的关键字个数最少可以只有1个。 2)B+树与B树最大的不同是内部结点不保存数据,只用于索引,所有数据(或者说记录)都保存在叶子结点中。 3) m阶B+树表示了内部原创 2020-07-02 15:15:14 · 2445 阅读 · 0 评论 -
B-、B树详解及模拟实现
B-、B、B+树简介及模拟实现文章目录B-、B、B+树简介及模拟实现一、B树二、B-树1.性质2.特性三、B+树1.性质2.特性四、B*树五、摸拟实现B+树一、B树B树就是二叉搜索树:二叉搜索树详解二、B-树1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是 一种平衡的多叉树。1.性质一棵M阶B-树(balanced tree of order m)是一棵平衡的M路搜索树。它或者是空树,或者是满足 下列性质 的树: 1.定义任意非叶子结点最多只有M个儿子;原创 2020-06-07 23:20:20 · 1028 阅读 · 0 评论 -
哈希原理
哈希原理C++11提供的unordered系列的容器之所以在查找方面能够达到O(1)O(1)O(1)的复杂度,是因为其底层使用了哈希的结构一、哈希的概念:顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N)O(N)O(N),平衡树中为树的高度,即O(log 2N)O(log~2 N)O(log...原创 2020-03-10 12:20:03 · 2733 阅读 · 2 评论 -
Trie树
Trie树文章目录Trie树一、什么是Trie树1.定义2.基本性质3.优点:4.缺点:5.bit-wise Trie6.压缩Trie1.压缩分支条件:7.外存Trie二、Trie树的基本操作实现1.Trie树的原理2.Trie树的操作1.插入2.查找3.删除3.Trie树的模拟实现一、什么是Trie树 Trie,又经常叫前缀树,字典树等等。它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree。当然很多名字的意义其实有原创 2020-06-20 15:04:39 · 1494 阅读 · 0 评论 -
红黑树
红黑树的模拟实现文章目录红黑树的模拟实现1. 红黑树的概念2. 红黑树的性质3. 红黑树节点的定义4 .红黑树结构5 .红黑树的插入操作6.代码:7. 红黑树的验证8. 红黑树的删除本篇博客当中使用了二叉搜索树和AVL树的相关性质:二叉搜索树AVL树1. 红黑树的概念红黑树,是一种 二叉搜索树 ,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根...原创 2020-03-21 16:53:00 · 463 阅读 · 0 评论 -
Union-Find 并查集算法详解
Union-Find 并查集算法详解文章目录Union-Find 并查集算法详解一、问题介绍二、基本思路三、平衡性优化四、路径压缩五、总结一、问题介绍简单说,动态连通性其实可以抽象成给一幅图连线。比如下面这幅图,总共有 10 个节点,他们互不相连,分别用 0~9 标记:现在我们的 Union-Find 算法主要需要实现这两个 API:class UF { /* 将 p 和 q...原创 2020-04-30 14:25:52 · 532 阅读 · 0 评论 -
队列的基本操作
队列的基本操作:DQueue.h"#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int QDataType;typedef struct QNode { QDataType data; struct QNode *next;} QNode...原创 2019-10-23 13:07:33 · 1422 阅读 · 0 评论 -
二叉搜索树
二叉搜索树一、 二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二、 二叉搜索树操作二叉搜索树的查找2.二叉搜索树的插入3.二叉树的删除首先查找元素是否在二叉搜索树中,如果不存在,...原创 2020-02-10 18:46:21 · 2065 阅读 · 3 评论 -
堆的基本操作
堆的基本操作一、 堆的概念及结构:1.如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满足:Ki <= K2i+1 Ki<= K2i+2 (Ki >= K2i+1 Ki >= K2i+2) i = 0,1,2…,则称为 小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆...原创 2019-12-30 23:16:53 · 1086 阅读 · 0 评论 -
二叉树和栈的基本操作
二叉树和栈的基本操作Tree.h:#pragma once#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <assert.h>#define TreeDataType char/**二叉树数据结构定义**/typedef struct...原创 2019-10-23 12:37:19 · 2429 阅读 · 0 评论