草庐IT

「枚举」组合的输出

本题为3月23日23上半学期集训每日一题中B题的题解题面(写题解的时候学校oj已不可查看此题,下面的题面来自洛谷第1157题)题目描述排列与组合是常用的数学方法,其中组合就是从\(n\)个元素中抽出\(r\)个元素(不分顺序且\(r\len\)),我们可以简单地将\(n\)个元素理解为自然数\(1,2,\dots,n\),从中任取\(r\)个数。现要求你输出所有组合。例如\(n=5,r=3\),所有组合为:\(123,124,125,134,135,145,234,235,245,345\)。输入一行两个自然数\(n,r(1。输出所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每

最小割树学习笔记

前言最小割树(Gomory-HuTree)通过分治的思想,将图中的最小割关系建成一棵带权了树上问题。它的主要用途是求解全源最小割/最大流。前置知识:一种快速的最大流算法(Dinic/ISAP均可,FF/EK不行,HLPP虽然快但不方便求最小割树),本文中采用Dinic。最小割最大流定理:最小割=最大流分治思想下文中若无例外,均用\(O(\text{maxflow}(n,m))\)表示求一个\(n\)个点\(m\)条边的图上任意两点之间的最大流/最小割的时间复杂度。建立首先我们将全图看成一个集合。然后我们任选两个点\(s,t\)跑一遍最大流。然后你会发现,我们可以通过源点是否与其连通分成两个集合

「线性DP」垃圾陷阱

本题为3月21日23上半学期集训每日一题中A题的题解题面题目描述卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中。“垃圾井”是农夫们扔垃圾的地方,它的深度为D(\(2\leqD\leq100\))英尺。卡门想把垃圾堆起来,等到堆得与井同样高时,她就能逃出井外了。另外,卡门可以通过吃一些垃圾来维持自己的生命。每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费卡门的时间。假设卡门预先知道了每个垃圾扔下的时间t(\(0),以及每个垃圾堆放的高度h(\(1\leqh\leq25\))和吃进该垃圾能维持生命的时间f(\(1\leqf\leq30\)),要求出卡门最早能逃出井外

概率与期望入门

概率简介概率,是我们日常生活中的常见概念。它可以实际的理解为一个事情发生的频率。例如:筛\(30\)次色子,\(4\)次筛出\(10\)。我们就可以认为筛出\(4\)的频率,即筛出\(4\)这一事件的概率为\(\frac{10}{30}=\frac{1}{3}\)。显然当筛的次数较小时,其频率会有相对大的起伏。但随着筛的次数的增大,其频率就会逐渐趋向于稳定,并最终变为一个定值。因此这引出了我们对于概念的定义:我们定义一个随机变量\(x\)的概率为\(=\frac{x发生的次数}{总实验次数}\)。记做\(P(x)\)。严谨来说,事件的概率会是一个定值,且是由上述很多个简单到无法继续分解的互斥(

AlphaFold2中的残基刚体表示

技术背景在前面的这一篇博客中,比较全面的介绍了组成蛋白质的各种氨基酸的三维结构。由于每个氨基酸大小不一,在传统的蛋白质折叠预测的方案中,一般会考虑全原子方案或者是粗粒化方案。对于全原子方案而言,即时去除了氢原子,也包含了极大的原子数,对于计算量来说是一个非常大的考验。而将一个氨基酸近似为一个点的方案,因为往往忽略了太多的信息,比如氨基酸之间的二面角等,因此无法达到很好的预测效果。在AlphaFold中,将每一个氨基酸在主链上的位置,用一个三角形刚体来表示。这个三角形的三个顶点分别是C原子、N原子和\(\alpha\)位的C原子。由于一个三角形就可以确定一个平面,因此每一个氨基酸可以通过一个三角

Learning with Mini-Batch

最近在看一些深度学习相关的书,感觉对于参考文献1中的mini-batch部分理解得不是很透彻,主要是因为神经网络的输入开始变成批数据,加之对python的numpy不是很熟了。所以总想写点什么,一来有助于加深对于知识的理解,二来也算是分享知识咯。闲话少叙,让我们进入正题。在机器学习中,学习的目标是选择期望风险\(R_{exp}\)(expectedloss)最小的模型,但在实际情况下,我们不知道数据的真实分布(包含已知样本和训练样本),仅知道训练集上的数据分布。因此,我们的目标转化为最小化训练集上的平均损失,这也被称为经验风险\(R_{emp}\)(empiricalloss)。严格地说,我们

蚁群算法及 TSP 问题上的应用

群智能(Swarmintelligence)自然界动物群,称之为群。群的特征:相互作用的相邻个体的集合个体的行为简单,既有竞争又有协作智能化的集体行为(1+1>2):个体间不仅能够交互信息,还能够处理信息,根据信息改变自身行为没有一个集中控制中心,分布式、自组织作为群体协同工作时,展现出非常复杂的行为特征——智能任何一种由昆虫群体或其他动物社会行为机制而激发设计出的算法或分布式解决问题的策略都属于群智能算法典型算法:粒子群PSO蚁群ACO人工鱼群AFSA人工蜂群ABCA算法原理:蚁群觅食模拟自然界蚁群觅食(从巢穴到食物的最佳路径的行为)的过程。自然界中,蚂蚁会在觅食路上留下”信息素“来作为前往

蒲公英(分块)

Acwing249蒲公英[洛谷]([Violet]蒲公英-洛谷)[Acwing(数据较强)](249.蒲公英-AcWing题库)前言“好诗意的题目啊......那就用很诗意的代码写吧”思路首先,这题是给你\(l,r\)的限制目的是强制在线,所以莫队啥的不能用。由于不满足“区间可加性”(已知\([l,r]\cup[r+1,k]\)的众数,不能得出\([l,k]\)的众数),所以树状数组/线段树就很难维护。考虑分块,首先离散。设块的长度为\(T\),则有\(n/T\)块,然后预处理第\(i\)到\(j\)块的众数以及数的出现次数,这段时间复杂度\(O(NT^2)\)。之后两段暴力维护,\(O(N/

蒲公英(分块)

Acwing249蒲公英[洛谷]([Violet]蒲公英-洛谷)[Acwing(数据较强)](249.蒲公英-AcWing题库)前言“好诗意的题目啊......那就用很诗意的代码写吧”思路首先,这题是给你\(l,r\)的限制目的是强制在线,所以莫队啥的不能用。由于不满足“区间可加性”(已知\([l,r]\cup[r+1,k]\)的众数,不能得出\([l,k]\)的众数),所以树状数组/线段树就很难维护。考虑分块,首先离散。设块的长度为\(T\),则有\(n/T\)块,然后预处理第\(i\)到\(j\)块的众数以及数的出现次数,这段时间复杂度\(O(NT^2)\)。之后两段暴力维护,\(O(N/

理解 Swift 中的 @inlinable (译)

原文地址@inlinable属性是Swift鲜为人知的属性之一。与其他同类一样,它的目的是启用一组特定的微优化,您可以使用它们来提高应用程序的性能。让我们来看看这个是如何工作的。在Swift中使用@inline进行内联扩展也许最需要注意的是,虽然@inlinable与代码内联有关,但它与我们之前已经介绍过的@inline属性不同。但是为了避免您不得不阅读两篇文章,我们将在介绍@inlinable之前再次介绍这些概念。在编程中,内联扩展,也称为内联,是一种编译器优化技术,它用所述方法的主体替换方法调用。调用方法的操作很难做到没有性能开销。正如我们在关于内存分配的文章中所述,当应用程序希望将新的堆