复杂度

P1036 选数(DFS)

北城余情 提交于 2020-02-10 20:12:52
P1036 选数 题目描述 已知 n个整数 x1,x2,…,xn,以及11个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34。 现在,要求你计算出和为素数共有多少种。 例如上例,只有一种的和为素数:3+7+19=29。 输入格式 键盘输入,格式为: n,k1≤ n ≤20, k < n ) x 1, x 2,…,*x**n*(1≤xi≤5000000) 输出格式 屏幕输出,格式为: 1个整数(满足条件的种数)。 输入输出样例 输入 4 3 3 7 12 19 输出 1 题解 因为n<=20,所以可以放心地DFS。因为要遍历每个数的选与不选,所以共有O(2^n^)的复杂度2^20^(1m)约为1e6,能过。 又因为sum最多是20*5e6=1e8,可以不用ll(我比较谨慎,所以开了ll) 真正要判断是否为质数的情况就是C(n,k),最差的时候n为20,k为10,方案数约有1.847e5种。 Judge函数为O(根号sum),sum最大为1e8,这时复杂度为1e4,如果执行1.847e5次就是1.847e9的复杂度。 综上所述,判断质数的总复杂度才是程序的主要复杂度。 这样写,虽然有些危险

机器学习基石(14)--Regularization

China☆狼群 提交于 2020-02-09 05:59:38
本节课主要讲述正则化。 既然我们说高复杂度的函数和低复杂度的函数是包含的关系,那我们通过'step back'的方式退回去就好了。 那么怎么样退回去呢? 其实,高次多项式和低次多项式的差别就在于w。只要我们限制了有多少个为零的w,就可以间接控制多项式的复杂度。转化成最优化的视角,就是找一些w使得E in 最小。 现在又把问题转换成找不为零的w有多少个,叫做sparse hypothesis set。这个set会比2次多项式宽松,但是又比10次多项式紧。 因为这个问题是NP hard无法解决的。所以要把问题转换成计算w 2 ,并且给定一个上限C: 这个和上面的H2`是有一些重叠的地方的。但是也会有w很小但是不是零的情况。H(C)叫做regularized hypothesis set。怎么解这个问题呢? 将这个方程式矩阵化: 因为w T w≤C,所以我们要找的w是一个半径为根号C,圆心是原点的球。 解决这个方程的优化问题需要联系之前学过的梯度下降的方法,假设一个球想要滚到谷底,球滚的方向就必须是与梯度相反的方向。(图中蓝色的方向) 蓝色椭圆的中心点(w lin )就是整个椭圆的“谷底”,但是我们的目标不是滚到“谷底”,我们是有限制条件的(图中红色的球),我们的w的最佳解必须要在红色面积内。 判断是否是最佳解得方式就是看一下还能不能继续滚,并且还不能脱离红色球的限制

根号算法

只谈情不闲聊 提交于 2020-02-08 21:18:34
看的视频课,晕晕乎乎的看了不知道多久,快进&回放反复横跳。 有一些非常奇妙的收获,记录一下。 好乱啊。。。 分块:可以理解为深度为3,儿子数为$O(\sqrt{n})$的分治树。 普通莫队的比较优秀的块长是$\frac{n}{\sqrt{\frac{2m}{3}}}$ 普通莫队可以奇偶性优化,即左端点块编号为奇数时右端点升序,偶数时降序。 回滚莫队解决不修改莫队问题。 带修莫对就是在普通的双参莫队上再加一维(前提是可撤销),时间复杂度是$O(n^{\frac{5}{3}})$的 树上莫队可以采用一种特殊的遍历序:进入时加入,回溯时加入,介于$dfs$序和$Euler$序之间的一种。 然后出现次数为奇数的有贡献,出现次数为偶数的没有贡献,再额外考虑一下$lca$的贡献即可。 然后就排在序列上可以乱弄了。 二次离线:我们对问题离线之后,问题产生的子问题不能合理解决,于是可以把子问题的询问再次离线。 类似分块套莫队之类的。 cache:内存大时运行较慢。这对根号算法的影响很大。 块状链表:支持$O(1)$查询第k大,O(\sqrt{n})插入或删除。将数列分为若干段然后维护多个队列,保证队列长度一定。 根号平衡:当两种操作数量级不同时,可以给次数较少的操作分配$O(\sqrt{n})$的复杂度以此为代价让操作次数多的达到$O(1)$ 树上分块:(应对强制在线)。随机出根号个点

珂朵莉树的易懂教学

删除回忆录丶 提交于 2020-02-07 23:34:34
0xff:前置芝士 在阅读本文前,请先了解并会熟练掌握:set、set的迭代器、结构体struct的相关操作, 不会的先去了解并使用熟练后再来看本文 一、什么是珂朵莉树? 珂朵莉树是一种数据结构,又称Old Driver Tree(ODT老司机树),是一种基于set的暴力数据结构,等一下会讲解。 二、为什么叫珂朵莉树? 这个数据结构诞生于一道cf毒瘤题 CF896C Willem, Chtholly and Seniorious ,命名为珂朵莉树的原因很明显,题目名字翻译过来是威廉,珂朵莉和瑟尼欧里斯,然后题目中附带了一张动漫中的截图(威廉帮珂朵莉调整瑟尼欧里斯),出题人ODT在题解里写到了这个新数据结构,命名为 Chtholly Tree ,据说能艹翻标程 珂朵莉·诺塔·瑟尼欧里斯出自TV动画 末日时在做什么?有没有空?可以来拯救吗? ,珂学家指的就是珂朵莉厨(没错我就是) 中国珂学院: https://www.chtholly.ac.cn/ 好回归正题: 三、为什么要用珂朵莉树? 珂朵莉树的关键操作在于它可以把一段区间赋值成同一个数x, 并且数据要随机,因为它本身就很玄学 四、怎么写珂朵莉树呢? 1.节点初始化 一棵树肯定有节点啊,这里用一个 struct 存 struct Node { int l,r; mutable int val; Node(int _l,int _r=

一步步实现SDDC-Edge与动态路由实现

家住魔仙堡 提交于 2020-02-04 11:19:07
实验摘要: 1>Windows Server软路由器静态路由设置 [难度★复杂度★] 2>Edge Services Gateway边界服务网关部署 [难度★复杂度★] 3>动态路由实现 [难度★★复杂度★★★] 正文: 上篇中,迷你SDDC环境已经实现了逻辑交换和分布式逻辑路由。通过在ESXI内核空间中创建一个DLR Instance,实现dev-web-tier、dev-app-tier和dev-db-tier三个逻辑网络的三层互访。 但是现在虚拟逻辑网络与外部物理网络之间缺少一个互通的桥梁,将物理网络与NSX SDN打通,实现真正意义上的软件定义数据中心网络基础架构。在今天的讨论中,我将向大家演示如何部署Edge Services Gateway和配置动态路由,实现整个迷你SDDC网络环境的最终拓扑。在本文的最后,JUMP代表的外部网络与Web01代表的逻辑网络之间将实现三层互访。 主题:迷你SDDC环境搭建 任务29:Windows Server软路由器静态路由 通过下图,各位可以看到逻辑网络与物理网络之间的边界是ESG设备;我们需要在ADDC、ESG和DLR上配置路由条目,才能实现今天讨论的目标。 在之前的文章“ NSX控制平面和静态路由更新流程1 ” “ NSX控制平面和静态路由更新流程2” 中,我已经详细描述了NSX-V控制平面组件netcapd与DLR-CVM

复杂度分析

烈酒焚心 提交于 2020-02-04 02:44:27
一、如何分析、统计算法的执行效率和资源消耗 1)为什么需要复杂度分析? 首先我先给大家介绍一下 事后统计法 :将代码执行一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。但是这种统计方法有很大的局限性。 1.测试结果非常依赖测试环境 2.测试结果受数据规模的影响很大 所以需要一个不用具体的测试数据就能粗略地估计算法的执行效率的方法——时间、空间复杂度分析方法。 2)大O复杂度表示法 算法的执行效率,粗略地讲,就是算法代码的执行时间。我们假设每行代码执行的时间都一样,都是 1个单位时间 ,从而算出一段代码总的执行时间为多少个单位时间,然后将公式中的低阶、常量、系数这三个不左右增长趋势的部分忽略,只记录最大量级的表示法。例:T(n)=2n+2就可以记为T(n)=O(n),T(n)=n 2 +2就可以记为T(n)=O(n 2 ) 这就是大O时间复杂度表示法,大O时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,也叫做 渐进时间复杂度 ,简称时间复杂度。 3)时间复杂度分析 如何分析时间复杂度,三个方法 1.只关注循环执行次数最多的一段代码 2.加法法则:总复杂度等于量级最大的那段代码的复杂度 3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 4)几种常见时间复杂度实例分析 罗列的这些复杂度量级

统计学习方法笔记

烂漫一生 提交于 2020-02-03 03:33:55
统计学习方法概论 1.1 统计学习 统计学习 (statistics learning): 计算机 基于 数据 构建 概率统计模型 并运用 模型 对 数据 进行 预测与分析 。也称为 统计机器学习 (statistics machine learning)。 统计学习的特点: 以 计算机及网络 为平台,是建立在计算机及网络之上的; 以 数据 为研究对象,是数据驱动的学科; 目的是对 数据 进行 预测与分析 ; 统计学习以 方法 为中心,统计学习方法构建 模型 并应用模型进行预测与分析; 是 概率论、统计学、信息论、计算理论、最优化理论及计算机科学等 多个领域的交叉学科; // 现在我们所说的机器学习,往往是指 统计机器学习 。 统计学习的对象 数据(data) 。 首先呢,统计学习从数据出发,提取数据的特征,抽象出数据中的模型,发现数据中的知识,最终又回到对数据的分析预测中去。 其次,作为统计学习的对象,数据是多样的,它包括存在于计算机及网络上的各种 数字 、 文字 、 图像 、 视频 、 音频 数据以及它们的组合。 关于数据的基本假设: 同类数据具有一定的统计规律性。 (什么叫“同类数据”:具有某种共同性质的数据,比如英文文章,互联网网页,数据库中的数据等,它们具有统 计规律性 ,所以可以用 概率统计方法 来进行处理。比如,可以用随机变量描述数据中的特征

初识算法

末鹿安然 提交于 2020-01-30 22:31:53
算法效率的度量(只关注事前分析估算法) 我们在估算时,要抛开计算机硬件软件有关因素,只依赖于问题的规模(用整数量n表示),也就是说这个复杂度是一个函数。 一个算法是由控制结构(顺序,分支,循环)和原操作(指固有数据类型的操作)构成的,算法时间取决于两者的综合效果。 要比较同一问题的综合算法,就要选取一种对于所研究问题来说是基本操作的原操作进行比较 时间复杂度和空间复杂度 对于计算机而言,运算加减法最为方便 分析算法时:我们只关注 最坏情况复杂度以及平均复杂度 其中最坏情况复杂度最具代表性 复杂度的渐进表示法 掌握算法的上界 大O,下界 大欧米噶 本节重点 复杂度计算法则: 若两个算法分别有复杂度T1=Of1 ,T2=Of2 若两个算法拼接在一起,T1+T2=max{f1,f2} 若两个算法镶嵌在一起,T1×T2=f1×f2 若T是关于n的k阶多项式时,T=O(N的n次方) 一个for循环的复杂度:循环次数×循环体代码的复杂度 If-else 结构复杂度取决于if的条件判断复杂度和两个分支部分的复杂度,总体复杂度取三者最大 (感觉自己菜的安详,不想学习还不想玩游戏??? 来源: CSDN 作者: 又是一个新的人类? 链接: https://blog.csdn.net/weixin_45704695/article/details/104118873

算法分析--复杂度杂谈

三世轮回 提交于 2020-01-29 16:20:26
算法分析 本文符号释义 常见的复杂度有 O(1):常量时间阶 O(n):线性时间阶 O(logn):对数时间阶 O(n*logn):线性对数时间阶 O (n^k):k≥2,k次方时间阶 下面 书归正传 开始胡扯 算法分析第一个要解决的问题——What to analyze 衡量算法的一个重要指标就是 runtime ,影响runtime的因素有很多,比如使用的编译器,你的电脑本身存取速度读写速度等等,所以势必有其他 可量化 的,不受外界干扰的指标去多角度地衡量算法的好坏。 输入数据的大小是main consideration 预先定义两个函数 Tavg(N) Tworst(N) 作为一般输入条件和最坏输入条件的runtime 明显的,Tavg(N)≤Tworst(N) 每多一组输出,这两个函数就多一种情况需要讨论 我们一般需要的是worst-case 的runtime来衡量算法的好坏(对应算法的健壮性,输入规模较大的数据时,输出不能崩) 让我们举个栗子 Given a sequence of K integers {N1,N2,...Nk}. A continuous subsequence is defined to be {Ni,Ni+1,...Nj} where 1≤i≤j≤K. The Maximum Subsequence is the continuous

2013 Asia Hangzhou Regional Contest 部分题解

一曲冷凌霜 提交于 2020-01-28 15:13:56
Stealing Harry Potter’s Precious 题意 :给一个n * m的图,图上每一个点要么是’.’,要么是’@’,要么是’#’。’@‘表示起点,’.‘表示必经点,’#‘表示障碍点。规定从起点出发,每一步只能向上、下、左、或右走出一步,问至少经过多少步,可以在不经过障碍的情况下,使得’.'至少经过一次 思路 :由于这道题目数据范围很小,n 与 m最大不超过100,k不超过4,所以我们就可以直接暴力枚举所有方案。 以k = 4位例 记4个点分别为ABCD,起点为O 方 案 = O A B C D / O A C B D / O A C D B . . . 方案 ={OABCD}/OACBD/OACDB... 方 案 = O A B C D / O A C B D / O A C D B . . . 明显方案数一共为4 * 3 * 2 * 1 = 24 对于每一种方法,我们只需要计算相邻两个顶点之间的最短距离,复杂度为O(N * M) k = 4时最坏复杂度为O(N * M * 24) k = 1 2 3 时复杂度明显小与O(N * M * 24) 所以做法就是直接根据k的大小,枚举所有路径上点经过的顺序,然后用bfs跑相邻两个端点的的最短路,就可以解决此问题。 AC代码 来源: CSDN 作者: ྂ..ྂ..ྂ 链接: https://blog.csdn.net