c2java select algorithm
来源:互联网 发布:网络信息安全责任书 编辑:程序博客网 时间:2024/06/05 10:35
对于很多应用来说,随机算法是最简单的或者最快的。既简单又快的有没有呢?
那需要深刻的洞察力或者革命性的突破。
什么是随机算法
随机算法与确定算法区别是:它还接收输入随机比特流来做随机决策。
对于同一个输入,每次运行所用的算法行为都不同,虽然结果都是一样的。
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)
我也是原样抄过来,对最先写出这段代码的程序员致敬。
那需要深刻的洞察力或者革命性的突破。
什么是随机算法
随机算法与确定算法区别是:它还接收输入随机比特流来做随机决策。
对于同一个输入,每次运行所用的算法行为都不同,虽然结果都是一样的。
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
0 0
- c2java select algorithm
- select sort algorithm
- Select Sort Algorithm
- Algorithm intro - Select Sort
- Sort Algorithm-->Select Sort
- [Algorithm]Quick Select问题
- c2java 第0篇
- c2java 第9篇 FFT
- c2java 回溯之数独
- c2java Greedy 之任务调度
- Algorithm
- Algorithm
- algorithm
- algorithm
- algorithm
- algorithm
- algorithm
- Algorithm
- Swift学习笔记(二)
- Android开发环境搭建
- ajax
- Nim算法------高僧斗法
- 高三毕业撒花 这个暑假开始努力弄ACM~
- c2java select algorithm
- How do I generate the first n prime numbers?
- QlikView线形图高亮显示选中的维度
- 黑马程序员_集合(1)
- eclipse搭建c语言开发环境
- poj 2914 minmum cut
- TFS配置dataserver
- 论文后面的参考文献格式应该如何写
- Java面试题详解