随机算法

「PKUWC2018」随机算法

馋奶兔 提交于 2020-01-09 14:11:52
题目 思博状压写不出是不是没救了呀 首先我们直接状压当前最大独立集的大小显然是不对的,因为我们的答案还和我们考虑的顺序有关 我们发现最大独立集的个数好像不是很多,可能是 \(O(n)\) 级别的,于是我们考虑从这个方面入手 我们求出所有的最大独立集,考虑求出有多少种考虑顺序能够恰好得到这个最大独立集 设当前已经考虑的点的状态为 \(S\) 时的方案数为 \(dp_S\) 我们考虑枚举出一个不在状态 \(S\) 的点 \(x\) 分两种情况 \(x\) 是最大独立集的点,所以我们可以把这个点加入 \(S\) \(x\) 不是最大独立集的点,我们发现只有当和这个点相邻的且属于最大独立集的点加入 \(S\) ,我们才能加入 \(x\) ,这样 \(x\) 才能不被加入独立集 于是我们这样做就好啦,复杂度是 \(O(2^nn^2)\) ,卡卡常数就过去啦 代码 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define re register #define LL long long #define lb(x) ((x)&(-x)) #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) const

MySQL Execute Plan--Index Merge特性

对着背影说爱祢 提交于 2020-01-08 18:04:50
Index Merge特性 在MySQL 5.5之前版本中,查询或子查询被限制在一个表只能使用一个索引(回表查询除外)。 假设表TB1001上C1和C2列分别有单列索引,如对下面查询: SELECT * FROM TB1001 WHERE C1='XXX' OR C2='XXX'; 单独使用任一索引都无法获取到所有满足条件的数据,因此查询只能使用全表扫描。 在MySQL 5.5版本中引入Index Merge特性,允许: 查询对一个表上多个索引进行范围扫描并将多个扫描结果进行合并(UNION/INTERSECT)。 Index Merge三种合并算法: 1、Index Merge Intersect:对多个结果集求交集 2、Index Merge Union:对多个结果集求UNION集合(无需对结果集排序) 3、Index Merge Sort-Union:对多个结果集先排序再求UNION集合 Index Merge Intersect算法 当查询过滤条件(WHERE部分)上使用AND关联多个不同KEY的过滤条件时,如: # 表TB1001有主键索引PRIMARY KEY(ID) # 表TB1001有辅助索引IDX_C1(C1) 和辅助索引IDC_C2(C2) SELECT * FROM TB1001 WHERE C1='XXX' AND C2='XXX'; 不使用Index

PKUWC2018 随机算法 和 猎人杀

回眸只為那壹抹淺笑 提交于 2020-01-03 08:13:21
随机算法 我们知道,求任意图的最大独立集是一类NP完全问题,目前还没有准确的多项式算法,但是有许多多项式复杂度的近似算法。 例如,小 C 常用的一种算法是: 对于一个 \(n\) 个点的无向图,先等概率随机一个 \(1\ldots n\) 的排列 \(p[1\ldots n]\) 。 维护答案集合 \(S\) ,一开始 \(S\) 为空集,之后按照 \(i=1\ldots n\) 的顺序,检查 \(\{p[i]\}\cup S\) 是否是一个独立集,如果是的话就令 \(S=\{p[i]\}\cup S\) 。 最后得到一个独立集 \(S\) 作为答案。 小 C 现在想知道,对于给定的一张图,这个算法的正确率,输出答案对 \(998244353\) 取模 对于 \(100\%\) 的数据,有 \(1\leq n\leq 20,0\leq m\leq \frac{n\times (n-1)}{2}\) ,保证给定的图没有重边和自环。 题解 直接做的话设 \(dp(s,t)\) 表示排列出现了 \(s\) 中的点,独立集为 \(t\) 的概率。 \(O(3^nn)\) 显然不行。 构造:不随机 \(1\sim n\) 的排列,每次独立随机一个点看是否能加入独立集。如果不能则继续随机,知道能加入为止。 易证这两种方式是等价的。虽然我们只维护了 \(t\) ,但 \(s\)

林轩田机器学习 | 机器学习技法课程笔记10 --- Random Forest

空扰寡人 提交于 2019-12-31 21:28:27
上节课我们主要介绍了Decision Tree模型。Decision Tree算法的核心是通过递归的方式,将数据集不断进行切割,得到子分支,最终形成树的结构。C&RT算法是决策树比较简单和常用的一种算法,其切割的标准是根据纯度来进行,每次切割都是为了让 分支内部纯度最大。最终,决策树不同的分支得到不同的 (即树的叶子,C&RT 算法中, 是常数)。本节课将介绍随机森林(Random Forest)算法,它是我们之前介绍的Bagging和上节课介绍的Decision Tree的结合。 目录 1. Random Forest Algorithm 2. Out-Of-Bag Estimate 3. Feature Selection 4. Random Forest in Action 5. 总结 1. Random Forest Algorithm 首先我们来复习一下之前介绍过的两个机器学习模型:Bagging和Decision Tree。 Bagging是通过bootstrap的方式,从原始的数据集D中得到新的 ;然后再使用一些 base algorithm基于每个 训练得到相应的 ;最后将所有的 通过投票uniform的形式组合成一个G,G即为我们最终得到的模型/假设。Decision Tree是通过递归形式,利用分支条件,将原始数据集D切割成一个个子树结构,长成一棵完整的树形结构

随机地图生成算法 Wave Function Collapse相关 翻译(github说明,论文等)

人走茶凉 提交于 2019-12-28 11:23:16
WaveFunctionCollapse相关 翻译 github的README Algorithm 算法 持续更新中,未完,预计2019年年底将此算法重要的文章都翻译完 github的README Algorithm Read the input bitmap and count NxN patterns. (optional) Augment pattern data with rotations and reflections. Create an array with the dimensions of the output (called “wave” in the source). Each element of this array represents a state of an NxN region in the output. A state of an NxN region is a superposition of NxN patterns of the input with boolean coefficients (so a state of a pixel in the output is a superposition of input colors with real coefficients). False coefficient means

权重随机算法的java实现

故事扮演 提交于 2019-12-28 00:43:52
本文转载自: https://www.cnblogs.com/waterystone/p/5708063.html 作者:waterystone 转载请注明该声明。 一、概述   平时,经常会遇到权重随机 算法 ,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的。如广告投放、负载均衡等。   如有4个元素A、B、C、D,权重分别为1、2、3、4,随机结果中A:B:C:D的比例要为1:2:3:4。    总体思路 :累加每个元素的权重A(1)-B(3)-C(6)-D(10),则4个元素的的权重管辖区间分别为[0,1)、[1,3)、[3,6)、[6,10)。然后随机出一个[0,10)之间的随机数。落在哪个区间,则该区间之后的元素即为按权重命中的元素。    实现方法 : 利用TreeMap,则构造出的一个树为:     B(3)     / \ / \ A(1) D(10) / / C(6) 然后,利用treemap.tailMap().firstKey()即可找到目标元素。 当然,也可以利用 数组+二分查找 来实现。 二、源码 package com.xxx.utils; import com.google.common.base.Preconditions; import org.apache.commons.math3.util.Pair; import

深入探索迭代器(续)

a 夏天 提交于 2019-12-27 03:11:17
【 3. 反向迭代器】 反向迭代器是一种反向遍历容器的迭代器。其将自增(和自减)的含义反过来了: 对于反向迭代器,++ 运算将访问前一个元素,而 -- 运算则访问下一个元素。 所有容器还定义了 rbegin 和 rend 成员,分别返回指向容器尾元素和首元素前一位置的反向迭代器。 与普通迭代器一样,反向迭代器也有常量(const)和非常量(nonconst)类型。 图 11.1 使用一个假设名为 vec 的 vector 类型对象阐明了这四种迭代器之间的关系。 假设有一个 vector 容器对象,存储 0-9 这 10 个以升序排列的数字: vector<int> vec; for (vector<int>::size_type i = 0; i != 10; ++i) vec.push_back(i); // elements are 0,1,2,...9 下面的 for 循环将以逆序输出这些元素: // reverse iterator of vector from back to front vector<int>::reverse_iterator r_iter; for (r_iter = vec.rbegin(); // binds r_iter to last element r_iter != vec.rend(); // rend refers 1 before

论文《PatchMatch Filter: Efficient Edge-Aware Filtering Meets Randomized Search for Fast Corresponde》学习

天涯浪子 提交于 2019-12-26 02:41:38
Abstract (2013CVPR)虽然计算机视觉中的许多任务可以被优雅地形式化为像素标记问题,但一个典型的挑战是不鼓励这样的离散公式往往是由于计算效率。近年来,基于高效边缘感知滤波器的快速成本体积滤波研究为解决离散标记问题提供了一种快速的替代方案,其复杂性与支持的尺寸无关。然而,这些方法仍然需要遍历整个成本卷,这使得解决方案的速度与标签空间大小成线性关系。当标签空间很大时,通常是(亚像素精确的)立体和光流估计的情况,它们的计算复杂度很快变得无法接受。为了快速搜索最近邻,PatchMatch方法可以显著降低复杂度对搜索空间大小的依赖。但其像素级随机搜索和三维代价体积内的碎片化数据访问严重阻碍了有效代价片滤波的应用。本文提出了一种通用的快速多标记问题的计算框架,称为PatchMatch Filter (PMF)。我们第一次探索了有效和高效的策略,将这两种独立开发的基本技术编织在一起。、基于补丁的随机搜索和有效的边缘感知图像滤波。通过将图像分解为紧凑的超像素,我们提出了基于超像素的新搜索策略,对原有的PatchMatch方法进行了改进和推广。以稠密对应场估计为重点,论证了PMF在立体光流中的应用。我们的PMF方法达到了最先进的通信精度,但运行速度比其他竞争方法快得多,通常为大标签空间的情况提供10倍以上的加速。 1. Introduction 许多计算机视觉任务,如立体视觉

机器学习:集成学习:随机森林.GBDT

一曲冷凌霜 提交于 2019-12-25 00:45:05
集成学习(Ensemble Learning) 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(error rate < 0.5); 集成算法的成功在于保证弱分类器的多样性(Diversity).而且集成不稳定的算法也能够得到一个比较明显的性能提升 常见的集成学习思想有: Bagging Boosting Stacking Why need Ensemble Learning? 1. 弱分类器间存在一定的差异性,这会导致分类的边界不同,也就是说可能存在错误。那么将多个弱分类器合并后,就可以得到更加合理的边界,减少整体的错误率,实现更好的效果; 2. 对于数据集过大或者过小,可以分别进行划分和有放回的操作产生不同的数据子集,然后使用数据子集训练不同的分类器,最终再合并成为一个大的分类器; 3. 如果数据的划分边界过于复杂,使用线性模型很难描述情况,那么可以训练多个模型,然后再进行模型的融合; 4. 对于多个异构的特征集的时候,很难进行融合,那么可以考虑每个数据集构建一个分类模型,然后将多个模型融合。 Bagging方法 Bagging方法又叫做自举汇聚法(Bootstrap Aggregating),思想是:在原始数据集上通过有放回的抽样的方式

PCL点云随机采样一致性分割算法

巧了我就是萌 提交于 2019-12-23 01:06:25
最近在学习点云的分割算法,目前了解到有两种分割算法,一种是聚类分割算法,一种是随机采样一致性算法,聚类算法上篇文章已经有所提及。今天分析下随机采样一致性算法,然后代码理解; RANSAC随机采样一致性算法介绍 RANSAC是”RANdom SAmple Consensus(随机抽样一致)”的缩写,随机采样一致性算法是一种概率性的算法,有时为了提高有效数据的概率,需要增加迭代次数, 数据一般分为两种:有效数据(inliers)和无效数据(outliers),和目标数据相差不大的数据为有效数据,相差比较大的数据为无效数据。 如果有效数据占据大多数的话,无效数据只有一少部分,我们可以通过最下二乘法或者类似的方法进行确定模型的参数和误差,如果无效数据很多,最下二乘法就失效了,需要新的算法进行。 RANSAC算法的概述 RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点。通过下述的方法进行验证: 有一个模型适用于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。 用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。 如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。 然后,用所有假设的局内点去重新估计模型