算法

关于EM算法

这一生的挚爱 提交于 2020-03-10 23:45:06
EM算法的简介 1.什么是EM算法 最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。 最大期望算法经过两个步骤交替进行计算, 第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值; 第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。 2.举例 比如说抛硬币的例子,如果说有两个硬币A和B,每次抛之前知道是A还是B,那么,可能的结果会如下图所示: 但,如果要是在抛硬币之前,不知道硬币的种类,那么情况就会变得更复杂了,在不知道硬币的前提下,那么硬币的种类就成了一个隐形的变量,具体如下图: 在这种情况下,我们可以如上图所示,这样来解决这个问题,既然在丢硬币之前不知道硬币到底是A还是B,那么我们可以事先先假定一个这样的隐形变量为z,然后设定初始A硬币出现正面的概率p(A)为0.6,硬币出现正面的概率p(B)为0.5,那么就可以按照上图,根据抽样几次的结果,用极大似然估计出每一次Z的值,即具体是A还是B,然后再反过来算p(A)和p(B),最后更新,以此循环,直到收敛即可求得最后的概率。 3.基本的公式推导 来源: CSDN 作者:

数据结构

自闭症网瘾萝莉.ら 提交于 2020-03-10 22:16:20
数据结构学习 数据结构简介 线性结构 树 图 散列查找 排序 数据结构简介 维基百科:数据结构是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最有效率的算法。 数据结构:涵盖(1)数据对象(2)其组织方式[逻辑存储、物理存储](3)操作集(4)实现操作的最高效算法 解决问题的效率与数据的组织方式有关,跟空间利用效率有关,也与算法的巧妙程度有关。 “数据结构”包括数据对象集以及它们在计算机中的组织方式,即它们的逻辑结构和物理存储结构,同时还包括与数据对象集相关联的操作集,以及实现这些操作的最高效的算法。抽象数据类型是用来描述数据结构的重要工具。 “算法”是解决问题步骤的有限集合,通常用某一种计算机语言进行伪码描述。我们用时间复杂度和空间复杂度来衡量算法的优劣,用渐进表示法分析算法复杂度的增长趋势。 线性结构 数据的组织方式:(1)逻辑结构:线性、树、图 (2)物理存储结构:数组、链表 线性表 :是由同一类型的数据元素构成的有序序列的线性结构 线性表:顺序存储实现;链式存储实现 广义表:是线性表的推广,元素不仅可以是单元素也可以是另一个广义表;多重链表:存在结点属于多个链的链表,指针域会有多个(双向链表不是多重链表)。 堆栈 :具有一定约束的线性表,插入和删除操作都作用在一个称为栈顶的端点位置。 队列 :具有一定操作约束的线性表,只能在一端插入,而在另一端删除。

缓存算法(页面置换算法)-FIFO、LFU、LRU

天大地大妈咪最大 提交于 2020-03-10 16:38:39
转自:http://www.cnblogs.com/dolphin0520/ 1.FIFO算法   FIFO(First in First out),先进先出。其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为什么这个原则在很多地方都会用到呢?因为这个原则简单、且符合人们的惯性思维,具备公平性,并且实现起来简单,直接使用数据结构中的队列即可实现。   在FIFO Cache设计中,核心原则就是: 如果一个数据最先进入缓存中,则应该最早淘汰掉 。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉。在FIFO Cache中应该支持以下操作;    get(key):如果Cache中存在该key,则返回对应的value值,否则,返回-1;   set(key,value):如果Cache中存在该key,则重置value值;如果不存在该key,则将该key插入到到Cache中,若Cache已满,则淘汰最早进入Cache的数据。    举个例子:假如Cache大小为3,访问数据序列为set(1,1),set(2,2),set(3,3),set(4,4),get(2),set(5,5)   则Cache中的数据变化为:   (1,1) set(1,1)   (1,1) (2,2) set(2,2)   (1,1) (2,2) (3,3) set

算法

萝らか妹 提交于 2020-03-10 16:06:39
1. 判断一个数是否为奇数 if ( ( data & 0x1U ) == 0x1U ) { //为奇数 } 来源: CSDN 作者: qq_40104597 链接: https://blog.csdn.net/qq_40104597/article/details/104774499

lru算法实现-php数组

一世执手 提交于 2020-03-10 15:49:53
//php实现lru算法缓存 LRU:最近最少使用策略LRU(Least Recently Used) //思路分析: 越靠近头部为新数据或者最新访问的数据 class AlgLruCache { private $lruData; private $capacity; //容量 private $length; //数据大小 public function __construct($capacity) { $this->capacity = intval($capacity); $this->lruData = []; $this->length = 0; } public function getValue() { return $this->lruData; } public function setValue($v) { //已存在 移动到头部 if (in_array($v, $this->lruData)) { $this->delVal($v); $this->inserHead($v); return true; } //已满 if ($this->checkIsFull()) { $this->delEndVal();; } $this->inserHead($v); return true; } //数组是否已满 protected function

遗传算法与MATLAB

。_饼干妹妹 提交于 2020-03-10 13:28:47
遗传算法与MATLAB (一)遗传算法:遗传算法是模拟达尔文生物进化论的自然选择和遗传机理的生物进化过程的计算模型,是一种模拟自然进化过程搜索最优解的方法。 (二)应用层面:遗传算法存在自身缺陷性,如搜索的最优解并不是我们想要的,该算法是逼近最优解,所以常用来研究各种非线性、多变量、多目标、复杂的自适应系统问题(涵盖类:实验数据处理,图像处理,数值拟合等)。 (三)遗传算法的六大基本特征 (1)智能式搜索:目标函数是基础 (2)渐进式优化:利用、复制、交换、突变等操作,使下一代结果优于上一代 (3)全局最优解:利用交换和突变操作产生的新个体,使得搜索得到的优化结果逼近全局最优解 (4)黑箱式结构:只考虑输入和输出关系的黑箱式结构 (5)通用性强:不要求明确的数学表达式,框架式算法 (6)并行式运算:每次迭代都是对种群的所有个体进行运算,搜索速度快,效率高 (四)基本过程(如下图) (1)编码、随机产生的初始种群 (2)个体评价、确定是否输出 (2)选择操作 (3)随机交叉运算 (4)随机变异运算 (5)转向个体评价,开始循环 (五)编码:遗传算法的工作对象是字符串 (六)适应度:衡量个体优劣的尺度,由适应度来决定个体的繁殖数量、是否存活、适应度是驱动遗传算法的动力 (七)复制:复制算子将优良的个体在下一代予以繁殖,体现了“适者生存”自然选择原则。复制的数量是按适应度的大小来决定的。

面试笔记 | 排序算法

非 Y 不嫁゛ 提交于 2020-03-10 12:37:20
引用于 菜鸟教程 排序算法 01 堆排序 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列; 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列; 02 快速排序 03 归并排序 来源: CSDN 作者: 大虎牙 链接: https://blog.csdn.net/qq_34170700/article/details/104769866

数据结构与算法系列十一(冒泡排序)

时光总嘲笑我的痴心妄想 提交于 2020-03-10 11:19:02
1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法? 我想好了,还是需要学习数据结构与算法。但是我有两个困惑: 1.如何着手学习呢? 2.有哪些内容要学习呢? 学习方法推荐: #学习方法 1.从基础开始,系统化学习 2.多动手,每一种数据结构与算法,都自己用代码实现出来 3.思路更重要:理解实现思想,不要背代码 4.与日常开发结合,对应应用场景 学习内容推荐: 数据结构与算法内容比较多,我们本着实用原则,学习经典的、常用的数据结构、与常用算法 #学习内容: 1.数据结构的定义 2.算法的定义 3.复杂度分析 4.常用数据结构 数组、链表、栈、队列 散列表、二叉树、堆 跳表、图 5.常用算法 递归、排序、二分查找 搜索、哈希、贪心、分治 动态规划、字符串匹配 2.考考你 在上一篇: 数据结构与算法系列十(排序概述) 中,我们列举了常用的排序算法

A5/1流加密理解和算法实现

爱⌒轻易说出口 提交于 2020-03-10 09:47:10
算法理解 ​ A5/1加密算法用于GSM蜂窝电话网络中的数据机密性加密,其使用3个线性反馈移位寄存器简称LFSR,分别为X 19位,Y 22位,Z 23位。 ​ 加解密的过程是固定流程的,只需要按照方法进行轮计算即可,具体方法参考: https://www.cnblogs.com/gambler/p/9074356.html 这个博客是我找的写的比较清楚明白的了,不要试图去理解为什么这个算法要那么做,因为他就是那样,就像我为什么长着手。 python实现 其实用C语言实现比较快,但是最近在学python,所以。。。。。 代码: X = '1010101010101010101' Y = '1100110011001100110011' Z = '11100001111000011110000' n=int(input()) for i in range(n): maj = int(X[8]) + int(Y[10]) + int(Z[10]) if maj >= 2: m = 1 else: m = 0 if int(X[8]) == m: #判断是否要为首位赋值 x0 = int(X[13]) ^ int(X[16]) ^ int(X[17]) ^ int(X[18])#求0位值 t = str(bin((int(X, 2) >> 1))) #移位操作 X = t[2:] #

数据结构与算法之集合

这一生的挚爱 提交于 2020-03-10 09:38:43
目录 (一) 定义 (二) 自定义集合 1.基于二分搜索树的集合实现 2.基于链表的集合实现 (三) 时间复杂度分析 (一) 定义 承载元素的一个容器, 容器中的元素无序且唯一(不重复). 实现集合的方式多种多样, 在JAVA语言表现中, 会将集合定义成一个接口, 提供集合对应的操作的抽象方法. /** * 自定义集合抽象类Set * * @author Administrator * */ public interface Set < E > { /** * 向集合中添加元素e, 集合元素不重复 * * @param e */ void add ( E e ) ; /** * 从集合中删除元素e * * @param e */ void remove ( E e ) ; /** * 集合是否包含元素e * * @param e * @return */ boolean contains ( E e ) ; /** * 集合的元素个数 * * @return */ int getSize ( ) ; /** * 集合是否为空 * * @return */ boolean isEmpty ( ) ; } (二) 自定义集合 1.基于二分搜索树的集合实现 public class BSTSet < E extends Comparable < E > > implements Set