- 博客(13)
- 收藏
- 关注
原创 字符串算法:正则表达式原理及C++实现
前言临近期末,事情特别的多,想写一些博客也是没什么时间;最近终于考的是差不多,着手写写之前一直想写的正则表达式的原理及其实现,感觉再不写就要忘完了。原理正则表达式首先我们需要知道什么是正则表达式。正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex, regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则...
2018-07-08 16:01:36
6251
1
原创 字符串算法:KMP算法+BoyerMoore算法原理及C++实现
前言:很久以前就写好了字符串搜索的几个经典算法:KMP算法、Boyer-Moore算法以及Rabin-Karp算法。但是一直没有时间写,这次我准备详细的写一下KMP算法,简略的分析下BoyerMoore算法。原理:KMP算法:KMP算法是一种子字符串查找算法,它将会返回目标子字符串在文本中的下标,相比暴力检索算法KMP算法拥有更好的时间复杂度。KMP算法的基本思想是当字符串出现不匹配的时候,我们就...
2018-05-27 17:02:30
859
原创 数据结构:Huffman树(哈夫曼树)原理及C++实现
前言: 最近要到期末了,事情有点多有几个星期没有写这个了,我们数据结构实验课要求写Huffman树,因此这次我将对Huffman树进行介绍。原理:哈夫曼树是一种单词树,广泛使用于数据压缩之中。将会根据每个字符的权重,来构建一颗Huffman树,同时根据Huffman树对原来的文本进行二次编码,以达到压缩数据的目的。比如当我们对AAABBBA进行Huffman树压缩时,A的编码将会是1...
2018-05-20 19:06:05
13743
7
原创 数据结构:散列表(哈希表)开放定址法原理及C++实现
前言: 最近写了下RabinKarp算法,当中使用到了一定的Hash方法,我顺就复习了一下Hash表的实现原理,要不然感觉自己都要忘记了~~原理:散列表: 散列表也称哈希表,是一种键值对应的数据结构(key-value),也就是说任何一个存储在Hash表中的数据(value)都会有一个对应的键值(key)用来存储它。我们可以这样来理解他:在我们去电影院看电影的时候,我们...
2018-04-22 17:23:19
1062
原创 小记:数组下标索引的用法
最近在逛知乎的时候,看到了一种比较特别的数组下标索引的方式,受到一些启发,所以简单的记录一下。 众所周知对于一个整型数组S,访问其内部的元素有几种方式。比如我们想要访问其3个元素可以是以下几种方式:1. int S[2];2. int *(S + 2);这两种是我们很容易想到的表现方式,其本质上都是对地址的访问。我们这里介绍第三种方法,其样式如下:3. int 2...
2018-04-19 20:38:16
1966
原创 数据结构:Trie树(前缀树)原理及C++实现
前言: 最近学习了tire树(前缀树),也就是单词查找树;正如书上所言,这是人类对算法研究的最高成果之一,学会了后感觉尤为深刻,接下来就来记录下自己的感受。原理: Trie树和其他的数据结构一样,支持查找、插入以及删除操作,当然也可以添加其他的操作。Trie树的编程非常的简单,这一切都得益于其优秀的性质。Trie树和其他的各种查找树一样也是由链接的节点组成的数据结构,这...
2018-04-15 17:05:26
7058
原创 字符串低位优先排序(LSD)和高位优先排序(MSD)原理及C++实现
前言: 最近正好在学习字符串相关的算法,写了下LSD、MSD以及三向快速排序算法,写完了过后有很大的感触,所以决定把这几天所学习的东西记录下来。原理:键索引计数法: 在开始介绍LSD以及MSD算法之前,我们要介绍一个算法——键索引计数法,这是LSD以及MSD的基础。 键索引计数法允许我们通过一定的键值来对字符串进行排序,一个很好的例子就是分组——每个学生对...
2018-04-08 15:34:18
5737
原创 归并排序、快速排序的原理以及C++实现
前言: 最近在上数据结构实验课,要求用数组实现一个链表,在做顺序合并的时候突然想起了归并排序也是那样做的;索性这次就来介绍七种排序中的后两种——归并排序和快速排序。我们先了解下它们的原理吧~~ 惯例还是先来一个GitHub传送门:JZX555的GitHub~~原理:分治算法: 不论是对于归并排序还是快速排序,核心思想都是五大基本算法中的分治算法—...
2018-04-01 16:24:17
650
原创 数据结构:二项队列原理及其C++实现
前言: 这次,将进行介绍的是一个特殊而有趣的队列——二项队列。在二项队列中你会发现人们是怎么把二进制的思想体现在数据结构中的;同时二项队列也是一种很高效的队列,对于合并、插入以及DeleteMin操作,它的最坏运行时间为O(LogN),而插入平均花费常数时间进行。那么接下来开始我们的讲解吧~~原理: 首先我们得知道,二项队列并不是一颗堆序的树,而是堆序树的一个集合,也可...
2018-03-25 16:19:36
1465
原创 数据结构:并查集 Union-Find算法(不相交集)原理及C++实现
前言: 这一次为大家介绍的另外一种比较基础的算法——并查集Union-Find算法。这是一种用于不相交集(Disjoint Sets)的查询以及合并问题的算法。主要用树的形式来进行链接,这里我们将使用的是数组来表现。PS:不相交集是并查集的另一个说法~~还是老样子,先是GitHub传送门~~原理: 首先我们要认识到并查集算法是用来处理不相交集问题的一个工具,它为等价关系...
2018-03-18 17:46:47
1691
1
原创 图论算法:最短路径——无权最短路径算法和Dijkstra算法C++实现
前言 今天将给大家介绍的是图论算法中的另外一个基础部分——最短路径算法;其中又分为无权最短路径,单源最短路径,具有负边的最短路径以及无圈图等;而这次将介绍常见的两个——无权最短路径以及单源最短路径。接下来就开始我们的讲解吧~~ 首先还是惯例来一个:Github传送门~~原理 最短路径算法,顾名思义是一种用来找出从某地到另外某个地方所经过的路径长度最短的算法...
2018-03-11 16:32:20
7763
1
原创 图论算法:最小生成树——Prim算法和Kruskal算法C++实现
前言: 这次我记录的是另外一种很有意思的东西——最小生成树。相信学过离散数学的朋友都对这种东西不陌生,那么在代码中,我们该如何实现它呢?接下来,我将对此讲解一些自己的心得。 开头让我插入一个Github传送门:JZX555的Github原理: 首先让我们看看什么是最小生成树——一个有n个节点的连通图的生成树是原图的极小连通子图,且包含原图中的所有n个节点,并且...
2018-03-04 15:45:52
2675
原创 数据结构:伸展树原理及C++实现(自顶向下实现)
前言: 我现在是一个大二的学生,因为下个学期就要开始学习数据结构这门课程,出于兴趣我提前将数据结构自学了一遍,在学习的过程中发现了许多有趣的结构,最近终于有了一点时间,决定开始写点博客,记录一下自己的想法;这是我第一次写博客,如果有不好的地方欢迎大家指出,我们可以一同讨论共同进步。原理: 伸展树(SplayTree)是一种平衡树的结构,是二叉搜索树的一种,他保证从空树开始的任意连续M...
2018-02-24 17:10:44
979
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人