![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 58
是挺秃然的齐齐哦
此人不懒,什么都写了
展开
-
C++并查集——食物链
并查集是一种用来维护集合的简单算法。因为其实现算法很简单,经常用于面试题。其实现原理是构造一棵树,其中在一个集合的元素都会储存在一棵树中。如果两个集合合并,可以将集合A放在集合B的节点,达到两个集合合并后所有元素的根节点都为同一个值即可。算法关键是构建一个函数find(),该函数用来找出该点的根节点的值。如果将A点加入到集合B中,只需将A点的根节点值修改成B集合根节点的值即可。#include<iostream>using namespace std;const int N原创 2020-11-20 23:00:34 · 2115 阅读 · 0 评论 -
C++Trie——最大异或数
Trie树其实就是将字符串或一串东西存储在一棵树上。举个栗子。假如我们存入了两串字符。会发现我们存储在这个树,其实有很多好处。Trie树最多的两个操作就是插入和查询。先来说说插入的好处,这里先上一道经典例题。我们这里是通过一个数组son[ ]来维护这棵树。这里我们用idx这个索引来标记,具体用途看下面代码。int cnt[N] , son[N][26];//idx相当于一个指引,如果没有到达最后的字符,那么就引导到第idx行//如果已经到达最后一个字符,那么久引导到cnt[idx],记录该字原创 2020-11-20 21:50:25 · 476 阅读 · 0 评论 -
C++算法——BFS
BFS我们称之为宽搜,通常可以用于解决最短,最小问题。不同于深搜,宽搜每次先把同一层的遍历一遍,若无正确答案再去遍历下一层,因此不需要用到递归,只需要用到循环即可。先来看一道经典例题:走迷宫解决走迷宫问题,我们可以用程序来模拟一下走迷宫,但不同人走迷宫,我们通过程序可以在一个位置从上下左右去尝试,直到找到正确答案。解决走迷宫问题,我们可以用程序来模拟一下走迷宫,但不同人走迷宫,我们通过程序可以在一个位置从上下左右去尝试,直到找到正确答案。但前提是向该方向走一步后,到达的点是否合法,因此要进行判断原创 2020-11-14 00:40:51 · 2474 阅读 · 0 评论 -
C++算法——DFS
DFS我们称之为深搜,通常解决一些最大最长或者所有可能的问题,一般用递归来实现。因为深搜基本上会遍历每一个结果,但暴力法不同在于,深搜可以通过递归中不满足条件,实现剪枝。我们先来看一道例题,感受一下深搜。思路其实比较简单,有点类似于穷举法。我们构建一棵数,每一层依次增加一个没有枚举的数,当到达底层的时候就是一个答案。比如我们先将第一个数填1,然后由于还有数未填入,继续深入到达下一层。下一层由于第一个数1已经枚举,我们枚举第二个数2。然后继续进入第三层,枚举第三个数3,由于已经把所有的数都枚举完,我原创 2020-11-14 00:05:23 · 16304 阅读 · 6 评论 -
贪心算法——区间合并以及覆盖问题
贪心算法的核心在于,只是注意当前的最优解情况,每次依次选择最优解,使得最终问题得到最优解。一般来说,贪心算法只能解决单峰问题。我们先来看一下题目。原创 2020-10-30 00:08:50 · 727 阅读 · 0 评论 -
动态规划——状态压缩DP——蒙德里安的梦想
状态压缩DP是我现阶段学的比较难的DP问题,其主要思想就是利用一个数来表示一种状态(通常使用二进制来表示)。我们先来看一下题目。根据做DP题的步骤,先进行状态表示。这里非常巧妙,我们设立一个 f[N][M] 的数组,其中 M 为 2^n 次方。f[i][j] 表示 i-1列的方案数已经确定,从i-1列伸出,并且第i列的状态是j的所有方案数。举个简单的例子,比如我们有5行,则我们用二进制表示5行中的空格和填充部分(0表示空格,1表示填充),则有 00000 , 00001 , 00100 … 。至于为什原创 2020-10-26 00:25:32 · 323 阅读 · 2 评论 -
动态规划——线性DP
线性DP相对于其他DP,思路清晰,只要想好递推式以及边界问题,问题大多数迎刃而解。空说无益,先来看看一道经典例题感受一下8。题目大概意思就是给定两个字符串,求出字符串 a[ ] 变成 b[ ] 的最小操作数。其中题目给定了三种操作方式:(1)删除操作,比如当 a[ 1 — i - 1 ]的字符与 b[ 1 — j ] 已经匹配好了,我们看向 a[i] ,如果此时若继续 a[ 1 — i ] 与 b[ 1 — j ]匹配,则执行删除操作,即删除 a[i](2)添加操作,当 a[ 1 — i ]已经原创 2020-10-20 11:49:01 · 141 阅读 · 0 评论 -
动态规划——区间dp
区间dp是dp问题中非常常见的类型,主要涉及类似于小船渡河,石子合并以及多个矩阵连乘等问题。解决方法也比较固定,先从dp的思想开始说起。dp的灵魂就是累计从小问题的最优解通过某种递归关系,一步步求得大问题的最优解。有点类似递归中归的过程。这里举一个石子合并的例子,先看题目。我们遇到dp问题,先想怎么进行状态表示。我们先用a [N] 数组来装这些石头的重量,如a [i]表示第i个石头的重量。这里我们用一个二维数组 f [i][j] ,表示第 i 个石头到第 j 个石头合并后的最小代价。好了,现在就该推原创 2020-10-14 21:54:52 · 206 阅读 · 0 评论 -
动态规划——完全背包问题
1213原创 2020-10-11 00:03:05 · 259 阅读 · 0 评论 -
C++算法——动态规划之——01背包问题
(1)01背包问题博客讲解原理:https://blog.csdn.net/qq_38410730/article/details/81667885?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160032924519725250312737%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=1600329245197252503127原创 2020-10-07 22:23:54 · 959 阅读 · 0 评论 -
C++算法——离散化
离散化的本质,是映射,将间隔很大的点,映射到相邻的数组元素中。减少对空间的需求,也减少计算量。其实映射最大的难点是前后的映射关系,如何能够将不连续的点映射到连续的数组的下标。此处的解决办法就是开辟额外的数组存放原来的数组下标,或者说下标标志,本文是原来上的数轴上的非连续点的横坐标。此处的做法是是对原来的数轴下标进行排序,再去重,为什么要去重呢,因为本题提前考虑了前缀和的思想,其实很简单,就是我们需要求出的区间内的和的两端断点不一定有元素,提前加如需要求前缀和的两个端点,有利于我们进行二分搜索,其实二分搜原创 2020-09-29 23:59:55 · 3508 阅读 · 3 评论 -
C++算法——差分
先看看差分函数void insert( int l , int r , int c ){ s[l] += c; s[ r + 1] -= c;}差分其实是前缀和的升级版,举个简单的例子操作就是利用前缀和,将目标范围内的数进行累加。我们来看一道例题。#include<iostream>using namespace std;const int N = 1e7 + 10;int q[N], s[N];void insert( int l , int r , in原创 2020-09-29 11:19:15 · 7917 阅读 · 4 评论 -
C++算法——高精度运算
(1)高精度加法// C = A + B, A >= 0, B >= 0vector<int> add(vector<int> &A, vector<int> &B){ if (A.size() < B.size()) return add(B, A); vector<int> C; int t = 0; for (int i = 0; i < A.size(); i ++ )原创 2020-09-25 22:53:31 · 719 阅读 · 0 评论 -
C++算法——排序和搜索
今天我们来说一下图的存储和算法。原创 2020-09-11 22:56:50 · 243 阅读 · 1 评论 -
C++编程小技巧(纯干货)
(1)当出现连续无限次输入的时候,可以使用下列表达式while(cin>>x){....}(2) 当想判断下次输入的值,可以采用下列表达式cin>>X>>y;while(x!=0 && y!=0){ ...... cin>>x>>y; //再次输入非常重要}...原创 2020-09-11 18:20:02 · 955 阅读 · 0 评论 -
关于哈夫曼树的理解
嘿嘿嘿原创 2020-06-09 21:52:49 · 856 阅读 · 1 评论 -
关于KMP算法的自我体会
关于KMP算法的自我体会大家好,是我一名刚学编程没多久的萌新,你们可以叫我齐齐。在刚学学编程时候,觉得编程语言很繁杂且容错率几乎为零。为此我通过刷题打码,努力增加对代码的熟悉度,终于挺过来第一个学期。在第二个学期,遇到了计算机的一个难点——算法算法是一种很神奇的东西,它能使时间复杂度从三次方,二次方降至一次方型。今天我就以我自己的理解分析KMP算法。我们先来对常规算法BF算法进行回顾:在不同的BF算法下,会通过对主串的每一个元素进行逐个匹配。比如在上图中,功能快捷键撤销:Ctrl/Comman原创 2020-05-20 17:22:37 · 1478 阅读 · 6 评论