随笔分类 - 7_录播课
摘要:算法与数据结构 8.2、过河卒-搜索解法取正 一、总结 一句话总结: 过河卒搜索解法取正就是将过河卒递推表达式中负数的情况转化成正数的情况,可以通过给图上的每个点加上一个数来实现,这样就少了很多负数的判断,并且对结果也没有影响 1 #include <iostream> 2 #include <cs
阅读全文
摘要:算法与数据结构 8.1、过河卒-搜索解法 一、总结 一句话总结: 过河卒搜索的解法可以先思考没有马的简单情况,有马的情况,只是递归的终止条件从起点变成了起点或者马控制的区域 #include <iostream> #include <cstring> using namespace std; int
阅读全文
摘要:算法与数据结构 7.3、进阶跳台阶 一、总结 一句话总结: A、对于这些递推规律一眼看不出的问题,我们可以枚举前几项来找规律, B、本题(进阶跳台阶)中,我们枚举前几项之后,轻松发现数字规律f(n)=2^(n-1),递推表达式f(n)=f(n-1)+f(n-2)+...+f(1)+1 #includ
阅读全文
摘要:算法与数据结构 7.4、变态跳台阶 一、总结 一句话总结: 1、变态跳台阶的问题有了之前跳台阶和进阶跳台阶的问题做铺垫,递推表达式非常好想:f(n)=f(n-1)+f(n-2)+...+f(n-k), 2、根据f(n)=f(n-1)+f(n-2)+...+f(n-k),所以我们需要知道前k项,从而确
阅读全文
摘要:算法与数据结构 7.2、跳台阶-高精度加法 一、总结 一句话总结: a、这个跳台阶的问题里面没有取模,n大概40多的时候结果就超过int了,而本题n等于5000,所以要用高精度, b、而因为递推关系式f(n)=f(n-1)+f(n-2)里面是加法,所以用高精度加法 1 #include <iostr
阅读全文
摘要:算法与数据结构 7.1、跳台阶 一、总结 一句话总结: 跳台阶的问题,枚举前几项之后,就找到规律f(n)=f(n-1)+f(n-2),也就是斐波那契数列 #include <iostream> #include <cstring> #include <algorithm> using namespa
阅读全文
摘要:算法疑难(c++实现) 3、高精度加法 一、总结 一句话总结: A、高精度加法的原理就是小学学的竖式加法的操作,只是编程实现而已,输入的话,就用字符串 B、但是计算的时候,我们可以用数组,数组中的每一位存储一个数字,相加就逐位相加,然后进位就好 #include <iostream> #includ
阅读全文
摘要:算法与数据结构 6.8、斐波那契数列-矩阵快速幂 一、总结 一句话总结: 斐波那契数列的矩阵快速幂的解法,也就是将递推表达式化成矩阵的幂操作和乘法操作,利用快速幂,可以得到O(logn)的解法 1 #include <iostream> 2 #include <cstring> 3 using na
阅读全文
摘要:算法疑难(c++实现) 2、矩阵乘法 一、总结 一句话总结: 矩阵乘法就是按照矩阵相乘的规律,一步步来做的,也就是拿矩阵a的每一行乘以矩阵b的每一列,并且把矩阵a的每一行里面的每一个元素都和矩阵b里面每一列的每一个元素都一一相乘 Matrix multiply(Matrix a,Matrix b){
阅读全文
摘要:算法疑难(c++实现) 1、快速幂 一、总结 一句话总结: 比如在求a^11的时候,快速幂就是利用11的二进制1011,也即11=2º×1+2¹×1+2²×0+2³×1=1+2+8,将a^11转化为a^1*a^2*a^8,从而用O(logn)的时间复杂度求解 #include <iostream>
阅读全文
摘要:算法与数据结构 6.7、递推和递归的关系 一、总结 一句话总结: 递归元素之间的关系式就是递推表达式,或者说递推可以用递归来实现,当然递推也可以不用递归来实现,比如用普通循环来实现 1、递推和递归主要作用分别是什么? 递推主要指是找规律来找到递推表达式,从而求解问题,是一种解决问题的方式 递归主要指
阅读全文
摘要:算法与数据结构 6.6、斐波那契数列-记忆化递归 一、总结 一句话总结: 记忆化递归,就是把已经计算的中间状态保存下来,下次需要的时候就直接拿这个结果,就避免了递归中的重复计算中间状态 #include <iostream> #include <cstring> using namespace st
阅读全文
摘要:算法与数据结构 6.5、斐波那契数列-递归解法 一、总结 一句话总结: 递推法的递推表达式就是递归的各个元素之间的关系,所以递推表达式明确之后,递归的代码也就特别好写了 #include <iostream> using namespace std; const int mod=1000000007
阅读全文
摘要:算法与数据结构 6.4、斐波那契数列-三个变量 一、总结 一句话总结: A、斐波那契数列的三个变量解法,我们将f[3]用3个变量a、b、c来代替,这个时候就不能通过取模(%3)来自动变换位置了 B、这个时候我们可以保留f(n)和f(n-1)来做下一轮的f(n-1)和f(n-2) #include <
阅读全文
摘要:算法与数据结构 6.3、递推和动态规划的关系 一、总结 一句话总结: 动态规划可以看做是一种特殊的递推,动态规划可以看做保存中间状态(中间结果)的递推 /* 上述代码也就是这个题目动态规划的写法 动态规划里面有状态,状态转移方程 递推里面初始值,递推表达式 其实动态规划里面的状态转移方程,就是递推表
阅读全文
摘要:算法与数据结构 6.2、斐波那契数列-滚动数组优化 一、总结 一句话总结: a、因为递推表达式f[i]=f[i-1]+f[i-2]中只用到了f[i]、f[i-1]和f[i-2]三个元素,所以可以用含有三个元素的数组来优化 b、滚动数组的代码修改也很简单,直接在递推表达式有i的位置%3即可,f[i%3
阅读全文
摘要:算法与数据结构 6.1、斐波那契数列-递推解法 一、总结 一句话总结: 波那契数列递推的关系式F(n)=F(n-1)+F(n-2)已经有了,所以明确一下循环的边界条件,递推的代码就很好敲了 #include <iostream> using namespace std; const int mod=
阅读全文
摘要:算法与数据结构 5、递推 一、总结 一句话总结: 递推算法就是对于一个问题,我们找到它数学对应的递推表达式,也就是相邻几项的关系。 递推算法就是对于一个问题,我们找到它数学对应的递推表达式, 也就是相邻几项的关系。 递推算法避开了求通项公式的麻烦,把一个复杂的问题的求解, 分解成了连续的若干步简单运
阅读全文
摘要:算法与数据结构 4.9、最大子段和-dp空间优化 一、总结 一句话总结: 在最大字段和的动态规划的解法的代码中,我们发现用来做动态规划的数组f在代码中只用到了f[i]和f[i-1],所以我们可以用只有两个元素的滚动数组来优化f数组 /* 我们来看一眼代码: 代码中用到a数组位置除了a[1]这个固定的
阅读全文
摘要:算法与数据结构 4.8、最大子段和-贪心和dp区别 一、总结 一句话总结: A、最大字段和的贪心解法就是只考虑当前对于a[i]最优的情况,是选择s[i-1]还是不选择s[i-1]来得到局部最优解 B、最大字段和的动态规划解法就是在全局统筹的基础上,找到规律,通过规律设置好状态,找到状态转移的方程 二
阅读全文

浙公网安备 33010602011771号