随笔分类 - 算法
摘要:前提:如果一个问题可以拆分为多个等规模的子问题进行递归求解 则其时间复杂度满足master公式: T(n) = a * T(n/b) + O(n^d); 其中T(n)表示问题规模为n的母问题的时间复杂度 T(n/b)表示问题规模拆分为n/b的子问题的时间复杂度 a表示子问题在每次递归时的执行的次数(
阅读全文
摘要:1.异或运算的基本性质: 两个数的异或可以看做两个数进行不进位的加法(1).0^n = n, n ^ n = 0, 1^n = ~n (2).满足交换律:a^b = b^a 满足结合律:(a^b)^c = a^(b^c) (3).从(2)中可以推出,只要是同一批数进行异或,那么任意调换异或顺序,不改
阅读全文
摘要:快速排序:描述:一趟排序将数据分割成两个部分,左半部分和右半部分,其中右半部分的数一定比左半部分的数来的 更大,然后在对这两个部分分别继续这个排序过程(可通过递归进行),以此达到整个序列都为有序序列 时间复杂度:O(n*log n) 方法:(主要采用二分思想)1.设置两变量i,j;排序开始时:i=1
阅读全文
摘要:区间dp经典问题: 石子合并问题 问题描述:将n(1n200)堆石子绕圆形操场摆放,现要将石子有次序地合并成一堆.规定每次只能选相邻的两堆石子合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.(1)选择一种合并石子的方案,使得做 n-1次合并,得分的总和最小. (2)选择一种合并石子的方案,
阅读全文
摘要:区间dp 问题引入:给定长为n的序列a[i],每次可以将连续一段回文序列给消去,求最少要操作几次能把这段序列给 完全消除.分析:1.对于一段区间i--j,我们设其要完全消去的最少次数为dp[i][j],则:dp[i][j]=min(dp[i][k]+dp[k+1][j])(i<=k<=j)2.若a[
阅读全文
摘要:离散化:概念:把一些很离散的点个重新分配,使它们尽量集中.如在1e10的范围中取1e4个数据,如果不进行离散化,则要开辟1e10的空间,而实际上只要1e4的空间就可以装下每次取出的数据,所以可通过离散化来集中这些数据.离散化的本质就是建立一个映射关系,即第n大的数字对应是几,如一组数6,2,4,66
阅读全文
摘要:前缀和与差分:前缀和:即指某个序列的前n项和 差分:即前缀和的逆过程 1.一维前缀和与二维前缀和:一维前缀和:(1).预处理(O(n)),s[i]统计a[1]--a[i]的和 (2).查询(O(1)):要查从l--r的值的和即等于s[r]-s[l-1] 即:S[i]=a[1]+a[2]+...+a[
阅读全文
摘要:序列dp有关的一系列内容 1.LCS问题: 定义1:一个序列S,如果分别是两个或多个已知序列的子序列,且S是所有符合条件中的最长的,那么就将S称 为已知序列的最长公共子序列.所以如何用序列dp来得到最长公共子序列的长度即为所要解决的LCS问题. 补充:得到的最长公共子序列的长度可以用来做为判断两个字
阅读全文
摘要:二分搜索法:通过不断缩小解的可能存在的范围,从而得到求得最优解的方法. 二分搜索法查找符合值的操作思路:1.先将一批数排好序(后面的分析与题目应用默认升序) 2.进行二分查找,先找到符合条件的值(没有找到符合条件的值,就根据找出的值与条件的关系,通过二分来缩小范围,直到先找到符合条件的值)3.如果题
阅读全文
摘要://用二维dp解决完全背包问题(每种物品可以无限取,而不仅仅只有一个(物品同样不可分解))//题目见书挑战程序设计竞赛p57完全背包问题: //对于完全背包问题,和背包问题相比,我们一开始的考虑应该是在选择是否取物品的时候,背包问题我们 //只要考虑是取一件还是不取,而现在要考虑是取1-能取的最大件
阅读全文
摘要://二维dp动态规划解决01背包问题(固定重量内尽可能装价值高的物品(物品不可分解))://题目见书挑战程序设计竞赛P51的背包问题. //1.构造dp数组,明确各变量在问题中的实际含义 //分析:首先本题有三个量需要处理:第几个物品,重量,总共能获得的价值 //所以我们构造一个二维数组:dp[i]
阅读全文
摘要://位运算的基础知识及其应用 //基础知识://1.位运算的几种常见形式:&,|,>>,<<,^,~(所有位运算都是将数转成二进制进行按位操作)//2.对几种形式进行一个解释://&:表示按位与,其中有0出0,无0(即两个数都为1)出1//|:表示按位或,其中有1出1,无1(即两个数都为0)出0 /
阅读全文