算法基础课
文章平均质量分 92
肥肥饼
一只爱睡懒觉的程序媛
展开
-
算法基础课—贪心(二)排序不等式贪心、绝对值不等式贪心、推公式贪心
算法基础课—贪心(二)排序不等式贪心、绝对值不等式贪心、推公式贪心排序不等式贪心题目——排队打水思想证明模板代码绝对值不等式贪心题目思想模板代码绝对值不等式贪心题目思想证明模板代码贪心小结排序不等式贪心题目——排队打水有 n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?输入格式第一行包含整数 n。第二行包含 n 个整数,其中第 i 个整数表示第 i 个人装满水桶所花费的时间 ti。输出格式输出一个整数,表示原创 2021-06-09 12:58:16 · 391 阅读 · 0 评论 -
算法基础课—贪心(一)区间贪心、Huffman贪心
@[TOC]算法基础课—贪心(一)区间贪心、Huffman贪心区间贪心区间选点题目给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。输入格式第一行包含整数 N,表示区间数。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示所需的点的最小数量。数据范围1≤N≤105,−109≤ai≤bi≤109输入样例:3-1 12 43原创 2021-06-09 10:59:28 · 595 阅读 · 0 评论 -
算法基础课—动态规划(三)计数类DP、数位统计DP、状态压缩DP、树形DP、记忆化搜索
算法基础课—动态规划(三)计数类DP、数位统计DP、状态压缩DP、树形DP、记忆化搜索数位统计DP题目思想模板代码状态压缩DP蒙德里安的梦想思想模板朴素做法去除无效状态的优化写法代码朴素做法优化做法最短哈密顿距离题目思想模板代码树形DP记忆化搜索数位统计DP多用于统计数中出现某个数的次数关键:分类讨论题目计数问题给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数。例如,a=1024,b=1032,则 a 和 b 之间共有 9 个数如下:1024 1025 1026原创 2021-06-08 11:39:04 · 532 阅读 · 1 评论 -
算法基础课—动态规划(二)线性动态规划、区间动态规划
算法基础课—动态规划(二)线性动态规划、区间动态规划线性动态规划数字三角形题目思想模板代码最长上升子序列题目思想模板代码代码——记录规划方案最长公共子序列题目思想模板代码区间动态规划区间合并问题题目思想模板代码线性动态规划递推的顺序有模糊的线性对于这个二维矩阵,有明显的线性存储的,如是一行一行来存的数字三角形题目给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3原创 2021-06-07 10:10:01 · 419 阅读 · 1 评论 -
算法基础课—动态规划(一)背包问题
算法基础课—动态规划(一)背包问题背包问题概述01背包问题题目动态规划的关键朴素做法优化方法——滚动数组完全背包问题题目动态规划关键朴素做法优化做法再进一步的优化多重背包问题题目朴素做法关于不能采用完全背包的优化方法对多重背包进行优化的问题优化做法——多重背包的二进制优化分组背包问题题目动态规划优化做法背包问题概述多重背包问题——每个物品有有限个,si分组背包问题——每一组只能选一个01背包问题题目有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价原创 2021-06-05 21:30:42 · 264 阅读 · 0 评论 -
算法基础课—数学知识(六)容斥原理、博弈论
算法基础课—数学知识(六)容斥原理、博弈论容斥原理博弈论容斥原理集合数为奇数——正好偶数——负号枚举所有可能项——一般用位运算来做这样可以对应所有的选法从1- 2的n次方-1,将他们转换成二进制表示,0表示不选,1表示选,然后判断在判断第k位是不是1, i >> k & 1博弈论...原创 2021-06-04 09:56:15 · 212 阅读 · 0 评论 -
算法基础课—数学知识(五) 卡特兰数 及其常见问题应用
算法基础课—数学知识(五) 卡特兰数 及其常见问题应用关键满足条件的01序列题目卡特兰数模板代码卡特兰数问题问题一 满二叉树的个数问题二 电影购票问题三 进栈问题问题四 圆内连弦问题五 由n对括号形成的合法括号表达式的个数。问题六 n+1个数连乘,不同的乘法顺序数。问题七 求凸n+2边形用其n−1条对角线分割为互不重叠的三角形的分法总数.二叉搜索树——卡特兰数的递推式关键将问题转化成+1、-1序列,判断是否符合卡特兰数的条件或者符合卡特兰数递归式满足条件的01序列题目给定 n 个 0 和 n 个原创 2021-06-03 14:24:40 · 788 阅读 · 0 评论 -
算法基础课—数学知识(四)高斯消元、组合数
算法基础课—数学知识(四)高斯消元、组合数高斯消元——解方程组对于有解和无解的判断例子消元回代有无穷多个解的情况无解的情况算法思路题目代码模板自己的代码求组合数方法一模板自己的代码方法二题目模板代码方法三题目模板代码方法四题目模板自己的代码满足条件的01序列题目卡特兰数模板代码高斯消元——解方程组应用:在n的三次方时间内可以解n个方程组的解方法:矩阵的行列变换思想:先消元,再回代最后可以把矩阵变成一个上三角的形式对于有解和无解的判断如果0=非零,说明矛盾,肯定无解如果出现0=0,说明其中一原创 2021-06-03 13:31:27 · 377 阅读 · 0 评论 -
算法基础课—数学知识(二)欧拉函数、欧拉定理、费马定理、快速幂、扩展欧几里得算法、逆元
算法基础课—数学知识(二)欧拉函数、欧拉函数定义:公式计算定理的证明——用容斥原理算出来线性筛法求每个数的欧拉函数欧拉函数的应用——欧拉定理欧拉定理的特例——费马定理快速幂欧拉函数定义:互质是公约数只有1的两个整数,叫做互质整数。公式计算定理的证明——用容斥原理算出来思路:1-N中与N互质的个数——先对N进行分解质因数,可以用筛选法,去掉其所有质因数的倍数,剩下的就是互质的数对于筛法——容斥原理(先筛去所有素数的倍数,同时会发现可能两个素数倍数相同,却被筛去了,所以要诚信加回来,于是就有原创 2021-06-02 12:14:13 · 283 阅读 · 0 评论 -
算法基础课—数学知识(一)质数和约数
算法基础课—数学知识(一)质数和约数质数判断质数试除法优化后的试除法模板代码试除法分解质因数优化后的分解质因数模板代码筛质数埃氏筛法(时间复杂度O(nloglogn))时间复杂度的计算模板代码线性筛法模板代码约数试除法——求所有约数模板代码求约数个数模板代码求约数之和约数质数判断质数试除法从2到n进行遍历,看是否存在整数能整除,如果有则是质数,没有则不是优化后的试除法从2到根号n进行遍历,看是否存在整数能整除,如果有则是质数,没有则不是如果存在大于根号n的数能整除其,必一定存在另外一个与之配对原创 2021-05-29 23:42:35 · 480 阅读 · 0 评论 -
算法基础课—搜索与图论(四)最小生成树与二分图
算法基础课—搜索与图论(四)最小生成树与二分图最小生成树prim算法——最小生成树需要的数据结构算法思想模板自己的代码Kruskal算法需要的数据结构算法思想模板自己的代码二分图染色法判断二分图算法思想——染色法判断二分图模板自己的代码匈牙利算法——二分图的最大匹配需要的数据结构算法思想模板代码最小生成树应用——无向图稀疏图一般用堆优化Prim、稠密图用朴素版Prim在真实应用中,稠密图一般用朴素版Prim,稀疏图用Kruscalprim算法——最小生成树需要的数据结构1、邻接矩阵——g[]原创 2021-05-29 10:36:06 · 206 阅读 · 0 评论 -
算法基础课—搜索与图论(三)最短路问题——Dijkstra、bellman-ford、spfa、Floyd
@[TOC]算法基础课—搜索与图论(三) 最短路问题——Dijkstra算法、bellman-ford算法、spfa算法、Floyd算法最短路算法问题类型源点——起点,汇点——终点单源最短路,即起点是固定的,求其到任意点的最短路多源汇的最短路,给定任意两个点n点数、m边数稠密图——用朴素的dj。。稀疏图——堆优化的。。。存在负权边——如果求第k条边的,对边数有限制的,只能用Bellman算法其他情况存在负权边的,用SPFA比较好最短路问题难点——构建图如何根据题目的背景,构建图,构原创 2021-05-27 18:26:27 · 266 阅读 · 0 评论 -
算法基础课—搜索与图论(二)树与图的存储方式、及其深度优先搜索与广度优先搜索、拓扑排序
树与图的存储方式、及其深度优先搜索与广度优先搜索、拓扑排序树和图的存储方式邻接表代码模板树和图的深度优先搜索树和图的宽度优先搜索图的拓扑序列算法思想代码找出所有的拓扑序列算法思想代码树和图的存储方式树——无环联通图图——有向图、无向图邻接矩阵——二维矩阵、邻接表(常用)——每个节点开一个单链表(有点类似hash里的拉链表)邻接表类似于拉链法代码模板// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int h[N], e[N], ne[N], idx;原创 2021-05-24 21:20:15 · 207 阅读 · 0 评论 -
算法基础课—搜索与图论(一)DFS、BFS
算法基础课—搜索与图论(一)DFS、BFS、树、图的存储方式及搜索深度优先搜索 DFS核心——回溯和剪枝回溯剪枝算法思想整体结构算法模板——来自于排列数的题目排列数字题目算法思想代码n皇后问题题目方法一代码方法二代码宽度优先搜索 BFS最短性空间复杂度的对比适用情况核心BFS模板代码模板——走迷宫的宽度有限搜索走迷宫题目算法思想代码八数码问题题目算法思想代码深度优先搜索 DFS深度优先搜索DFS一直往深的搜,直到碰到叶节点就回溯到上一节点进行搜索核心——回溯和剪枝DFS ——递归实现——回溯和剪原创 2021-05-24 20:53:15 · 350 阅读 · 0 评论 -
算法基础课—数据结构(五) Trie树
算法基础课—数据结构(五) Trie树基本操作创建查找Trie字符串统计题目算法思想代码数据结构代码最大异或对题目算法思想代码总结用来高效存储和查找字符串集合的数据结构基本操作通过创建或遍历树可以满足存储和查找字符串的过程创建如果没有当前字符则创造一个分支,如果有则继续,结束单词有个标记查找一直往下遍历,看是否存在Trie字符串统计题目维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。共有 N 个操作,输入的字符串总原创 2021-05-20 11:44:31 · 153 阅读 · 0 评论 -
算法基础课—数据结构(六) 并查集
算法基础课—数据结构(六) 并查集基本原理与相关操作代码的结构进一步优化——路径压缩代码合并集合题目算法思想代码连通块中点的数量题目算法思想代码食物链题目算法思想维护到祖宗节点距离的并查集代码基本原理与相关操作时间复杂度O(1)基本原理:用树来维护集合根节点的编号就是当前集合的编号如果想知道每个元素属于哪个集合——找父节点直到根节点代码的结构一个一维数组p[N],用于存储其父节点初始:所有p[N]指向自身,一个点为一个集合集合合并:改变根节点的父节点集合查询,找到根节点的位置进一原创 2021-05-20 11:20:19 · 604 阅读 · 0 评论 -
算法基础课—数据结构(七)堆
算法基础课—数据结构(七)堆堆的性质:堆的存储堆的基本操作堆常用操作(均由down和up构成)堆排序算法思想:优势题目自己的代码模拟堆题目算法思想自己的代码堆的性质:完全二叉树每个根节点都小于他的左儿子右儿子(小根堆)堆的存储因为是完全二叉树,所以可以利用完全二叉树的性质去存储成一维数组从1开始存储左儿子 ——2x右儿子——2x+1堆的基本操作down——向下调整(每次和左儿子右儿子的最小值交换)根节点值变成6变成6后,6比3,4的最小值大,与3,4中的最小值交换,往下走up原创 2021-05-20 10:50:16 · 157 阅读 · 0 评论 -
算法基础课—数据结构(八) 哈希表
算法基础课—数据结构(八)—哈希表哈希表的作用——在什么时候会用到哈希表哈希表中需要解决的问题哈希表的两种方法拉链法思想哈希表的操作代码写法模板代码自己的代码开放寻址法算法思路:代码思路模板代码自己的代码字符串哈希方式核心字符串hash值的求法映射要注意的:这样构造的好处自己的代码哈希表的作用——在什么时候会用到哈希表把一个比较庞大的值域映射到一个比较小的值域。哈希表和离散化的区别在于,离散化可能是为了解决空间的问题,哈希表是为了解决时间的问题,更方便查找哈希表中需要解决的问题映射怎么选?即哈原创 2021-05-20 10:24:35 · 463 阅读 · 0 评论