
《算法笔记》胡凡
主要记录《算法笔记》里的一些知识点
爱幻想-hjyp
遇到坎就得迈过去
展开
-
《算法笔记》动态规划
目录概念什么是动态规划动态规划的递归写法和递推写法最优子结构分治与动态规划的区别贪心与动态规划的区别无后效性最大连续子序列和概念什么是动态规划动态规划,是一种用来解决一类最优化问题的算法思想。动态规划的思想就是将一个大问题转化为若干个子问题,但是子问题必须具有重复子问题和无后效性,不然就是分治了;此外动态规划问题还必须满足最优子结构和重复子问题。每求出一个子问题就把这个子问题的结果保存下来...原创 2020-04-27 17:05:01 · 368 阅读 · 0 评论 -
《算法笔记》图
目录图的存储方式(邻接矩阵和邻接表)图的遍历(BFS和DFS)图的存储方式(邻接矩阵和邻接表)邻接矩阵:邻接矩阵是一个方阵,行数 = 列数 = 节点元素个数;可以较方便的存储节点间的权值,但是耗费空间,1000 * 1000 以上就不要用了;邻接表:每一个元素都有一个数组,数组存与他相连的节点id,如果存权值的话,需要放结构体,可以用 vector 实现;图的遍历(BFS和DFS)图的...原创 2020-04-20 17:28:30 · 209 阅读 · 0 评论 -
《算法笔记》堆
目录堆的常用操作(新建堆,插入元素,删除堆顶)堆排序堆的常用操作(新建堆,插入元素,删除堆顶)理论:1、downAdjust(low,high)的作用是调整这个闭区间范围内的元素,使其满足堆的性质;调用此函数的前提是除了low之外,其他节点满足堆的性质;2、createHeap()在建堆时是倒着从第一个非叶节点元素开始调用downAdjust();3、deleteHeap()是将最后一个...原创 2020-04-17 12:30:26 · 181 阅读 · 0 评论 -
《算法笔记》并查集
题目并查集并查集#include <iostream>#include<vector>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int maxn = 300;int father[maxn];//存储父节点i...原创 2020-04-17 10:29:11 · 164 阅读 · 0 评论 -
《算法笔记》树与二叉树
目录普通树树的理论知识二叉树满二叉树和完全二叉树定义完全二叉树的性质二叉树的四种遍历(先序,中序,后序,层次)给定中序和另一个序,还原二叉树普通树树的理论知识1、没有节点的数称为空树;2、树的层次遍历从根节点开始算起,根节点为第一层;3、树中节点的最大度数称为树的度;4、n个节点的树,边数一定是n-1;满足连通,边数等于顶点数减一的结构一定是一棵树;5、节点的深度是指从根节点(深度为...原创 2020-04-09 16:20:41 · 116 阅读 · 0 评论 -
《算法笔记》DFS、BFS
目录背包问题(不剪枝)背包问题(剪枝)求解最优子序列问题背包问题(不剪枝)问题描述:给你一些物品,以及这些物品的重量和价值,求在不超过最大重量的前提下所选物品的最大价值#include <iostream>using namespace std;const int maxn = 30;int n, V, maxValue = 0;//n代表物品数量,V代表最大重量, m...原创 2020-04-07 15:05:19 · 208 阅读 · 0 评论 -
《算法笔记》链表
目录动态链表的操作(增删改查)静态链表动态链表的操作(增删改查)链表一般是带头结点的链表,头结点并没有数据;遍历链表时,先令p = head - > next,,只要p非空,就可以一直循环;删除链表元素时,需要两个指针,一个指向将要删除的元素,另一个指向删除元素的前驱;增加元素时,要先找到目标元素,然后新建一个节点,在这个目标元素的后面加上新建节点#include <io...原创 2020-04-04 18:21:38 · 151 阅读 · 0 评论 -
《算法笔记》栈和队列
模拟计算器#include <iostream>#include<vector>#include<string>#include<queue>#include<stack>#include<map>using namespace std;struct node { int num; char o...原创 2020-04-03 10:54:15 · 114 阅读 · 0 评论 -
《算法笔记》 STL
目录stringqueuepriority_queue自定义优先级string string s1 = "hejianfei"; cout << s1 << endl; //插入字符串 s1.insert(1, "wo"); cout << s1 << endl; s1.erase(s1.begin(...原创 2020-04-02 16:38:37 · 215 阅读 · 0 评论 -
《算法笔记》 最大公约数,最小公倍数,素数,分数运算,质因数分解,大数加减法
目录辗转相除法求最大公约数求最小公倍数分数的加减乘除辗转相除法求最大公约数递归表达式:gcd(a, b) = gcd(b, a % b);递归结束条件:b == 0, 0与任何数的最大公约数是这个数本身;#include <iostream>#include<string.h>#include<cmath>#include<stdlib.h...原创 2020-03-30 11:58:56 · 405 阅读 · 0 评论 -
《算法笔记》随机选择算法
目录找到第K大的数找到第K大的数思想:借助于快速排序的randPartition()函数,随机选择一个数,以它为主元将序列划分为两个子区间;如果K 大于此主元的下标,说明第K大的元素在右区间,则递归寻找右子区间;如果K 小于此主元的下标,说明第K大的元素在座区间,则递归寻找左子区间;#include <iostream>#include<string.h>...原创 2020-03-29 10:23:35 · 329 阅读 · 0 评论 -
《算法笔记》二分查找
目录二分查找(非递归实现)二分查找(递归实现)查找第一个大于目标值元素的下标大于目标值的第一个元素下标在一个有序数组中查找满足任意条件的第一个元素二分法的应用二分查找(非递归实现)二分查找的前提是有序,并且每次查找的范围都是闭区间#include <iostream>#include<string.h>#include <algorithm>usi...原创 2020-03-28 12:38:30 · 208 阅读 · 0 评论 -
《算法笔记》贪心算法
理论知识贪心是用来解决一类最优化问题,并希望由局部最优策略来推得全局最优结果的算法思想;贪心算法适用的问题一定满足最优子结构问题,即一个问题的最优解可以由他的子问题的最优解有效的构造出来。开区间贪心问题每次选取最晚的开始时间或者每次选取最早的结束时间#include <iostream>#include<string.h>#include <algor...原创 2020-03-26 12:02:05 · 386 阅读 · 0 评论 -
《算法笔记》递归和分治
目录求斐波那契数列(递归)求全排列(分治)八皇后问题(暴力枚举法)八皇后问题(回溯算法)求斐波那契数列(递归)#include <iostream>#include<vector>#include<string.h>using namespace std;int F(int a){ //递归结束条件 if(a == 0 || a ==...原创 2020-03-26 11:10:40 · 177 阅读 · 0 评论 -
《算法笔记》 排序
目录排序排名的实现整数散列字符串hash初步排序选择排序 :选择排序是从前往后排,每次选取待排序区间的最小值与目标值交换,待排序区间是闭区间插入排序:插入排序也是从前往后排,每次从后往前枚举已有序部分来确认插入位置//选择排序 for(int i = 0; i < cnt; i++) { int k = i; //k记录未排序区间最小值的下标 ...原创 2020-03-26 09:55:10 · 184 阅读 · 0 评论 -
《算法笔记》系列一
基本数据类型int: 绝对值在10^9范围以内的整数,%d;long long : 绝对值在0 ~ 10^18以内的整数,超过10^10 就要用long long 了;float : 有效精度 6 ~ 7 位;double: 有效精度 15 ~ 16 位;scanf和printf函数1.scanf对其他格式符的输入是以空白符为结束判断标志的,%s 以回车或空格作为结束符,只有 %c ...原创 2020-03-24 17:35:26 · 157 阅读 · 0 评论