对于非常多应用来说,随机算法是最简单的或者最快的。既简单又快的有没有呢?

那须要深刻的洞察力或者革命性的突破。





什么是随机算法

随机算法与确定算法差别是:它还接收输入随机比特流来做随机决策。

对于同一个输入,每次执行所用的算法行为都不同,尽管结果都是一样的。





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的更多相关文章

  1. 一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS.

    一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS. 选择算法也就是求一个无序数组中第K大( ...

  2. Randomize select algorithm 随机选择算法

    从一个序列里面选择第k大的数在没有学习算法导论之前我想最通用的想法是给这个数组排序,然后按照排序结果返回第k大的数值.如果使用排序方法来做的话时间复杂度肯定至少为O(nlgn). 问题是从序列中选择第 ...

  3. [转]网络时间的那些事及 ntpq 详解

    Gentoo(也许其他发行版也是?)中 "ntpq -p" 的 man page 只有简短的描述:“打印出该服务器已知的节点列表和它们的状态概要信息.” 我还没见到关于这个命令的说 ...

  4. iOS 3DES DES AES加密注意事项!!很重要,否则会加密失败

    今天做项目,需要进行3des加密. 加密的gkey:abcdefgh   giv:(偏移量)abcdefgh 加密后结果:p+X985x5bFS6dWjAnm6sdQ== 下面是代码: +(NSStr ...

  5. iOS加密算法总结

    常用加密算法: DES:Data Encryption Standard,即数据加密算法,它是IBM公司于1975年研究成功并公开发表的. DES(数据加密标准)原理: DES是一个分组加密算法,它以 ...

  6. NTP同步底层实现

    RFC http://www.ietf.org/rfc/rfc5905.txt https://www.eecis.udel.edu/~mills/ntp/html/select.html https ...

  7. Hive使用Calcite CBO优化流程及SQL优化实战

    目录 Hive SQL执行流程 Hive debug简单介绍 Hive SQL执行流程 Hive 使用Calcite优化 Hive Calcite优化流程 Hive Calcite使用细则 Hive向 ...

  8. 最全的ORACLE-SQL笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unloc ...

  9. Matplotlib数据可视化(6):饼图与箱线图

    In [1]: from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParam ...

随机推荐

  1. 牛客网-《剑指offer》-矩形覆盖

    题目:http://www.nowcoder.com/practice/72a5a919508a4251859fb2cfb987a0e6 C++ class Solution { public: in ...

  2. WinForm 之 自定义标题栏的窗体移动

    通过标题栏的鼠标事件实现窗体移动,代码如下: bool m_isMouseDown = false; //窗体是否移动 Point m_mousePos; //记录窗体的位置 /// <summ ...

  3. js - 关于循环

    ES5:for,foreach,for..in ES6:for..of // ES5(可参见ES6的析构写法) const value = ["a", "b", ...

  4. mysql中间件研究(Atlas,cobar,TDDL)[转载]

    mysql中间件研究(Atlas,cobar,TDDL) mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差. ...

  5. SSM实战——秒杀系统之Service层接口设计与实现、Spring托管、声明式事务

    一:Service层接口设计 准备工作:新建三个包:service包.exception包.dto包,分别用来存放业务接口.自定义异常类.dto类. 1:定义接口 package org.myseck ...

  6. 〖Linux〗Linux的smb地址转换Windows格式(两者互转)

    因为个人常用办公PC是Linux,打开文件共享什么的是 smb:// 的,而不是Windows的 \\ 需要复制文件路径给别人的时候,发smb://给一个使用Windows办公的用户不算很得体的方法 ...

  7. soapui not supported the auto complete

    http://forum.soapui.org/viewtopic.php?t=19850 syntax highlighting or content assist inside soapUI? t ...

  8. Uva10161 Ant on a Chessboard

    Uva10161 Ant on a Chessboard 10161 Ant on a Chessboard One day, an ant called Alice came to an M*M c ...

  9. QQ登录整合/oauth2.0认证-01-申请appkey和appid

    本节需要你申请appkey和appid还有绑定域名的空间 首先 再讲课之前 你需要准备以下东西 到腾讯开发平台中申请 开发者 获得appid 和appkey 这两个东东 这两个东东 就算没审核 也可以 ...

  10. 阿里云k8s私有仓库registry操作管理

    1. 登录阿里云Docker Registry $ sudo docker login --username=*****技 registry.cn-hangzhou.aliyuncs.com 用于登录 ...