对于非常多应用来说,随机算法是最简单的或者最快的。既简单又快的有没有呢?
那须要深刻的洞察力或者革命性的突破。
什么是随机算法
随机算法与确定算法差别是:它还接收输入随机比特流来做随机决策。
对于同一个输入,每次执行所用的算法行为都不同,尽管结果都是一样的。
Foiling an adversary
能够构造一个输入使得一个确定性算法执行时间最长。
随机算法能够看作是从一族算法中随机选出来的一个算法。
高速排序O(NlgN)的精髓在于随机化划分。
高速的意思是常数因子是1.38。
标准库里面採用小规模插入排序,非递归化,三分能进一步提高20%的速度。
理想情况是均分两个子问题。
假设每次都分为9:1,
T(n) = T(9n/10) + T(n/10) + cn。
则递归树高度是log_{10/9} n = ?
lgn。
假设输入是已经排好顺序的,则随机化
则打破这样的顺序。
有没有可能反而随机成一个升序或者降序呢?
概率是1/N!, 这么小的概率我们觉得不可能发生的(当然。严格实时系统除外)。
因此我们高概率的觉得执行时间是期望的。
线性时间的选择算法用在动态/在线输入情景时才有意义。
假设是静态输入,我们能够对整个输入做随机排列。
动态输入由于在某一个时刻仅仅看到部分,就不能这样干了。
划分
int randomPartition(int[] a, int p, int r) 实现上是非常精妙的。
是维持这个不变量:[p..i] <= x < [i+1, j)
我也是原样抄过来,对最先写出这段代码的程序猿致敬。
[] http://www.ece.northwestern.edu/~nickle/randAlg/Karp91.pdf
c2java select algorithm的更多相关文章
-
一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS.
一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS. 选择算法也就是求一个无序数组中第K大( ...
-
Randomize select algorithm 随机选择算法
从一个序列里面选择第k大的数在没有学习算法导论之前我想最通用的想法是给这个数组排序,然后按照排序结果返回第k大的数值.如果使用排序方法来做的话时间复杂度肯定至少为O(nlgn). 问题是从序列中选择第 ...
-
[转]网络时间的那些事及 ntpq 详解
Gentoo(也许其他发行版也是?)中 "ntpq -p" 的 man page 只有简短的描述:“打印出该服务器已知的节点列表和它们的状态概要信息.” 我还没见到关于这个命令的说 ...
-
iOS 3DES DES AES加密注意事项!!很重要,否则会加密失败
今天做项目,需要进行3des加密. 加密的gkey:abcdefgh giv:(偏移量)abcdefgh 加密后结果:p+X985x5bFS6dWjAnm6sdQ== 下面是代码: +(NSStr ...
-
iOS加密算法总结
常用加密算法: DES:Data Encryption Standard,即数据加密算法,它是IBM公司于1975年研究成功并公开发表的. DES(数据加密标准)原理: DES是一个分组加密算法,它以 ...
-
NTP同步底层实现
RFC http://www.ietf.org/rfc/rfc5905.txt https://www.eecis.udel.edu/~mills/ntp/html/select.html https ...
-
Hive使用Calcite CBO优化流程及SQL优化实战
目录 Hive SQL执行流程 Hive debug简单介绍 Hive SQL执行流程 Hive 使用Calcite优化 Hive Calcite优化流程 Hive Calcite使用细则 Hive向 ...
-
最全的ORACLE-SQL笔记
-- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unloc ...
-
Matplotlib数据可视化(6):饼图与箱线图
In [1]: from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParam ...
随机推荐
-
Web动画API教程2:AnimationPlayer和Timeline
本文转载: Web动画API教程2:AnimationPlayer和Timeline
-
[Javascript] Gradient Fills on the HTML5 Canvas
window.onload = function() { var canvas = document.getElementById("canvas"), context = can ...
-
MYSQL注释
MYSQL扩展了SQL的注释/**/, /*! (语句)#加感叹号,内部语句会被执行 */ /*!50001 select * from test #表示数据库为5.00.01版本,内部语句会被执行 ...
-
PHP获取操作系统、IP、地理位置、浏览器、ISP等信息_PHP类代码
PHP语言.浏览器.操作系统.IP.地理位置.ISP,本PHP类里面有以下几种方法,同时也是用法说明: <?php class class_guest_info{ function GetLan ...
-
Repcached实现memcached复制
1.介绍 repcached是日本人开发的实现memcached复制功能,它是一个单 master单 slave的方案,但它的master/slave都是可读写的,而且可以相互同步,如果 ma ...
-
javascript(三):对象
对象(object)是javascript中很重要的数据类型.对象是“键值对”的集合,同时也是无序的.(注意:对象结尾处有分号) var ob1={ a1:'name',//a1可以加引号或者不加 a ...
-
Express入门介绍vs实例讲解
下午在团队内部分享了express相关介绍,以及基于express的实例.内容提纲如下. 什么是Express 为什么要用Express 路由规则 一切皆中间件 实例:Combo Applicatio ...
-
Glide Golang包管理
Golang的包管理乱得不行,各种工具横空出世,各显神通啊.用了几个下来,发现 Glide 是比较好用的,使用了 vender 来进行管理,多个开发环境的版本不冲突,功能强大,配置文件也足够简单. 初 ...
-
youtube视频下载和搬运的方法
youtube全球最大的视频网站, 全世界每天有三分之一的网民在youtube上观看视频, 可是大部分人不知道, 在这些网民有一小部分人是依靠youtube生存的, 他们上传视频到youtube, y ...
-
css-1,css的三种引入方式 基本选择器
<!-- (1)CSS 层叠样式表 作用:修饰网页结构 (2)css的三种引入方式 权重: 优先级高 权重大 谁在页面谁的权重大 - 行内样式 注意:行内样式的优先级是最高的 - 内接样式 - ...