随笔 - 21
文章 - 0
评论 - 0
阅读 -
3274
07 2021 档案
快速幂
摘要:好久没写博客了,今天来水一波。犹记得大一寒假时,我在洛谷刷题,见到了一种奇怪的题型,由于用到了很多的幂运算,最后的答案很大,要求输出其最后三位数字,我提交之后,爆了WA以及TLE,当时查看题解以及百度,说要使用快速幂取模处理,当时看了半天(真的有半天),看得一知半解,最后也没有搞懂。最近算法水平有所
阅读全文
动态规划基础之LIS问题
摘要:LIS:即给定一个数组,找出一个最长的单调递增子序列。例如一个长度为7的序列a={5,6,7,4,2,8,3},它最长的单调递增子序列为{5,6,7,8},长度为4. 利用动态规划思想,有两种方法可以解决LIS问题。 第一种就是与LCS问题结合,将给定数组a按从小到大排序得到数组b,求出a与b的最长
阅读全文
动态规划基础之LCS问题
摘要:LCS,即最长公共子序列。子序列的元素在原序列中的元素可以非连续,而子串的元素在原序列中的元素一定连续。LCS问题就是给定两个序列X和Y,找到它们的一个最长公共子序列。 例题如下 Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Me
阅读全文
动态规划基础之背包问题
摘要:01背包问题是最经典的背包问题,没有之一。 关于背包问题,我举过一个例子,有一天,阿里巴巴背着一个背包来到了山洞里,面对大量的金银财宝,他的背包却容量有限,他要如何选择呢?假如说这些财宝可以无限分割,例如是金粉,银粉,铜粉,他只要贪心地先放金,再放银,最后放铜,直到装满,那么如果这些财宝各有体积且无
阅读全文
动态规划基础之硬币问题
摘要:动态规划是一种算法思想,可以简单解释为将复杂问题分解为许多个子问题,在无后效性的前提下一一解决,最后得到原复杂问题的最优解。 1.最少硬币问题 有n种硬币,面值为v1,v2,....vn,数量无限。输入非负整数s,选用硬币,使其和为s。输出最少硬币的组合的数量。 易得其状态转移方程为ans[i]=m
阅读全文
二叉树
摘要:二叉树是一种特殊的树,每次分支不超过两部分。对于二叉树的存储,可以分为两种情况讨论。 1.对于完美二叉树而言,即除了最后一层以外每个节点都有两个叶子节点的二叉树,适合使用数组存储,因为我们容易发现若从上到下,从左到右从1开始为每个节点分配编号,对于每个叶子节点i,其左儿子编号为2*i,右儿子编号为2
阅读全文
并查集
摘要:并查集是一种用来管理元素分组情况的数据结构,可以高效地进行如下操作。 1.合并元素a和元素b所在的组。 2.查询元素a和元素b是否属于同一组。 并查集是使用树形结构实现的,不过不是二叉树。并查集通过根节点(族长)进行操作。 合并:从一个组的根向另一个组的根连边,这样两棵树就变成了一棵树,也就是把两个
阅读全文
前缀和与差分
摘要:前缀和与差分是最基础的算法,也是最简单的算法之一。不过它们是降低时间复杂度的有力算法,利用前缀和或差分进行预处理,往往可以将时间复杂度降低一个n的规模。给定一个数组a[n],设第i个前缀和为s[i],第i个差分为d[i],s[i]就是从第1个元素到第i个元素的数的总和,d[i]就是a[i]-a[i-
阅读全文
离散化问题
摘要:离散化,作为一种较为基础的算法,可以说极其常见。那么何为离散化呢?根据百度百科说法,离散化就是将无限空间的有限元素映射到有限空间上。通俗地说,就是在不改变数据相对大小的情况下,对数据进行缩小操作。举个例子,给定一串数据1,99,72,72,6,100.我们可以先对其排序,变为1,6,72,72,99
阅读全文
线段树(区间和)
摘要:给定一组数据(n个数据),进行m次操作,想要求某一段区间和,或者区间上同时加上或减去一个数。对于这种问题,采用最朴素的算法思想,求区间和的时间复杂度为O(mn),删改操作为O(mn^2),若使用前缀和预处理,可以将求区间和的复杂度降低至O(m),用差分预处理,也可以将删改的复杂度降至O(m)。但是如
阅读全文
LCA倍增法
摘要:树上问题中,有个相当著名而又较为困难的问题,即最近公共祖先问题(Least Common Ancestors),又简称LCA问题。我们先了解一下何为LCA吧。 LCA,即已知一棵有根树,求问两个节点的最近的公共祖先是哪个节点。 从最朴素的算法去思考,我们只要找到这两个节点的深度,先从最深的节点向上搜
阅读全文