复杂度

基础?数论

落花浮王杯 提交于 2019-12-28 09:33:27
Cy筛 给定 \(f,g\) 和一个系数 \(T,n\) ,我们知道 \([1,T]\) 和 \(\{\frac ni|i\in[1,\lfloor\frac nT\rfloor]\}\) 总共 \(T+\lfloor\frac nT\rfloor\) 个下标对应的 \(F=\sum f,G=\sum g\) ,而我们要求出 \(H=\sum h=\sum f*g\) 在这些下标上的取值。 我们发现这个东西有点像杜教筛,所以考虑用类似于杜教筛的数论分块来做。 \(1.i\in[1,T]\) 我们可以通过差分求出 \(f,g\) ,然后暴力卷积求得 \(h\) ,再做前缀和得到 \(H\) 。 这里的复杂度为 \(O(T\log T)\) 。 \(2.i\in\{\frac ni|i\in[1,\lfloor\frac nT\rfloor]\}\) 先回到定义式上。 \(H(n)=\sum\limits_{i=1}^n\sum\limits_{d|n}g(d)f(\frac{i}{d})\) \(H(n)=\sum\limits_{d=1}^ng(d) \sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(i)\) 我们画一个 \(y=\frac nx\) 的反比例函数的图像出来。 每个整点 \((x,y)\) 有一个权值 \(f(x)g(y)

OO第二次博客总结

断了今生、忘了曾经 提交于 2019-12-27 10:59:52
(1)从多线程的协同和步控制方面,分析总结自己三次作业来设计 策略及其变化。 多线程电梯: 由于是第一次接触多线程,我在还没有理解概念的情况下贸然上手,导致线程同步非常混乱。现在再来分析,发现思路其实还算清晰。InputHandler与调度器之间是生产者-消费者关系,中间应当有个线程安全类requestTray。调度器和各个电梯的存储队列间也是生产者-消费者关系。 IFTTT: 本次作业我认为我在多线程控制方面比电梯好很多,没有出现线程方面原因造成的bug。重要原因在于本次作业的多线程协同其实只出现在了文件操作方面,说白了是建立snapshot与测试线程修改文件之间的冲突。那么只需要在建立snapshot时上锁,同时将测试线程的所有方法上锁即可。 出租车: 我认为我这次的线程安全反而搞复杂了。InputHandler要读取电梯的状态,电梯自身要读取并修改自身的状态,请求监控器也要不断读取电梯状态。这样锁的切换之间造成的消耗很高,也容易出现bug。 (2) 基于度量来分析自己的程序结构 多线程电梯 序列图: 可以看到,本次作业的一些主要方法,比如主函数的run,电梯的update,判断同质请求的函数、进行捎带分配的函数,这些功能非常重要的函数的圈复杂度依然很高,显得很臃肿。一部分原因是因为这是电梯系列作业的第三次作业,所以自己一直在不断地在原用功能上加东西

43. 左旋转字符串

穿精又带淫゛_ 提交于 2019-12-27 05:14:49
文章目录 题目描述 1. 字符串拼接 代码实现 复杂度分析 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 1. 字符串拼接 代码实现 /** * @Classname Solution * @Description TODO * @Date 2019/12/22 13:23 * @Author SonnSei */ public class Solution { public String LeftRotateString ( String str , int n ) { if ( str == null || str . length ( ) == 0 || n < 0 ) return "" ; if ( str . length ( ) == 1 || n == 0 ) return str ; // 注意这里是n%str.length(),有一次写反了 int move = n % str . length ( ) ; return str . substring ( move ) + str . substring (

积分图(一) - 原理及应用

我的未来我决定 提交于 2019-12-27 01:18:00
积分图原理 第一个提出 Haar 特征快速计算方法的是 CVPR2001上 的那篇经典论文 [《Rapid object detection using a boosted cascade of simple features》] ( http://www.cs.utexas.edu/~grauman/courses/spring2007/395T/papers/viola_cvpr2001.pdf ), Viola 提出了一种利用积分图(integral image)快速计算 Haar 特征的方法, 这个方法使得图像的局部矩形求和运算的复杂度从 O(MN) 下降到了 O(4) 。 Haar 特征的计算需要重复计算目标区域的像素值,使用积分图能大大减少计算量,达到实时计算 Haar 特征的目的。简单来说,就是先构造一张“积分图”(integral image),也叫 Summed Area Table,之后任何一个 Haar 矩形特征都可以通过查表的方法(Look Up Table)和有限次简单运算得到,大大减少了运算次数。所以但凡需要重复计算目标区域内像素值和的场合,积分图都能派上用场。下面开始介绍积分图原理,并给出其的几个应用。 1、积分图原理   图像是由一系列的离散像素点组成, 因此图像的积分其实就是求和. 图像积分图中每个点的值是原图像中该点左上角的所有像素值之和.

偏差和方差

蹲街弑〆低调 提交于 2019-12-23 16:38:39
偏差(Bias)与方差(Variance) 目录: 为什么会有偏差和方差? 偏差、方差、噪声是什么? 泛化误差、偏差和方差的关系? 用图形解释偏差和方差。 偏差、方差窘境。 偏差、方差与过拟合、欠拟合的关系? 偏差、方差与模型复杂度的关系? 偏差、方差与bagging、boosting的关系? 偏差、方差和K折交叉验证的关系? 如何解决偏差、方差问题? 1. 为什么会有偏差和方差? 对学习算法除了通过实验估计其泛化性能之外,人们往往还希望了解它为什么具有这样的性能。“偏差-方差分解”(bias-variance decomposition)就是从偏差和方差的角度来解释学习算法泛化性能的一种重要工具。 在机器学习中,我们用训练数据集去训练一个模型,通常的做法是定义一个误差函数,通过将这个误差的最小化过程,来提高模型的性能。然而我们学习一个模型的目的是为了解决训练数据集这个领域中的一般化问题,单纯地将训练数据集的损失最小化,并不能保证在解决更一般的问题时模型仍然是最优,甚至不能保证模型是可用的。这个训练数据集的损失与一般化的数据集的损失之间的差异就叫做泛化误差(generalization error)。 而泛化误差可以分解为偏差(Biase)、方差(Variance)和噪声(Noise)。 2. 偏差、方差、噪声是什么? 为了更好的理解偏差、方差和噪声概念,这一部分我分两个小节来阐述

偏差方差分解

旧时模样 提交于 2019-12-23 16:37:23
偏差方差分解 (误差分解) 先引入一个问题: Machine Learning 与 Curve Fitting 的区别是什么? 1 Curve Fitting 是使用所有的数据拟合一条曲线; 而 Machine Learning 是采用真实世界中采样的一小部分数据,并且我们希望我们的模型能够对于未知数据有不错的泛化性能.因此涉及到Bias-Variance的权衡. 学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 在估计学习算法性能的过程中, 我们主要关注偏差与方差. 因为噪声属于不可约减的误差 (irreducible error). 下面来用公式推导泛化误差与偏差与方差, 噪声之间的关系. 符号 涵义 \(\mathbf{x}\) 测试样本 \(D\) 数据集 \(y_{D}\) \(\mathbf{x}\) 在数据集中的标记 \(y\) \(\mathbf{x}\) 的真实标记 \(f\) 训练集 \(D\) 学得的模型 \(f(\mathbf{x}; D)\) 由训练集 \(D\) 学得的模型 \(f\) 对 \(\mathbf{x}\) 的预测输出 \(\bar{f}(\mathbf{x})\) 模型 \(f\) 对 \(\mathbf{x}\) 的

gui 应用开发中控制复杂度

陌路散爱 提交于 2019-12-21 11:49:20
gui 应用开发中控制复杂度 gui 程序中,控制复杂度是非常重要的。前端、gui 框架、后端代码,这几部分结合到一起,其复杂性不言而喻。在开发 gui 程序时,从一开始就要注意控制好复杂度,为后续的开发奠定一个良好的基础。 图片资源的命名 gui 程序中常常有很多的图片资源,不同的图片在页面中表示不同的功能。图片的命名最好与功能紧密结合,这远远比起一些没有任何意义的名字更好。当我们发现前端中图片的显示或者切换出现问题时,一个有意义的名字让我们能更快的定位到问题。 布局方式的选择 页面中控件的布局优先采用相对布局模式,这样在屏幕的大小改变之后,仅仅需要做很少的改动就能够适应新的屏幕。对页面中的不同控件,按照位置划分为单独的区域,每一个区域使用一个大的容器,在容器中布局控件,减少控件间的影响。 功能实现的分割 对功能进行划分。可以按照单一页面一个事件注册源文件,一个后端函数源文件,一个交互接口头文件的方式来组织。对于功能繁多的页面可以进一步划分。 事件注册源文件 每一个页面的事件注册源文件可以分为三部分内容: 初始化配置 事件注册 解初始化 初始化配置完成页面打开的时候的初始化工作,如查询数据库配置显示参数、获取显示数据、初始化关联数据结构等。 事件注册绑定事件到页面中的控件上。 解初始化完成页面关闭后的清理工作。 对于有子页面的情况,子页面的功能划分也可按照上述方式进行。

水题记录

☆樱花仙子☆ 提交于 2019-12-19 03:07:30
众所周知 水题就是我这种蒟蒻做不出来的题 注:夹杂着口胡,请慎重食用 hihocoder1751: 蒟蒻的想法:枚举$i$在第$j$位的贡献,即$\sum\limits_{i} \sum\limits_{j} \binom{i - 1}{j - 1} * (j - 1)! * (n - j)!$ 然而并不能优化到$O(n)$ 考虑从大到小插入数,那么插入$i$时,有$(i - 1)! * n^{\underline{i}}$的贡献 即$\sum (i - 1)! * n^{\underline{i}}$ 化简后为$n! \sum \frac{1}{i}$ hihocoder1750:$r - l \leq 10^6$,对$[l, r]$内的所有数进行试除,暴力判断因子个数即可 hihocoder1746:分$a$是不是$b$的祖先判断一下,然后取去除$a, b$端的子树相乘即可 hihocoder1743:状压$2^k$然后套个矩阵快速幂即可 hihocoder1738:线段树优化建图后拓扑图dp hihocoder1730:并查集维护相同,set维护不同,启发式合并set hihocoder1726:二分找到答案所在的间隙后,加加减减输出即可 hihocoder1722: 考虑two-pointer,维护最小值和最大值指针,随着最小值指针的递增,那么最大值指针也会递增 可以在$O

算法复杂度的O到底是什么

放肆的年华 提交于 2019-12-18 15:30:24
以前在玩程序竞赛的时候。经常跟朋友讨论算法复杂度: “这个算法复杂度是 O ( n 2 ) O(n^2) O ( n 2 ) ,肯定爆掉了,这道题要用 O ( n log ⁡ n ) O(n\log{n}) O ( n lo g n ) 的算法” 类似的讨论非常多。但当时没深究过这个O到底是如何定义出来的,一直以为它跟数学分析里的高阶无穷小之类的是否有关系。上了大学课上的情报数学后,终于慢慢揭开了O的面纱。这里就来分享给还没学过的朋友。 定义1 对于函数 f : N → N , g : N → N f:\mathbb{N}\rightarrow \mathbb{N},g:\mathbb{N}\rightarrow \mathbb{N} f : N → N , g : N → N ,若满足 ∃ n o ∈ N , ∃ c ∈ R s . t . ∀ n ∈ N n ≥ n o ⇒ f ( n ) ≤ c g ( n ) \exist n_o \in \mathbb{N}, \exist c \in \mathbb{R}\quad s.t. \quad\forall n\in \mathbb{N} \\ n \geq n_o \Rightarrow f(n)\leq cg(n) ∃ n o ​ ∈ N , ∃ c ∈ R s . t . ∀ n ∈ N n ≥ n o ​ ⇒ f (