算法

loj2540 「PKUWC 2018」随机算法

假装没事ソ 提交于 2020-01-09 14:28:12
题意: https://loj.ac/problem/2540 给定一个图(n<=20),定义一个求最大独立集的随机化算法 产生一个排列,依次加入,能加入就加入 求得到最大独立集的概率 loj2540 「PKUWC 2018」随机算法 本质就是计数题 每个点有三种状态:考虑过且在独立集中,考虑过未在独立集中,未考虑 本来在集合里的点不能知道有哪些,而且不能加入的点的排列也不好确定。 一个好的方法是:把考虑过的点放在一起 然后在加入一个点的时候,把其他不能加入的点都考虑上,并处理方案数。 设f[i][S]表示,独立集大小为i,不能再选择的点集合是S的方案数 每次选择一个能加入的点j,然后更新能选择的集合和集合大小,顺便处理排除掉的点的方案数 就是一个排列,其实就是把后面尚未考虑的位置加入一下, 注意这里不用考虑j的位置,j位置钦定为从前往后第一个能选择的位置 i从n往下找到第一个方案数不是0的f[k][全集] 最后乘上n!的逆元即可 O(n^2*2^n)传说可过 对于不可以选择的集合S,对应的最大独立集确定 mxS记录S集合最大独立集 所以类似最短路条数,mxS更新的时候,把方案数设成0 这样也能求出最大独立集方案数。 O(n*2^n) 思路有点类似某次模拟赛T3,我在加入一个数的时候,就把能产生的贡献和影响都计算上 因为只有在枚举这个转移的时候才知道加入的哪个点

Python KNN算法

僤鯓⒐⒋嵵緔 提交于 2020-01-09 05:00:11
  机器学习新手,接触的是《机器学习实战》这本书,感觉书中描述简单易懂,但对于python语言不熟悉的我,也有很大的空间。今天学习的是k-近邻算法。    1. 简述机器学习   在日常生活中,人们很难直接从原始数据本身获得所需信息。 而机器学习就是把生活中无序的数据转换成有用的信息。 例如,对于垃圾邮件的检测,侦测一个单词是否存在并没有多大的作用,然而当某几个特定单词同时出现时,再辅以考虑邮件的长度及其他因素,人们就可以更准确地判定该邮件是否为垃圾邮件。   机器学习分为 监督学习 和 无监督学习 ,其中:   (1) 监督学习: 包含分类和回归。分类,是将实例数据划分到合适的分类中。回归,主要用于预测数值形数据。因为这类算法必须知道预测什么,即目标变量的分类信息,所以称为监督学习。   (2) 无监督学习 :此时数据没有类别信息,不能给定目标值。在无监督学习中,将数据集合分成由类似的对象组成的多个类的过程称为 聚类 ,将寻找描述数据统计值的过程称为 密度估计 ,此外,无监督学习还可以减少数据特征的维度,以便我们可以使用二维或三维图形更加直观地展示数据信息。   以下是机器学习的主要算法:   监督学习: k-近邻算法(KNN) ,朴素贝叶斯算法,支持向量机(SVM),决策树        线性回归,局部加权线性回归,Ridge回归,Lasso最小回归系数估计   无监督学习:K

虚存技术(下)

五迷三道 提交于 2020-01-08 23:53:24
请求分页系统建立在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。 在请求分页系统中,只要求将当前需要的一部分页面装入内存,以便可以启动作业运行。在作业执行过程中,当所要访问的页面不在内存时,再通过雕爷功能将其调入,同时还可以通过置换功能将暂时不用的页面换出到外存上,以便腾出内存空间。 页面置换算法的主要目标是使页面置换频率最低(也可以说缺页率最低)。 常见的页面置换算法有以下几种: 1、最佳置换算法(Optimal,OPT) 2、先进先出页面置换算法(First In First Out,FIFO) 3、最近最久未使用( Least Recently Used,LRU)置换算法 4、第二次机会算法 5、时钟算法(clock) 6、改进时钟算法 7、最不常用算法(LFU,Least Frequently Used) 1、最佳置换算法(Optimal,OPT) 所选择的被换出的页面将是以后永不使用的,或者是在最长时间内不再被访问,通常可以保证获得最低的缺页率。但是由于人们无法预知一个页面多长时间不再被访问,因此该算法是一种理论上的算法。最佳置换算法可以用来评价其他算法。 举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列: 开始运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2

算法——几种查找算法的比较和应用

孤街醉人 提交于 2020-01-08 23:30:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 几种基础查找方法的 性能比较 : 算法(数据结构) 查找(最坏) 插入(最坏) 查找命中(平均) 插入(平均) 插入(平均)是否支持有序性相关操作 顺序查询(无序联播) N N N/2 N 否 二分查找(有序数组) lgN N lgN N/2 是 二叉树查找(二叉查找树) N N 1.39lgN 1.39lgN 是 2-3树查找(红黑树) 2lgN 2lgN 1.00lgN 1.00lgN 是 拉链法(链表数组) <lgN <lgN N/(2M) N/M 否 线性探测法(并行数组) clgN clgN <1.5 <2.5 否 顺序查找 :在表中查找一个不存在的键时,我们会将表中每个键和给定的键比较(N)。因为不允许出现重复的键,每次插入操作之前我们都需要这样查找一遍。 推论: 向一个空表中插入N个不同的键需要~N²/2次比较。 二分查找 :在N个键的有序数组中进行二分查找最多需要(lgN+1)次比较(无论是否成功)。插入一个新的元素在最坏情况下要访问~2N次数组。 推论: 向一个空表中插入N个不同的键需要~N²/2次比较。 二叉树查找 :使用二叉查找树的算法运行时间取决于树的形状。最好的情况下含有N个节点的树是完全平衡的,每条空链和根节点的距离都为~lgN;最坏情况下,搜索路径上可能有N个节点

JVM垃圾回收

隐身守侯 提交于 2020-01-08 15:33:53
1. 概念理解 1.1. 并行(Parallel)与并发(Concurrent) 并行:指多个垃圾收集线程并行工作,但此时用户线程仍然处于等待状态 并发:指用户线程与垃圾收集线程同时执行 1.2. Minor GC 与 Major GC Minor GC:指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。 Major GC:指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor GC。Major GC的速度一般会比Minor GC慢10倍以上。 1.3. 吞吐量 吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间 /(运行用户代码时间 + 垃圾收集时间) 假设虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99% 2. 对象存活判断 回收的第一步是标记出哪些需要回收,为此需要有一种方式来判断对象是否存活,存活的不用回收 判断的方式是可达性分析,通过遍历对象的引用树来找出存活的对象 所谓的引用树本质上是有根的图结构,它沿着对象的根句柄向下查找到活着的节点,并标记下来;其余没有被标记的节点就是死掉的节点,这些对象就是可以被回收的 遍历从GC Roots开始,那么哪些对象可作为GC Roots对象? 虚拟机栈中应用的对象

第一章:机器学习基础

∥☆過路亽.° 提交于 2020-01-08 04:23:38
第一部分:分类 本书前两部分主要探讨监督学习(supervisedieaming)。在监督学习的过程中,我们只需要给定 输入样本集 ,机器就可以从中推演出指定 目标变量 的可能结果。监督学习相对比较简单,机器只需从输入数据中 预测合适的模型 ,并从中 计算出目标变量的结果 。 监督学习一般使用两种类型的目标变量:标称型和数值型。标称型目标变量的结果只在有限目标集中取值,如真与假、动物分类集合{爬行类、鱼类、哺乳类、两栖类、植物、真菌};数值型目标变量则可以从无限的数值集合中取值,如0.100、42.001、000.743等。 数值型目标变量主要用于回归分析 ,将在本书的第二部分研究, 第一部分主要介绍分类 。 本书的前七章主要研究分类算法,第2 章讲述最简单的分类算法:k-近邻算法,它使用距离矩阵进行分类;第3 章引入了决策树,它比较直观,容易理解,但是相对难于实现;第4 章将讨论如何使用概率论建立分类器;第5 章将讨论Logistic 回归,如何使用最优参数正确地分类原始数据,在搜索最优参数的过程中,将使用几个经常用到的优化算法;第6 章介绍了非常流行的支持向量机;第一部分最后的第7 章将介绍元算法— AdaBoost, 它由若干个分类器构成,此外还总结了第一部分探讨的分类算法在实际使用中可能面对的非均衡分类问题,一旦训练样本某个分类的数据多于其他分类的数据

聊聊密码学中的DES算法

回眸只為那壹抹淺笑 提交于 2020-01-08 00:24:57
用心分享,共同成长 没有什么比你每天进步一点点更实在了 本文已经收录至我的github,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles  今天要说点和你的隐私有关的事情,在这个信息化的时代,是不是真的有人一手握着你的信息,一手数着钞票呢?答案一定是 当然 。  说到网络安全,我就不得不提一个东西—— 密码学 (是不是听起来头皮发麻心跳加速),稳住稳住,老司机上线带你学。今天给大家say&see什么是密码学中的 DES 。 简介   DES : English Name:Data Encrytion Standard 中文名:DES 算法,数据加密标准 是迄今为止世界上最为广泛使用和流行的一种分组密码算法。(听到这里有没有感觉有点东西) 1、参数介绍: data(加解密的数据):64bit的明文或者密文需要被加密或被解密的数据 key(加解密的密钥):8Byte,64bit密钥(56bit密钥+8bit奇偶校验位) mode(工作模式):加密或者解密的工作流程 2、工作流程: WechatIMG112 3、初始IP置换:  DES算法使用64位的密钥key将64位的明文输入块变为64位的密文输出块,并把输出块分为L0、R0两部分,每部分均为32位。左部分Li=Ri-1,右部分Ri=Li-1⊕F(Ri-1,Ki)

人工智能发展及算法

馋奶兔 提交于 2020-01-08 00:16:21
1、智能的分类:感知——》记忆和思维——》学习和自适应——》决策与执行 2、发展历史与大事件 3、人工智能分类: (1)弱人工智能:特定领域,感知与记忆存储,如图像识别,语音识别; (2)强人工智能:多领域综合,认知学习与决策执行,如自动驾驶; (3)超人工智能:超越人类的智能,独立意识与创新创造; 4、基础、技术、与应用层 5、从数据处理看pc-互联网-物联网-人工智能的发展 6、人工智能的关键,机器学习算法概览 来自为知笔记(Wiz) 来源: https://www.cnblogs.com/doit8791/p/6058999.html

开发两年,跳槽字节跳动,三面斩获Offer,定级P6(Java研发岗)

為{幸葍}努か 提交于 2020-01-07 21:27:06
前言 时间过得飞快,一代又一代就这么成长了起来,曾经的95后备受争议,如今的95后进入社会,扮演者各行角色,成为了行业顶梁柱,今天,要分享的是自己的成长经历。今年24岁,毕业之后进入一家小型的互联网公司工作,名字就不说了,算是熟知的,在这家公司呆了两年,直至今年才有了跳槽的想法。 每个人都拥有大厂梦,我也不例外,在小公司待久了,感觉人会荒废掉,太轻松,没有压迫感。在众多大厂中,最终选择了字节跳动。“年轻、活力、富有激情”是我听到得最多对它的形容词,所以毅然决然,希望自己能够在这个舞台上展示出自己。 以下分享这次面试字节跳动的面试题,另外还对自己的面试做了一些总结,总结里含有一些学习方法和资历, 如果您需要我说的这些资料,加入我的java架构师训练营群( 859765394 )即可免费获取到,点击群号即可免费获取! 字节跳动三面斩获Offer,定级P6(技术题,不含HR面) 态类的关系,组合和聚合的区别、哪个关系更紧密? 说一下反射,及你在项目中的应用 线程池,线程池参数 线程间的通信 介绍ThreadLocal ConcurrentHashMap,JDK1.7和1.8的不同实现 Hash算法 什么是时间复杂度? 问项目,项目中数据库的结构设计,整体框架等 用过数据库索引吗?介绍如何使用,何时使用? 介绍B树、B+树、红黑树 数据库分页查询,如何分页,怎么实现? 四种隔离级别