随笔分类 - OI / 一本通
摘要:Floyd算法 求图上i,j任意两点的最短路,按小图到全图的思想 想想一个图中所有灯都是灭的,逐个点亮灯,点亮第k盏灯时,用k重新更新i,j的最短路 代表已经用编号1~k的点来更新i,j的最短路径了 转移方程 $dp[k][i][j]=min(dp[k-1][i][k
阅读全文
摘要:算法理解 最小生成树用到了一个贪心策略:图上最小的边一定在最小生成树上(MST),证法选取三个点,手模一下,很显然 Kruskal算法 最小的边一定在MST上,每次选取最小的边,添加到MST中,再判圈,若加入这条边形成圈,则不合法,可以用并查集实现,复杂度瓶颈为排序 代码
阅读全文
摘要:算法理解 维护两个点是否能到达,于是将互相能到达的点用其中一个点来代表4 T1: 板子 T2: 带权并查集简化,用dis来代表一个点到其中并查集中的头的距离,注意dis最开始应赋值为0,因为考虑当这个点直接与代表元素相连时,如果重复find该元素,dis[fa]会被加很多次,只有当其为0时才能解决问
阅读全文
摘要:算法理解 将一个字符串的每一位对应一个深度,每个字符对应一个节点,有一堆这样的字符串于是就构成了一棵树 如何存储树呢? 如果按照树的大小开点,有n层,一共要开 个点,一定是不行的,考虑一种类似于链表的思想,如果要开一个点,就进行编号,然后对应26条边分别存下一位的标号,注意要开 \
阅读全文
摘要:写在前面 喜报:听了四遍都没学懂的KMP算法,终于在 gyy 大佬的耐心讲解下搞懂了,大佬orz!!! 因为有ybt,所以直接在上面写吧 正文 kmp算法本质上就是对模式串(要匹配的子串 两个串中短的那个 )中很多重复的前缀和后缀索引起来,使得在一个地方失配了也不要紧,不用重新来的算法(看不懂不要紧
阅读全文
摘要:算法理解 将一个字符串,转化成数字,这样可以省去一个一个字母比较的复杂度。 数位哈希 将一个字符串中的一个元素看成一位数,把整个字符串,看成是一个p进制数,由于可能这个字符串对应的数太大了,所以我们需要取模运算,但是有可能就会有两个不一样的字符串数值相等,就是哈希冲突 取模有两种方式,自然溢出,手输
阅读全文
摘要:概念理解 c风格字符串 字符数组大小比字符串多一个 char s[6]={'H','e','l','l','o','\0'}; char s[]="Hello"; 用法 1.存储方式及赋值 '\0' 占用存储空间,不计入长度 作为变量使用时,不可 s="hellow" s1=s2 只可以逐个字符赋值
阅读全文
摘要:算法理解 从一个点出发,遍历它的所有相邻点,一层一层往下遍历 T1:(30min) bfs注意起点不一定在左上角,四个方向都要走 T2:(40min) bfs注意山峰山谷有一个很重要的条件,周围的所有点高度必须大于或小于山峰山谷的高度 T3:(3h+) 比对与每一种情况(x,y,c1,c2任意一位不
阅读全文
摘要:算法理解 将每种状态看成一个节点,基于树上的搜索 剪枝技巧 正确,准确,高效 1.优化搜索顺序 2.排除等效冗杂 3.可行性剪枝 如果前面是死胡同,就不要再走了 4.最优性剪枝 当前代价超过搜到过最优的答案 5.记忆化 T1: 暴力搜索,一半的拔河人数分配情况 T2: 暴力搜索,没有剪枝 T3: 卡
阅读全文
摘要:算法理解 二分用于解决答案具有单调性问题(经典最大值最小问题),是一个好的入手点,用一个log的复杂度,将求解答案转化成了判断答案是否合法 实数域上的二分 两种方法:确定精度eps,固定枚举次数,一般后者精度大于前者 T1: 二分最大值,注:如果有一个数本身就大于二分答案,则答案肯定错误,证明:考虑
阅读全文
摘要:算法理解 每次做决策时总是采取当前最优策略,从局部最优到整体最优 贪心的证明 一般使用反证法,证明这样做是不劣的 贪心的特征 1.贪心选择特征 每次选择可能依赖于以前的选择但不依赖于后面的选择,要证明它,就要证明它满足局部最优到整体最优,好像又证回去了 2.最优子结构性质 一个问题的最优解包含其子问
阅读全文
摘要:算法理解 从已知条件(通过对问题分析及化简后得出的)出发,逐步推出中间过程,进行若干步可重复性计算,逐步推出中间步骤和结果 分为以下两种: 1.顺推:从已知到问题 2.逆推:从问题到已知 顺推:从边界出
阅读全文