c2java select algorithm
对于非常多应用来说,随机算法是最简单的或者最快的。既简单又快的有没有呢?
那须要深刻的洞察力或者革命性的突破。
什么是随机算法
随机算法与确定算法差别是:它还接收输入随机比特流来做随机决策。
对于同一个输入,每次执行所用的算法行为都不同,尽管结果都是一样的。
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 ...
随机推荐
- DELL平板如何安装WIN10系统-磁盘分区问题
已经进入PE之后,在这一步的时候,可以把默认的系统分区都移除,但是在计算机管理可能右击没有这个菜单,要用专门的软件弄 不要用分区助手,会提示不能对动态磁盘进行操作,要用Disk Genius(他的 ...
- 复习C语言:第一章
复习C语言中的5中基本类型,以及各个类型占用了多少个字节: #include <stdio.h> int main(void) { printf("int=%d\n", ...
- Skyline开发4-IProject接口
IProject接口可以访问工程设置和打开保存工程的基本方法. 属性 FileVersion:返回 ITEVersionInfo.表示当前运行的TerraExplorer的版本,可通过ITEVersi ...
- iOS 按钮拖动。
-(void)testMove { moveBtn = [[UIButton alloc ]init]; moveBtn.frame = CGRectMake(0, 30, 60, 60); move ...
- 当前Azure中国可使用的虚拟机的Size列表
Standard_A0,Standard_A1,Standard_A2,Standard_A3,Standard_A5,Standard_A4,Standard_A6,Standard_A7, Bas ...
- Emmet (前身为 Zen Coding)
使用示例: 在编辑器中输入缩写代码:ul>li* ,然后按下拓展键(默认为tab),即可得到代码片段: <ul> <li></li> <li>&l ...
- 如何设置Vmware下Linux系统全屏显示
环境:Vmware10+RedHat5 在Vmware10中安装好RedHat5后,即使点击了全屏按钮(或使用快捷键Ctrl+Alt+Enter),全屏的效果依然不尽人意,跟下图中差不多,RedHat ...
- Hive Web Interface的安装
Hive Web Interface,简称hwi,是Hive的Web接口. 首先,安装ant,下载ant,解压,并在/etc/profile中设置: export ANT_HOME=/opt/apac ...
- SpringBoot集成jdbcTemplate/JPA
1.pom.xml <!-- jdbcTemplate 依赖 --> <dependency> <groupId>org.springframework.boot& ...
- 从0開始写MyScrollView
从0開始写MyScrollView 上篇文章对ScrollView的详细实现进行了分析.本文依据上篇分析的结果.自己动手写一个ScrollView. step1 尾随手指滑动,非常easy.重写2个函 ...