概率算法(随机化算法)
概率算法也叫随机化算法。概率算法允许算法在执行过程中随机地选择下一个计算步骤。在很多情况下,算法在执行过程中面临选择时,随机性选择比最优选择省时,因此概率算法可以在很大程度上降低算法的复杂度。概率算法的一个基本特征是对所求解问题的同一实例用同一概率算法求解两次可能得到完全不同的效果。这两次求解问题所需的时间甚至所得到的结果可能会有相当大的差别。
概率算法大致分为四类:
- 数值概率算法
- 蒙特卡罗(Monte Carlo)算法
- 拉斯维加斯(Las Vegas)算法
- 舍伍德(Sherwood)算法
基本特征
- 随机决策。
- 在同一实例上执行两次其结果可能不同。
- 在同一实例上执行两次的时间亦可能不太相同。
特点
- 不可再现性:在同一个输入实例上,每次执行结果不尽相同,例如N-皇后问题,概率算法运行不同次将会找到不同的正确解;找一给定合数的非平凡因子, 每次运行的结果不尽相同,但确定算法每次运行结果必定相同
- 分析困难:要求有概率论,统计学和数论的知识。
大致分类(四类)
概率算法的一个基本特征是对所求解问题的同一实例用同一概率算法求解两次可能得到完全不同的效果。这两次求解问题所需的时间甚至所得到的结果可能会有相当大的差别。
数值概率算法
数值概率算法常用于数值问题的求解。这类算法所得到的往往是近似解。而且近似解的精度随计算时间的增加不断提高。在许多情况下,要计算出问题的精确解是不可能或没有必要的,因此用数值概率算法可得到相当满意的解。
蒙特卡罗算法
蒙特卡罗算法用于求问题的准确解。蒙特卡洛算法1945年由冯诺依曼行核武模拟提出的。它是以概率和统计的理论与方法为基础的一种数值计算方法,它是双重近似:
1 . 用概率模型模拟近似的数值计算;
2 . 用伪随机数模拟真正的随机变量的样本。
对于许多问题来说,近似解毫无意义。例如,一个判定问题其解为“是”或“否”,二者必居其一,不存在任何近似解答。又如,我们要求一个整数的因子时所给出的解答必须是准确的,一个整数的近似因子没有任何意义。用蒙特卡罗算法能求得问题的一个解,但这个解未必是正确的。求得正确解的概率依赖于算法所用的时间。算法所用的时间越多,得到正确解的概率就越高。蒙特卡罗算法的主要缺点就在于此。一般情况下,无法有效判断得到的解是否肯定正确。
拉斯维加斯算法
拉斯维加斯算法不会得到不正确的解,一旦用拉斯维加斯算法找到一个解,那么这个解肯定是正确的。但是有时候用拉斯维加斯算法可能找不到解。与蒙特卡罗算法类似。拉斯维加斯算法得到正确解的概率随着它用的计算时间的增加而提高。对于所求解问题的任一实例,用同一拉斯维加斯算法反复对该实例求解足够多次,可使求解失效的概率任意小。
舍伍德算法
舍伍德算法总能求得问题的一个解,且所求得的解总是正确的。当一个确定性算法在最坏情况下的计算复杂性与其在平均情况下的计算复杂性有较大差别时,可以在这个确定算法中引入随机性将它改造成一个舍伍德算法,消除或减少问题的好坏实例间的这种差别。舍伍德算法精髓不是避免算法的最坏情况行为,而是设法消除这种最坏行为与特定实例之间的关联性。
概率算法(随机化算法)相关推荐
- 随机化算法-----模拟退火
一 概念 模拟退火(Simulated Annealing,简称SA)是一种通用概率算法(随机化算法),用来在一个大的搜寻空间内找寻命题的最优解. 随机化算法是这样一种算法,在算法中使用了随机函数,且 ...
- 算法小课堂(十)随机化算法
目录 一.概述 1.1概念 1.2分类 二.数值随机化算法 2.1随机数 2.2用随机投点法计算Π值 2.3随机投点法计算定积分 三.舍伍德(Sherwood)型随机化算法 3.1随机洗牌算法 3.2 ...
- 0046算法笔记——【随机化算法】舍伍德随机化思想解决跳跃表问题
问题描述 如果用有序链表来表示一个含有n个元素的有序集S,则在最坏情况下,搜索S中一个元素需要O(n)计算时间.提高有序链表效率的一个技巧是在有序链表的部分结点处增设附加指针以提高其搜索性能.在增设附 ...
- 算法积分0042算法笔记——【随机化算法】计算π值和计算定积分
最近研究算法积分,稍微总结一下,以后继续补充: 1.盘算π值 问题描述 设有一半径为r的圆及其外切四边形.向该正方形随机地投掷n个点.设落入圆内的点数为k.由于所投入的点在正方形上平均分布,因而所投入 ...
- 随机化算法-数值随机化算法
随机数 随机数在随机化算法设计中扮演着十分重要的角色.在现实计算机上无法产生真正的随机数,因此在随机化算法中使用的随机数都是一定程度上随机的,即伪随机数. 线性同余法是产生伪随机数的最常用的方法.由线 ...
- 数值随机化算法和舍伍德随机算法
开篇 我们之前讨论过的动态规划算法.回溯法.分支限界算法.二分法等等都是每个计算步骤确定的算法,而这次要讨论的是随机化算法,允许算法在执行过程中随机地选择下一个计算步骤. 随机化算法不一定是最优的,甚 ...
- schrage方法c语言编程软件,C++: 详解 使用Schrage's Method Revealed 实现随机化算法
C++: 详解 使用Schrage's Method Revealed(随机化算法) 标签: C++ 随机化算法 Schrage by 小威威 在了解Schrage's Method Revealed ...
- 快速排序的随机化算法C语言版
快速排序的随机化算法C语言版 #include<stdio.h> #include<stdlib.h> void quicksort(int *a, int left, int ...
- 0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题
1.蒙特卡罗算法 基本概述 蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法.传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地 ...
- 【算法学习】随机化算法 随机数生成器和mt19937
文章目录 1. 伪随机数 2. 模运算 3. 乘同余法随机数生成器 (1) 原理 (2) 程序实现 4. 混合同余法 5. mt19937 1. 伪随机数 Treap.跳跃表和随机快速排序等需要用到随 ...
最新文章
- mysql length函数无法对字段值为null的筛选
- PMP-【第14章 五大过程组的工作要点】2021-2-17(292页-303页)
- Java多线程(2)—线程同步
- 从实例入手学习使用vue+axios配置代理进行跨域访问百度音乐API
- 滴滴开源Android插件化框架VirtualAPK原理分析
- AngularJS HTML DOM
- wxWidgets:wxPropertySheetDialog类用法
- linux安装字体时找不到mkfontscale、mkfontdir
- js中的prototype的理解
- 高度为5的3阶b树含有的关键字个数_数据结构要考得好,你心里要有B树
- 计算机网络常见英文缩写
- 为什么[]比list()更快?
- Maven环境变量配置及是否成功
- UCHome二次开发 模板基础语法
- Java练习题——方法(基础版)
- 搜狗推送接口之搜狗秒收录技巧分享
- dell服务器分区表修复,如何修复被Partition Magic损坏的分区表
- Python编程之找完数
- 查看github的IP地址
- Java核心技术 卷Ⅰ 基础知识(原书第10版)