前言 虽说在学OI的时候学到了非常多的有递归结构的算法或方法,也很清楚他们的复杂度,但更多时候只是能够大概脑补这些方法为什么是这个复杂度,而从未从定理的角度去严格证明他们.因此借着这个机会把主定理整个梳理一遍. 介绍 主定理(Master Theorem)提供了用于分析一类有递归结构算法时间复杂度的方法.这种递归算法通常有这样的结构: def solve(problem): solve_without_recursion() for subProblem in problem: solve(su…
英文原版不上了 直接中文 定义 假设有递推关系式T(n)=aT(n/b)+f(n) 其中n为问题规模 a为递推的子问题数量 n/b为每个子问题的规模(假设每个子问题的规模基本一样) f(n)为递推以外进行的计算工作,无需参加递归 定理 a≥1,b>1为常数,f(n)为函数,T(n)为非负整数.则有以下结果(分类讨论): (1)若f(n)=O(nlogba-ε)存在ε>0,就是当nlogba的阶高于f(n)时,可以存在ε使得nlogba-ε和f(n)的阶相同.此时取T(n)=θ(nlogba)…
1. 问题 Karatsuba 大整数的快速乘积算法的运行时间(时间复杂度的递推关系式)为 T(n)=O(n)+4⋅T(n/2),求其最终的时间复杂度. 2. 主定理的内容 3. 分析 所以根据主定理的判别方法,可知对于 T(n)=O(n)+4⋅T(n/2),a=4,b=2,则 f(n)=O(n)<nlogab=2,符合第一个判别式,因此,T(n)=O(n2)…
第一眼DP,发现不可做,第二眼就只能$O(2^{1024})$暴搜了. 重新审视一下这个DP,f[x][i]表示在x的祖先已经全部染色之后,x的子树中共有i个参战平民的最大贡献. 设k为总结点数,对于DFS,我们有$T(1)=O(\log k)$,$T(k)=4T(\frac{k}{2})+O(k^2)$. 根据主定理,$O(n^{\log_ba})=O(n^2)$.故时间复杂度为$O(k^2\log k)$,即$O(2^{2n}n)$. #include<cstdio> #include&l…
1.这些是时间复杂度的.(e.g. O(n).Θ(n).Ω(n)) 主要为主定理(坏东西) 2.本质 O <= Θ = Ω >= 3.(你可以把他们都试一遍)主要用处(目前,2020-09-24): 如: \[恶心的主定理: \\ if: T(n)=aT(\frac{n}{b})+f(n) \\ 1.若f(n)=O(n^{log_ba-ε})\ and\ ε>0 \\ 那么T(n)=Θ(n^{log_ba}) \\ 2.f(n)=Θ(n^{log_ba}) \\ 那么T(n)=Θ(n^{…
2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么:损坏了如何做还原(主要是master库): master:它包含一个系统表集合,是整个实例的中央存储库,维护登录账户,其他数据库,文件分布,系统配置设置,磁盘空间,资源消耗,端点和 链接服务器等方面的信息.它记录SQL2005初始化信息,所以它对实例极为重要.在创建,修改或删除用户数据库,更改服务器或任何数据库配置,以及修改或添加用户账户后都要备份该数据库.model:它是SQL2005实例中所有新建数据库的模板.执行create da…
Master theorem provides a solution in asymptotic terms to solve time complexity problem of most divide and conquer algorithms. Recurrence relations of the form: T(n) = a T(n/b) + f(n) where a >= 1 and b > 1 Case 1: f(n) = O(nc) where c < logb a T…
主定理一般形式是T(n) = a T(n / b) + f(n), a >= 1, b > 1.递归项可以理解为一个高度为 logbn 的 a 叉树, 这样 total operation就是  (a ^ logbn) - 1,  右边的f(n)假设为 nc 那么我们对比一下这两项就会发现 T(n)的复杂度主要取决于 logba 与 c 的大小.所以我们才会有接下来的三种case.也需要注意什么时候不可以使用主定理. Case 1:  c < logba ,   O(n) = n ^ l…
确界原理  supremum and infimum principle  戴德金定理  Dedekind theorem http://www.math.ubc.ca/~cass/courses/m446-05b/dedekind-book.pdf#page=15 continulity and irrational numbersthe nature and meaning of numbers…
原文链接 首先说说格林公式(Green's theorem).对于一段封闭曲线,若其围城的区域D为单连通区域(内部任意曲线围城的区域都属于院区域),则有如下公式: 其中其中L为D的边界,取正方向.如果沿着L前进,左边是D的内部区域,那么此时的L定义为正方向. 利用格林公式求面积的方法:曲线围成的区域的面积为: 格林是十八世纪英国自学成才的数学家,他只上过一年学.1828年格林三十五岁的时候,把他当时对数学的研究写成小册子分发给民众.五年后,在一位乡野数学家的帮助下,他得以进入了剑桥大学学习.但是…
虽然以前学过,再次回顾还是有别样的收获~ 认识时间复杂度 常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作. 时间复杂度为一个算法流程中,常数操作数量的指标.常用O(读作big O)来表示.具体来说,在常数操作数量的表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果记为f(N),那么时间复杂度为O(f(N)). 评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行时间,也就是常数项时间. 例子一 一个简单的理解…
需要启动两个mongoDb文档数据库,一个是主模式启动,另一个是属于从模式启动. 1. 创建主从服务器 主服务器:192.168.1.131:27017 备服务器:192.168.1.131:27015 创建主服务器 创建备服务器: 2.启动主备服务 3.进行同步数据测试 在主机上创建数据库,并插入数据: 客户端以及主备机的关系图 master 负责curd :slave负责copy master 并只提供r 参见:http://blog.csdn.net/sxb0841901116/artic…
1.首先切换到子分支: git checkout develop2.使用git pull 把分支代码pull下来: git pull3.切换到主分支: git checkout master4.把分支的代码merge到主分支: git merge develop5.git push推上去ok完成,现在 你自己分支的代码就合并到主分支上了. git push 原文链接:https://blog.csdn.net/yuanmengdage/article/details/93384254…
如何使用git将分支branch合并到主干master上 对于一人独立使用git进行系统开发时,branch分支相当于版本(Version),如果每次都将新的分支branch提交到GitHub上,则会在GitHub中产生相应的新分支.那么如何将开发完毕的新分支合并到主干master上,而且还保留原有分支信息呢? 新建分支并切换 git chechout -b <branchName> 这样就切换到新建的分支上了,接着我们在新建的分支上进行系统开发,假设修改了README.MD中的内容,添加了下…
在前面一系列的文章中.我们讲述了mongodb的基本操作,高级查询以及索引的使用. 该篇博客主要说明在windows系统怎样创建主从数据库同步: 须要启动两个mongoDb文档数据库,一个是主模式启动,还有一个是属于从模式启动. 1. 创建主从server 主server:192.168.1.131:27017 备server:192.168.1.131:27015 创建主server 创建备server: 2.启动主备服务 watermark/2/text/aHR0cDovL2Jsb2cuY3…
前言 在此记录一些不太成熟的思考,希望对各位看官有所启发. 从题目可以看出来这篇文章的主题很杂,这篇文章中我主要讨论的是深度学习为什么要"深"这个问题.先给出结论吧:"深"的层次结构是为了应对现实非线性问题中的复杂度,这种"深"的分层结构能够更好地表征图像语音等数据. 好了,如果各位看官感兴趣,那就让我们开始这次思考的旅程吧! 归并排序 我们首先从归并排序算法开始,这里先跟大家回顾一下这个算法,相信大家都已经非常熟悉了.排序是计算机基础算法中的一…
UOJ Test Round #1 T1:数字比大小的本质是按(长度,字典序)比大小. T2:首先发现单调性,二分答案,用堆模拟,$O(n\log^2 n)$. 第二个log已经没有什么可优化的了,但是第一个可以做到线性. 我们先将特殊题的p就当作是-1跑一边,设这个题的出现时间是tx,完成所需时间为sx,记录下每个题在[tx,T]上的出现时间.把所有题按优先级排序,可以发现如果找到了前i个满足出现时间之和为sx,那么这些时间区间正好可以被特殊题区间覆盖,找到这个i就确定了优先级,最后再模拟一遍…
写在前面 由于上一篇总结的版面限制,特开此文来记录 \(OI\) 中多项式类数学相关的问题. 该文启发于Miskcoo的博客,甚至一些地方直接引用,在此特别说明:若文章中出现错误,烦请告知. 感谢你的造访. 前置技能 多项式相关 形同 \(P(X)=a_0+a_1X+a_2X^2+\cdots+a_nX^n\) 的形式幂级数 \(P(X)\) 称为多项式.其中 \(\{a_i|i\in[0,n]\}\) 为多项式的系数: \(n\) 表示多项式的次数. 多项式的系数表示 对于 \(n\) 次多项…
目录 写在前面 前置技能 多项式相关 多项式的系数表示 多项式的点值表示 复数相关 复数的意义 复数的基本运算 单位根 代码相关 多项式乘法 快速傅里叶变换 DFT IDFT 算法实现 递归实现 迭代实现 快速数论变换 原根 算法实现 模数任意的解决方案 应用 快速卷积 多项式求逆 基本概念 求解方法 算法实现 求第二类斯特林数 第二类斯特林数 \(\text{NTT}\) 优化 快速沃尔什变换 \(xor\) 卷积 结论(三种卷积求法) 正向 \(\text{tf}\) 逆向 \(\text{…
在上一章中我们讨论了如何分析循环语句.在现实中,有很多算法是递归的,当我们分析这些算法的时候我们要找到他们的的递归关系.例如归并排序,为了排序一个数组,我们把它平均分为两份然后再重复平分的步骤.最后我们合并这些结果.归并排序的时间复杂度可以写作T(n) = 2T(n/2) + cn.当然还有很多其他的类似算法如二分查找,汉诺塔等等. 有三种办法可以分析递归函数. 1.置换法 substitution method: (叫假设法比较合适) 我们可以先假设一下算法的时间复杂度,然后用数学归纳法来验证…
归并排序 归并排序是一种分治策略的排序算法.它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列. 归并排序首先由著名的现代计算机之父John_von_Neumann在1945年发明,被用在了EDVAC(一台美国早期电子计算机),足足用墨水写了 23 页的排序程序.注:冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日),美籍匈牙利数学家.计算机科学家.物理学家,是20世纪最重要的数学家之一. 一.算法介绍 我…
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书: 题目 题目链接:洛谷 P3122.USACO 官网. 题意概述 给你平面上的一些点和直线,有两种操作: 新加入一个点 \((x,y)\): 给定一条直线 \(ax+by=c\),询问是否所有点都在这条直线的同侧(在直线上不合法). 初始时有 \(n\leq 10^5\) 个点,共有 \(q\leq 10^5\) 次操作. 题解 对题意转化 我们考虑将 所有点都在直线的同一侧 这一条件进行转化. 具体地,我们先考虑一个简单的子问题. 简…
开篇前言:为什么写这篇文章?笔者目前在学习各种各样的算法,在这个过程中,频繁地碰到到递归思想和分治思想,惊讶于这两种的思想的伟大与奇妙的同时,经常要面对的一个问题就是,对于一个给定的递归算法或者用分治思想缩小问题规模的算法,如何求解这个算法的时间复杂度呢?在google过很多的博文后,感觉这些博文总结的方法,有很好优秀的地方,但是都不够全面,有感于此,笔者决定总结各家之长,作此博文,总结各种方法于此,有不足之处,欢迎各位批评指证! 在算法的分析中,当一个算法中包含递归调用时,其时间复杂度的分析会…
我们在算递归算法的时间复杂度时,Master定理为我们提供了很强大的便利! Master公式在我们的面试编程算法中除了BFPRT算法的复杂度计算不了之外,其他都可以准确计算! 这里用求数组最大值的递归函数来举例: public static int getMax(int[] arr, int L, int R) { if (L == R) { return arr[L]; } int mid = (L + R) / 2; int maxLeft = getMax(arr, L, mid); in…
前言 \(Master\)定理,又称主定理,用于程序的时间复杂度计算,核心思想是分治,近几年\(Noip\)常考时间复杂度的题目,都需要主定理进行运算. 前置 我们常见的程序时间复杂度有: \(O(n)/O(n^2)/O(nlog_2n)/O(2^n)\)等等... 我们叫它程序的渐进时间复杂度,例如一段程序执行这样的循环: for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dist[i][j]=min(d…
1.ctex:要求用Tex编辑器进行作业的书写 2.与东大本科有差距,还需要多点努力才行. 3. 4.考试不考概念 5. 6.时间复杂度和空间复杂度 7.算法好坏的评价标准 8.基本运算 9.时间复杂度 10.第二章:重要的来了 11. 12. 13. 假设矩阵A为n*m,矩阵B为m*n ,则AxB计算时,A矩阵的第一行的第一个元素要进行n次乘法运算,(而不是m次),A矩阵共有 n×m个元素,故总的需要n*m*n次乘法运算.若取 m=n,则时间复杂度为 O(n^3) 14.递归算法的复杂性 15…
算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法,有递推关系式的算法,可以很快求出其复杂度. 定义如下: 如果对证明感兴趣的可以翻阅书籍:<算法导论>.如果觉得太难思考,可以跳过该节. 由于主定理的公式十分复杂,所以这里有一种比较简化的版本来计算: 二.举例 二分搜索,每次问题规模减半,只查一个数,递推过程之外的查找复杂度为O(1),递推运算时…
一.背景 服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用keepalived这个HA工具,但是我们可以接受人工进行切换,有什么好的方案呢? 二.几种Master/Slave逻辑架构图 (Figure1:单Master-单Slave) (Figure2:单Master-多Slave) (Figure3:单Master-级联Slave) (Figure4:Master/Slave部署逻辑图) 三.搭建过程 环境:Wi…
一个仓库可以包含多个分支,有一个默认的主分支:master 若想提交代码至远程仓库的某个分支(非主分支) 先查看下本地分支以及远程分支:git branch -a 由本地分支(非主分支master)提交至远程分支,新建一个本地分支,并切换到此分支: Git branch-b sunmaoyu origin/sunmaoyu 如果已有本地分支可直接切换:git checkout [name] \ 接下来三步走: git add . git commit -a -m 'xxxxx' git push…
一.DNS服务器的类型 ①Primary DNS Server(Master) 一个域的主服务器保存着该域的zone配置文件,该域所有的配置.更改都是在该服务器上进行,本篇随笔要讲解的也是如何配置一个域的主DNS服务器 ②Secondary DNS Server(Slave) 域从服务器一般都是作为冗余负载使用,一个域的从服务器是从该域的主服务器上抓取zone配置文件,从服务器不会进行任何信息的更改,zone配置文件的修改只能在主DNS服务器上进行,所有的修改都有主服务器同步 ③Caching…