随笔分类 - 初期丑陋的大杂烩
摘要:原题连接:石子合并 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 输入格式 数据的第1行试正整数N,1≤N≤100,表示
        阅读全文
                
摘要:H74139是双2-4译码器,最近才搞懂其大致的原理,稍微记录记录。 工作原理的VHDL代码: -- H74139 双2-4译码器,VHDL主要代码 libray IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; USE
        阅读全文
                
摘要:小引入 如果一个系统由n个变量和m个约束条件组成,形成如xi-xj<=k(ij∈[1, n])的不等式,则称其为查分约束系统。写成一个矩阵形式的不等式组的话则系数有且仅有一个1和一个-1。 解这种不等式组为何会与图论扯上关系呢?在我们求解最短路或者是最长路时会有松弛操作 if(dis[v] > di
        阅读全文
                
摘要:BCD码实际上就是将原本的十进制数的每一位用一个4位二进制数表示,每一位0-9。 二进制4位能够表达的数字范围是0-15。 由此可见BCD码的一段与普通四位二进制来表示十进制位有6的进制差。所以这就是二进制转化为BCD码的关键所在。下面来讲讲主要步骤: 先预估十进制数的位数,预先给BCD码分好段,此
        阅读全文
                
摘要:递归的复杂度分析的关键点:找到截止条件,列出递推的公式,最后数学化简后再由化简公式化简。 /* Recursion 复杂度计算的关键 --> 找到边界 基本操作的时间均设为c T(n) 执行函数所要消耗的时间 */ // 计算阶乘 普通递归 int func(int n) { if(!n) retu
        阅读全文
                
摘要:第四题一般为比较基础的图论,不会太难,但也不会让你做得太舒服,关键是找到模型然后稍微变通下(这里的变通还挺考验对图论中一些基本模型的理解的)。 简化题目的意思,寻找模型,图论有许多的算法,很多时候并不是不会写,而是没有简化出模型,不知用何算法。 同时注意计算结果的范围是否会爆int。 复杂度计算(有
        阅读全文
                
摘要:本篇只是非常基础的一些树形结构的入门。 树形结构与链表感觉很类似,只是有分叉的链表。内存不连续,内存之间(节点之间)的联系是通过内存的编号。 很多时候树的题目往往不需要构造出树,只需要就着树的性质灵活模拟。 下面就挑一道感觉比较经典的题~ 原题连接 题目描述: 我们可以把由“000”和“111”组成
        阅读全文
                
摘要:--由于博主还未系统地学习过数据结构,只是闲时自学,可能理解有误,欢迎指出。 本篇主要通过题目来讲解 链表 基本特性:1)内存一般不连续,一块块连接 2)查找元素较慢,只能通过指针逐个移动查找。但这个缺点一般可以通过数组模拟链表来解决--数组的下标表示不同的内存编号,数组的内容表示该内存的内容,由此
        阅读全文
                
摘要:最大流:源点到汇点的流量最大 Dinic基本思想: bfs广搜实现查找多条增广路(可能可以增加流量的路),构建一张层次图。 在bfs找到增广路的前提下多次dfs深搜进行增广直至所有已查找到的增广路用完 优化:当前弧优化: 在每次更新完的层次图中(即每一次bfs完后),dfs每增广完一条路之后,该路的
        阅读全文
                
摘要:欧拉筛法: 直接判断素数耗时,换个角度标记非素数,那么没有被标记的就是素数。 关键点: 除2之外的偶数必然不是素数,所以只需要遍历奇数 寻找0-N范围中的素数时,遍历只需要从 2-->sqrt(N+0.5),因为sqrt(N+0.5)之后的数必然在第二层的循环中标记过。 二层循环的意思:一层循环找到
        阅读全文
                
摘要:unique #include <cstdio> #include <algorithm> #include <iostream> using namespace std; int a[] = { 1, 3, 3, 3, 5, 6, 0, 0, 8, 7, 8}; int main() { // u
        阅读全文
                
摘要:二分求解问题类型:有界有序数据区间上的一个最优解 关键点:1)确定上下界 2)解存在的区间为【left,right】,二分时的mid为当前的猜想解,最好用一个变量ans存储每次最优解,以免最终输出的混乱 3)注意终止的范围while(left <= right) 复杂度:logN 栗子:P1316 
        阅读全文
                
摘要:/* 归并排序:不断将数组切分为两部分 递归切分直到数组长度为1,之后逐渐有序合并 */ #include <cstdio> #include <iostream> #include <cmath> using namespace std; //归并 小-->大 void Merge(int a[]
        阅读全文
                
摘要:tarjan打法博大精深,有向图强连通,无向图点双连通、边双连通、割点、割边~~学得寡人头大,今天整理整理,明天继续干 ~(*^*)~ 有向图求强连通: //强连通是对于有向图而言的,无需考虑某个边的重复访问//单个点也是一个强连通分量,要根据题目的意思对结果进行特判//dfs自上而下,而强连通的分
        阅读全文
                
摘要:由于刷CCF时遇到了类似的问题,最近学习了下Tarjan求强连通的算法。 基本的原理:通过Dfs遍历点,某点在拓展后仍能回归到自己,则该点处在图的一个强连通分量上。 基本工具: int dfn[i]:记录i在dfs中第一次被访问到的次序(时间序,只增不减)。 int low[i]:i所能到达的最早的
        阅读全文
                
摘要:Floyd:稳定的O(n^3)复杂度,一般只在节点数 < 300 时候考虑。除了求最短路,还可以用来判断图的连通性。 基本结构很简单:最外层遍历中转节点,内层遍历两端点,具体为什么可参见我的另一条博客。最近做题遇到了几道用Floyd的题目,又有了新的理解:设uv为两端点,k为中转节点,那么Floyd
        阅读全文
                
摘要:BELLMAN-FORD /** * Bellman-ford 可处理带有负权边的单源最短路径 * 算法思想: * 自底向上的方式计算最短路径 * 第i次遍历得到距源点最多i条边的最短路径 * 由于对于一个|V|个顶点的图的最短路径最多只可能经过|V-1|条边 * 所以循环次数最多为|V-1|次 *
        阅读全文
                
摘要:DIJKSTRA 注意Dijkstra不能处理带负权的图,若带负权请使用spfa外加判断各点入队的次数。以下的描述都是基于图中的边无负权。 Dijkstra简述 dij是基于贪心的一种求解单源最短路径的算法,效率非常高。贪心算法的求解是来源于最优子结构的性质,从局部最优逐渐构造到全局最优。 最优子结
        阅读全文
                
摘要:差不多就要CCF考试了,弱鸡我还是挺慌的(好想上400分保研~),最近开始来逐渐巩固自己所储备的知识。 CCF的第四题往往是图论,今天就来回顾一下经典的最小生成树算法:Kruskal && Prim。 Kruskal: 遍历边,边的累加生成树--适用于边较稀疏的情况。 边用结构体数组存储,属性有:两
        阅读全文
                
摘要:只是谈谈我今日所学,啊,昨日舍友打游戏弄得我睡不好,今天学的迷迷糊糊,若有不当之处望指正。 SPFA: 单源最短路径的非常高效的方法,且可以处理带有负权的边。 @para dis[] 用来记录到目标点的预估值:初始时为Inf(无穷大),只有dis[target] = 0; 用队列来保存优化的节点,(
        阅读全文
                

 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号