高级算法学习
文章平均质量分 63
听大雪菜的课进行学习,记录知识。
魔法少女啊
人间温柔观察者
展开
-
DP算法1
DP101背包完全背包:每个物体有无限个多重背包1:有限个,会我们有多少个多重背包2:二进制优化分组背包问题01背包0,1背包定义:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。动态规划是不断决策求最优解的过程,「0-1 背包」即是不断对第 i 个物品的做出决策,「0-1」正好代表不选与选两种决定。状态f[i][j]定义:第 i个物品,背包容量 j(体积为j) 下的最优解(最大价值):当前的状态依赖于之前的状态,可以理解为从初始状态f[0][0] = 0开始决策,有 N 件原创 2022-03-28 20:23:22 · 799 阅读 · 0 评论 -
数学知识3
数学知识3进制范围进制可写位数高斯消元法求组合数1-(数字小)加法计数原理组合数2-逆元+费马-(数1-100000)求组合数3-数超级大,lucas定理高精度组合数-bigInteger卡特数进制范围一、基本数据类型的特点,位数,最大值和最小值。1、short -32768-32767基本类型:short 二进制位数:16包装类:java.lang.Short最小值:Short.MIN_VALUE=-32768 (-2的15此方)最大值:Short.MAX_VALUE=32767 (2的1原创 2022-03-27 19:30:29 · 262 阅读 · 0 评论 -
数学知识2
数学知识欧拉函数-求欧拉数线性筛-筛欧拉-欧拉数之和。快速幂运算快速幂求逆元扩展欧几里得算法欧拉函数-求欧拉数重要点:1----N中与N互制的个数1.先求质因数质因数公式的边界: for(int i=2;i*i<=n;i++){用质因数来使用公式进行求解某个数N的欧拉函数是一个整数:表示与N互质的个数1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。若在算数基本定理中:N=p1^a1*p2^a2*..Pk^ak,则:--》这个是需要使用分解质因子进行求解原创 2022-03-26 15:23:13 · 1165 阅读 · 0 评论 -
数学知识1
重点: 数学知识:1.数论-试除法:最简单的!- 质数/素数合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。与之相对的是质数,而1既不属于质数也不属于合数。最小的合数是4。-质数/素数定义:从2开始只包含1和本身的这两个约数质数的判定两个条件:<2 false% !=0缺点:约数成对存在的,变小时间。开平方 - 慢i*i<=n简单化简-试除法a|b--b除以a=整数,余数为0,b为被除数,a为除数说明d|n--n除以d=原创 2022-03-25 11:00:14 · 369 阅读 · 0 评论 -
搜索和图伦1
搜索深度优先搜索DFS-特点:执着人,一路到头,再回头。代码特点:回溯 剪枝数据定义 数组path-存储路径 boolean数组-st存储当前的数有没有被用过 递归-状态改变题目1:全排列问题代码:数据定义int path[n]//保存路径boolean st[N]//保存状态代码实现package 大学菜;import java.io.BufferedReader;import java.io.IOException;import java.io原创 2022-03-23 09:16:47 · 525 阅读 · 0 评论 -
哈希表-(数值+字符串)
哈希-数组数值1.拉链法--注意1。取模取成最小的质数-判断条件 * int j =100001; * int m=0; * while (m<1){ * if(panduan(j)){ * m++; * System.out.println(j); * j++; * }else {j++原创 2022-03-19 17:16:27 · 149 阅读 · 0 评论 -
Tire(字典树) -并查集(3种应用)-堆
Trie树作用:快速的【存储】和【查找】字符串集合的数据结构。辅助称呼:前缀树,多叉树结构:树有一个根节点。在每个串的结尾单词处进行标记。查找会更方便。835:维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。共有 N 个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母用代码实现:trie树Trie树中有个二维数组 son[N][26],表示当前结点的儿子,如果没有的话,可以等于++idx..原创 2022-03-18 18:04:52 · 751 阅读 · 0 评论 -
数组-链表(单链表,双链表)-栈-队列-kmp
数组模拟链表:更加方便,更加快捷,不需要新建数据结构。大部分都是这样写。单链表链表:两个数组,有头指针heade【】//存储当前节点的值next【】//存储当前节点指向的下一个位置,也是指针idx //表示当前节点的存储空间//一个节点存储两个东西://head头指针存储下一个位置ps:可以用O(1)的时间查到下一个点的位置,找不到前一个的位置。 输出时注意,不能按照顺序输出,要按照定义进行输出,未节点最后指向的是空集,也就是-1; for(int i = head; i原创 2022-03-16 10:13:03 · 1313 阅读 · 0 评论 -
差分(一维和二维)
差分: 一维差分:原数组:a1,a2,a3,…an;构造数组b1,b2,b3,…bn;关系:a1 = b1;a2 = b1+b2;b3 = b1+b2+b3;…bn = b1+b2+…bn;则利用b数组就会将a数组进行求解出来。如果a数组想要进行变动:只需要进行b数组的一些变动例如|____|__||a数组的[l,r]区间内部想要进行加c则需要全部进行遍历,但是如果是有差分数组,则,只需要给bl+c,则后面的全部就可以j加c,但是在r+1的地-c。模板:给区原创 2022-03-11 21:05:01 · 164 阅读 · 0 评论 -
高精度--java
大整数运算:1.大整数存储:应为栈式存储,因为如果按照123456789式存储,如果加一位则所有的位数都需要移动,时间消耗大按照987654321存储,则进位比较少,节省时间大整数相加–模拟人类的方式c++是需要进行自己写/ C = A + B, A >= 0, B >= 0vector<int> add(vector<int> &A, vector<int> &B){ if (A.size() < B.原创 2022-03-10 16:12:21 · 1403 阅读 · 0 评论 -
第一课 二分-查找区间-整数二分--浮点数二分查找区间
!!!二分法是用来查找区间范围的使用逼近的思想来求解 整数二分,细节多二分模版:bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mi原创 2022-03-10 11:21:20 · 332 阅读 · 0 评论 -
递归内部执行顺序--归并--逆序对的数量
逆序对数量一直不了解内部分治的调用顺序,因此画图调用题目:代码package 大学菜;import java.util.Scanner;public class 逆序对数量 { static int num= 100010; static int[] tmp = new int[num]; static long number =0 ; //pu public static int sort(int[] A,int l,int r){原创 2022-03-09 12:20:43 · 97 阅读 · 0 评论 -
第一课 分治-快排-归并
1.快排分治:先定数值x,再利用数值比较进行递归排序原地排序,比较节省空间。1.快排:分治一层一层的分开使用相同的方法进行java:import java.io.IOException;import java.util.Scanner;public class 快排 { //分治法进行排序操作,注意边界问题 public static int[] quicksort2(int[] A,int l,int r){ //判断边界,如果就一个数据 .原创 2022-03-07 22:13:43 · 587 阅读 · 0 评论