03 2021 档案

 
串匹配算法——KMP算法
摘要:上一篇博客介绍了串匹配问题的定义和蛮力(Brute Force)算法的实现,并且通过分析得出,在最好的情况下,执行一次蛮力算法的时间,是文本串T长度n和模式串P长度m的乘积,即它的最坏时间复杂度为O(nm)。不难想象,当文本串很长时,运行蛮力算法的时间成本相当高。那么,有没有办法能优化串匹配算法,来 阅读全文
posted @ 2021-03-30 22:27 换甲 阅读(299) 评论(0) 推荐(0) 编辑
串匹配算法——BF算法
摘要:串匹配问题: 串模式匹配,简称串匹配,是数据结构中的经典问题,在邓俊辉版数据结构中,他的定义如下: 对基于同一字符表的任何文本串T(|T| = n)和模式串P(|P| = m),判定T中是否存在某一子串与P相同,若存在(匹配),则报告该子串在T中的起始位置。 一般来说文本串T的长度n要远大于模式串P 阅读全文
posted @ 2021-03-29 21:30 换甲 阅读(920) 评论(0) 推荐(0) 编辑
希尔排序
摘要:希尔排序 希尔排序是简单插入排序的拓展,以发明人shell的名字来命名。希尔排序和快速排序一样,是突破了O(n2)界限的排序算法。 希尔排序对简单插入排序的改进 希尔排序主要针对简单插入排序插入过程中移动速度过慢的缺点进行改进。对于简单插入排序来说,序列中逆序的元素越多,则算法需要比较和移动的次数越 阅读全文
posted @ 2021-03-16 20:55 换甲 阅读(123) 评论(0) 推荐(0) 编辑
排序算法及三大简单排序算法介绍
摘要:排序是数据结构与算法中不可绕过的部分。所谓的排序,就是按照某种约定的比较规则,将一个序列排成某种顺序。例如将n个整数a1,a2,...,an按大小顺序排成一个非降序列,使a1<=a2...<=an。 排序就是让序列从无序到有序的操作。 排序算法的分类 可以将排 阅读全文
posted @ 2021-03-15 21:01 换甲 阅读(498) 评论(0) 推荐(0) 编辑
堆排序
摘要:堆的定义 简单来说,堆就是一种有特定约束的完全二叉树。堆要求堆中所有父节点的值大于等于其左右孩子的值,或者小于等于左右孩子的值。前一种被称为大顶堆,后一种被称为小顶堆。 建堆和调整 因为是完全二叉树,可以用数组存储堆这种数据结构,那么我们要怎么样将一个数组中的元素成一个堆呢?其实很简单,只要对每个非 阅读全文
posted @ 2021-03-15 19:53 换甲 阅读(183) 评论(0) 推荐(0) 编辑
快速排序
摘要:快速排序 之前的文章介绍过冒泡算法。在每一轮冒泡排序中,无序序列通过元素间的不断的交换,使无序集合中最大或最小的元素不断沉底,最后这个元素就变成了有序序列的第一个元素。冒泡算法的思想是非常朴素,它的时间复杂度为O(n2),这不能满足速度上的要求。所以有人就想到了优化这个算法的办法,也就这篇文章要介绍 阅读全文
posted @ 2021-03-14 17:12 换甲 阅读(147) 评论(0) 推荐(0) 编辑
归并排序
摘要:归并排序 归并排序和快速排序一样,也是一种通过分治思想来提升排序速度的高效排序算法。归并排序采用这样一种策略,将待排序的序列分为两部分,这两个部分分别进行排序。排序完成时,这两部分都是有序的,然后再依次比较这两个序列中元素的大小,将这些元素插入到新的序列当中,这个新的序列就是最终排序结果。 两个有序 阅读全文
posted @ 2021-03-14 14:57 换甲 阅读(103) 评论(0) 推荐(0) 编辑
最小生成树之Prim算法和Kruskal算法
摘要:要了解最小生成树的概念,我们首先要知道生成树是什么 生成树的定义 一个有 n 个结点的联通图的生成树是原图的极小连通子图,生成树包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 最小生成树的性质 1.容易想象,要保证n个节点联通,至少要有n-1条边,所以一个有n个节点的生成树必有n-1条边 阅读全文
posted @ 2021-03-10 00:27 换甲 阅读(137) 评论(0) 推荐(0) 编辑
蓝桥杯——两道并查集的题目
摘要:1. 合根植物 w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。 这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。 如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗? 阅读全文
posted @ 2021-03-08 10:43 换甲 阅读(188) 评论(0) 推荐(0) 编辑
并查集
摘要:并查集定义 并查集是一种用来处理不相交集合的树状数据结构。 用途 顾名思义,并查集主要有两个作用 1.并: 合并不相交的集合 2.查::查找集合的代表元素,用来检测集合是否相交。 一些非常常见的算法,如最小生成树,最近公共祖先等,都用到了并查集。 代表元 代表元是集合中用来代表整个集合某个原始,例如 阅读全文
posted @ 2021-03-07 11:47 换甲 阅读(301) 评论(0) 推荐(0) 编辑
余数定理
摘要:三大余数定理 1. 余数的加法定理 x和y之和除以z的余数,等于x除以z的余数加y除以z的余数再除以z的余数。 (x+y)%z=(x%z+y%z)%z 2. 余数的乘法定理 x和y之积除以z的余数 阅读全文
posted @ 2021-03-06 10:51 换甲 阅读(2405) 评论(0) 推荐(0) 编辑
快速幂
摘要:传统幂运算 幂运算应该说是一种很简单的运算,在计算机中,可以通过循环手段实现。要计算nm,需要进行m-1次乘法运算,所以时间复杂度为O(m)。 1 #include <iostream> 2 #define LL long long 3 using namespace std; 4 5 LL 阅读全文
posted @ 2021-03-04 14:49 换甲 阅读(86) 评论(0) 推荐(0) 编辑
滚动数组
摘要:滚动数组是动态规划中常见的一种节省开销的优化开销的手段。 以打印输出斐波那契数列的前n项为例,需要分配长度为n的数组 #include <iostream> #define N 20 // using namespace std; int dp[N]; int main() { dp[0] = 1, 阅读全文
posted @ 2021-03-04 13:53 换甲 阅读(103) 评论(0) 推荐(0) 编辑

 

点击右上角即可分享
微信分享提示