
数据结构
文章平均质量分 76
KOwzb
因为很想得到,所以努力得到、、、、、
展开
-
C++图解前缀树(字典树)
字典树原理:字典数将相同前缀的单词做为共用的前缀,如果找不到这个前缀,则在另外一个结点上插入这个单词。并且在这个单词结尾的结点加上1。class Trie{private: bool isEnd; Trie *next[26];public: Trie() { isEnd=false; memset(next,0,sizeof(next)); } void Insert(string word) {原创 2021-05-16 14:40:39 · 375 阅读 · 0 评论 -
KMP算法
一、问题描述给定一个主串S及一个模式串P,判断模式串是否为主串的子串;若是,返回匹配的第一个元素的位置(序号从1开始),否则返回0;如S=“abcd”,P=“bcd”,则返回2;S=“abcd”,P=“acb”,返回0。二、朴素算法最简单的方法及一次遍历S与P。以S=“abcabaaaabaaacac”,P="abaabcac"为例,一张动图模拟朴素算法:这个算法简单,不多说,附上代码#include<stdio.h>int Index_1(char s[],int原创 2021-04-21 15:06:41 · 153 阅读 · 0 评论 -
二叉树的线索化
一、线索二叉树的引入二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。二、线索二叉树的构造线索二叉树的节点结构:线索二叉树的节点定义:enum PointTag{ LINK,//子树 THREAD,//线索};templat...原创 2021-04-11 14:16:13 · 578 阅读 · 0 评论 -
搜索二叉树
二叉搜索树:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树有个特点,最左的是最小的节点,最右的是最大的节点。当我们把二叉搜索树进行中序遍历的时候,它是进行排序后的结果,所以我们也把二叉搜索树叫做排序二叉树。接下来我们介绍二叉排序树的所有的算法:1.1搜索二叉树的结构首先我们来看它的结构,他的结构和二叉树类似,所以会有一原创 2021-04-08 12:41:34 · 588 阅读 · 0 评论 -
浅析AVL树
1.为什么提出AVL树学习完搜索二叉树以后,我们应该想到一个问题,如果我们的搜索二叉树的趋向于单链的形式,类似于:2.二叉平衡树概念和结构为了解决上述问题,所以提出了一个概念,叫做二叉平衡树。二叉平衡树,相对于二叉搜索树,引入了一个叫做平衡因子的概念。平衡因子:平衡因子就是右子树的深度-左子树的深度。二叉平衡树的规则是:每一个节点的平衡因子的绝对值都要小于2。所以我们需要给一个平衡因子。二叉平衡树的结构:template<typename K,typena.原创 2021-04-08 10:55:55 · 319 阅读 · 0 评论 -
C++实现图的深度优先遍历和广度优先遍历
图的深度和广度优先遍历图的深度优先遍历 1、算法思想 2、邻接矩阵构造图 3、邻接表构造图 图的广度优先遍历 1、算法思想 2、邻接矩阵构造图 图的深度优先遍历1、算法思想(1)从图中的某个初始点 v 出发,首先访问初始点 v. (2)选择一个与顶点 v 相邻且没被访问过的顶点 ver ,以 ver为初始顶点,再从它出发进行深度优先遍历。 (3)当路径上被遍历完,就访问上一个顶点的第 二个相邻顶点。 (4)直到所有与初始顶点 v联通的顶点都被访问。2、邻原创 2021-03-03 18:42:27 · 2507 阅读 · 1 评论 -
最短路径问题 --- Dijkstra算法详解
最短路径问题最短路径问题 1、最短路径问题介绍 2、Dijkstra 算法思路 3、Dijkstra算法示例演示 4、Dijkstra算法的代码实现(c++) 参考最短路径问题1、最短路径问题介绍从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径 1,给定一个带权有向图 G 与起始顶点 v,求从 v 到 G 中其...原创 2021-03-02 09:28:25 · 5821 阅读 · 0 评论 -
经典的大数据例题
前言:1、说明:一般解决大数据问题有两个思路:1)先将与这道题相关的所有的数据结构进行使用一遍,如果有合适的就直接进行使用2)如果不能直接使用,一般就要进行哈希切分,然后再使用合适的数据结构进行问题的解决2、在这里我先来介绍一种常用于大数据问题的方法:哈希切分1)先估算出要切分的大小2)然后使用哈希的除留余数法进行各个数据的映射原创 2017-08-05 13:43:13 · 3108 阅读 · 0 评论 -
排序大全
一、排序的分类插入排序算法复杂度为O(n²)。因而,插入排序不适合对于数据量比较大的排序应用。插入排序的空间复杂度为O(1)。稳定性:稳定。/void Insertsort(int arr[],size_t size)// {// for(size_t j=1;j// {// int i=j;// while(i>0&&(arr[原创 2017-07-27 11:11:39 · 351 阅读 · 0 评论 -
倒排索引的了解
倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。倒排索引是实现单词到文档映射关系的最佳实现方式和最有效的索引结构.原创 2017-06-25 20:05:24 · 1287 阅读 · 0 评论 -
bitmap
首先先看一下下面这个腾讯的面试题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】思路一: 最容易想到的解法就是遍历所有的40多亿个整数,然后一个一个判断。但是这个需要花费的内存是多大呢? 大家可以去算一下,这里我就直接给出结果为16G,是不是需要的空间很大啊。如原创 2017-06-23 10:11:48 · 316 阅读 · 0 评论 -
map/set/multi_map/multi_set/unorder_map/unorder_set总结
map/set/multi_map/multi_sep底层实现是加头节点的红黑树,元素之间有序,当存放的是自定义类型的时候要重载operatormap存放的是键值对,,key唯一,value可以重复,不能修改key的值,可以先删除旧的值,再添加新的值,value的值可以修改。set用户存放的是值,但是底层存放的仍能存放的是键值对,只不过key=value,同样的值是唯一的,不能随便原创 2017-06-11 15:48:23 · 555 阅读 · 0 评论 -
红黑树—BTree
什么叫红黑树?同AVL树一样,红黑树也是近似平衡的二叉搜索树,与AVL树不同的是红黑树没有了平衡因子,但增加了一个枚举变量,来标明结点的颜(RED or BLACK)。因为红黑树可以保证它的最长路劲不超过它最短路径的两倍,所以它近似平衡。红黑树具有以下几点性质:1. 每个结点都必须具有一种颜色(RED or BLACK)。2. 根结点为黑色。3. 如果一个结点为红原创 2017-06-04 17:15:22 · 1914 阅读 · 0 评论 -
b树
1.首先是找到插入位置,在这里我们实现了一个函数通过key值来查找要插入结点所应存在的位置,然后返回他的父结点。pairint> Find(const K& key) {//查找结点, Node* cur = _root; Node* parent = NULL; while (cur) { si原创 2017-05-31 18:38:02 · 213 阅读 · 0 评论 -
二叉树的实现
#includeusing namespace std;#include#includetemplateclass T>struct BinaryTreeNode//节点{ BinaryTreeNode(const T& x)//构造函数 :_data(x) ,_left(NULL)原创 2017-05-30 09:56:01 · 256 阅读 · 0 评论