![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
摇滚牛奶
这个作者很懒,什么都没留下…
展开
-
算法基础--bfs
bfs借助一个队列将头结点放入队列,拿出队列头,循环放入与头相连接的结点。queue<Node> mq; while(!mq.empty()) { Node c=mq.front(); if(c是要找的点) 结束 <!-- 循环判断是否相连 --> <!-- visited判重 --> mq.pop() } 判重时visited要记录所有的维度原创 2017-10-28 11:43:54 · 133 阅读 · 0 评论 -
算法基础--dfs
dfs dfs:搜索和遍历算法:访问V(走了这一步后发生了什么),对所有邻接V的没访问过的U递归调用dfs(U) 图的表示:邻接矩阵o(n2):简单,邻接表o(n+e):适合边少的图 城堡问题:用遍历算法染色。图已经包含在城堡数组中,不需要额外表示 踩方格:受步数n控制的dfs,因为是求所有路径而不是简单的遍历所以在回退时要把访问标记清空。 例题: 7-1红与黑:应用dfs,开数组check记录是否原创 2017-10-28 11:44:48 · 236 阅读 · 0 评论 -
算法基础--C++OJ
tips: 位与0异或是本身,与1异或是反 一般输入都是合法的 char op=cin.peek()//看第一个字符,不取走。char c=cin.get()//取走流里第一个字符 浮点数比较要用减法 oj重定向freopen(“filename”,”r/w”,stdin),注意提交时注释. 不定多组数据:while(cin>>a) 不定多行:cin.getline(s,len)原创 2017-10-28 11:46:00 · 326 阅读 · 0 评论 -
算法基础--递归
递归: 将问题分解成相似的子问题 递归函数:内存中开辟了大量函数栈 汉诺塔: 化简:将n个从a移动到c写成:Hanoi(n,a,b,c) 将n-1个从a移动到b:Hanoi(n-1,a,c,b)//子问题 将第n个移动到c 将n-1个从b移动到c:Hanoi(n-1,b,a,c)//子问题 其中第13步都与原问题相似,可以通过递归实现 N皇后: 分析:8皇后能用8重循环接,N皇后?递归来实现原创 2017-10-28 11:46:30 · 317 阅读 · 0 评论 -
算法基础--分治
分治 分成两部分,分别处理之后,处理跨越两侧的 归并排序:O(nlogn) 快速排序:一般情况O(nlogn)最差情况下O(n2) 输出前m大数:快排分区的应用O(n+mlogm) 利用快排分区思想,完成使m个数移动到右侧后O(n),对右侧数组排序即可 求排列的逆序数:归并合并应用O(nlogn) 分治思想和递归类似,只是把问题更针对的分成了两个基本相当的问题,而递归一般是把问题逐层缩小,所以在原创 2017-10-28 11:47:30 · 147 阅读 · 0 评论 -
算法基础--穷举
穷举 找到一个能够穷举的有限集合,适当的去掉一些没必要的项,完成穷举 熄灯问题:找到一种开关组合使灯全部熄灭 分析: 有限集:一个开关只有01两态,循环n次即可 直接:穷举所有开关状态(0或1),量太大 优化:根据题意,当第一行(列)开关确定后,为了使最终符合结果,那么下一行的开关也就唯一确定了(为了使上一行全熄灭)。 因此只需要穷举第一行的所有状态,确定所有开关的状态后,判断最后一行灯的原创 2017-10-28 11:48:42 · 266 阅读 · 0 评论 -
算法基础--动态规划
动态规划 记忆型递归:在递归实现中用空间存储中间的计算结果,如果已经存在中间结果就直接取出使用。 递归转成递推:递归符合自然直觉从上层不断化简成相似子问题。递推从最底层开始不断推得问题的解。 空间优化:用最少的空间保存中间结果。(可以覆盖掉不需要的中间结果)。例:三角最大路径中可以把存储结果的二维数组优化成一位数组。甚至可以在优化用存放原始数据的地方来存储中间结果。 例题1最长上升子序列:考虑以每个原创 2017-10-28 11:47:01 · 265 阅读 · 0 评论