
算法
二十七º
嘿咻嘿咻!
展开
-
KMP算法
注:这篇博客不是纯讲解类博客,只是个人学习记录。智商下线越来越严重了,一个算法快看了一天,这还没算上课堂上看的时间,我太复杂了。KMP算法是用来解决字符串的匹配问题的。假定现在有两个字符串,一个文本串text,一个模式串patten。现在要求我们判断模式串pattern是否是text的字串,该怎么做呢?pattern要想是text的子串,必须在text中找到一段与pattern完全相...原创 2019-10-24 17:02:17 · 178 阅读 · 0 评论 -
排序算法总结三----选择排序、堆排序
选择排序选择排序同冒泡排序一样,在时间复杂度方面相比其它优秀排序算法无法比拟,冒泡排序差不多已经是属于烂大街的排序算法了,人人都会,所以我也就没打算介绍,选择排序本来也是如此打算,但细细一想,诶,选择排序是什么来着,这才发现选择排序怎么实现的我已经给忘了!所以本着温故而知新(纯属瞎扯)的想法,接下来再来回顾一下选择排序。1.个人理解选择排序的算法思想十分简单:从头至尾扫描序列,找到一...原创 2019-09-12 13:54:32 · 194 阅读 · 0 评论 -
排序算法总结二----归并排序、快速排序
归并排序1.个人理解归并排序(merge-sort)是分治法的一个典型应用。它主要是利用分治的策略将数据序列划分为多个子序列,先使子序列内部有序,再利用递归法使子序列间相互有序,最终得到完整的有序序列。从上面的概括性描述中我们大致可以得到完成一个归并排序算法的两个基本步骤:一、递归拆分序列并排序;二、合并子序列。怎么理解这两步呢?对第一步来说,拆分到什么程度为止呢?对第二步,...原创 2019-09-10 15:43:53 · 562 阅读 · 0 评论 -
排序算法总结之插入排序、希尔排序(Python、C++、java实现)
这个学期准备重新彻底深入地再学习一遍算法,先从最基本的排序算法开始。直接插入排序1.个人理解插入排序的本质是从第二个元素开始,每次插入一个元素,每插入一个元素就把它放置在一个正确的位置,注意是当前序列的正确位置,怎么理解呢?即对于某个元素来说,它可能在插入第x个元素时在某个位置刚好构成升序序列,但当插入第x+1个元素时,它的正确位置可能也就随之变化了,但插入排序就是这样一个不断调整每个...原创 2019-09-04 18:56:09 · 589 阅读 · 0 评论 -
位运算总结
众所周知,任何一个程序中的所有数值在计算机内存中都是以二进制的形式存储的。位运算就是直接对整数在内存中的二进制位进行操作,由于是直接在数据的原始储存形态上进行操作,因此巧妙地使用位运算可以帮助我们提高程序运行的效率,同时使编写出的程序更加优美。一、位运算符在学习位运算的各种使用技巧之前,先来认识一下有关位运算的几种位运算符。&(and) :按位与运算。|(or) :按位或运算。...原创 2019-08-26 13:49:03 · 1308 阅读 · 1 评论 -
背包问题 知识点与题型总结
动态规划中背包问题可以说非常常见,初学以为它很简单,然而很快就在各种题目中崩溃了,打着背包的标签,然而却很难让人想到用背包去做(好吧,是很难让我)。在经过最初的懵逼绝望到现在略有所感,想着赶紧总结一下,也好理一理思绪。一、01背包这个没啥好说的,01背包并不难,它的动态转移方程也很好理解。唯一需要注意的就是一般题目是不会问的那么裸的,有时候题目气人就气在你根本就没想到这是可以用01背包做出来...原创 2019-08-23 16:02:17 · 745 阅读 · 0 评论 -
最小生成树
<前导>最小生成树必须包含图中所有顶点,且边也来自图中,并使树中的边权之和最小;最小生成树是树,满足边数等于顶点数减一,且树内一定不会有环;对任意一个图来说,最小生成树可以不唯一,但其边权之和一定是唯一的;最小生成树是针对于无向图来说的;求解最小生成树有两种算法:prim算法、kruskal算法;<prim算法>与最短路径不一样,树可以有很多分支,因此只需...原创 2019-07-24 13:12:21 · 280 阅读 · 0 评论 -
最短路径
<前导>这里回顾四种计算最短路径的算法,分别为:Floyd算法;Dijkstra算法;Bellman-Ford算法;SPFA算法;<Floyd算法>Floyd算法的实现非常简单,直接看代码:int d[maxn][maxn];//d[i][j]表示顶点i、j之间的最短距离int inf=99999999;for(int i=0;i<maxn;i...原创 2019-07-24 13:10:44 · 218 阅读 · 4 评论 -
图的遍历
<前导>1.图的定义这里就不再赘述,只需要记住图分为 有向图 与 无向图;2.存储图的方式:邻接矩阵、邻接表;其中,邻接矩阵以二维数组的方式存储,适用于预备存储的图顶点数目不太多的情况;邻接表可以用一个 vector< typename> 型的数组来实现,邻接表不仅适用于顶点较多的情况,同时在顶点数与边数理想的情况下邻接表相比于邻接矩阵能够在很大程度上降低代码的时间...原创 2019-07-24 13:05:31 · 173 阅读 · 0 评论 -
高精度数值运算
我们都知道,int型变量占四个字节,取值范围在 -2147483648~+2147483647 之间,大致范围是 -2* 10^9 ~ +2* 10^9 ,如果这个范围仍不够我们的需求,可以使用 unsigned int型,它的范围会比 int 型大一倍,如果还无法满足,还可以考虑使用 long long(大致范围在 -9* 10^18~ +9* 10^18)或者 unsigned long lo...原创 2019-04-24 18:08:40 · 593 阅读 · 0 评论 -
怎样求素数与其相关(基本)
我们经常可能会遇到这样的题目,它要求我们求出100以内的素数表,或者说给定一个数,得到它的质因子乘积和,比如,6=2* 3,8=2* 2* 2等等,这里的2以及3,就都是素数,要想解决这类问题,就不可避免地要实现求素数这个程序,下面就来具体讲解一下。一般求素数:思路:对每一个数进行判断,判断是素数返回一个值,不是的话再返回另一个值,故这里有一个判断函数,另外还要有一个包装素数的函数,即若一个...原创 2019-04-24 13:26:18 · 203 阅读 · 0 评论 -
数组与数字之间的转换
我们在练习编程题目的时候,有的题目可能会涉及到数组与数字之间的转换。意思就是说:给你一个整型数字,通过转换把它存储在数组中,或者,给你一个数组,把数组中的数排序之后组合成一个整型数据输出出来,这类问题并不难,稍微思考一下相信我们都可以做得出来。比如这个例子:给定一个四位整数n(1000<=n<=9999),对n的所有位数字排序之后输出其最大值和最小值。样例输入:95...原创 2019-04-22 14:04:24 · 10349 阅读 · 2 评论