博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c2java select algorithm
阅读量:7297 次
发布时间:2019-06-30

本文共 785 字,大约阅读时间需要 2 分钟。

对于非常多应用来说,随机算法是最简单的或者最快的。既简单又快的有没有呢?
那须要深刻的洞察力或者革命性的突破。
什么是随机算法
随机算法与确定算法差别是:它还接收输入随机比特流来做随机决策。
对于同一个输入,每次执行所用的算法行为都不同,尽管结果都是一样的。
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

转载于:https://www.cnblogs.com/yutingliuyl/p/7380671.html

你可能感兴趣的文章
cocos2d-x之监听手机的物理按键
查看>>
python数据处理excel和pdf,并打包成exe
查看>>
基于 HTML5 WebGL 的低碳工业园区监控系统
查看>>
如何使绝对定位内部元素不继承父级宽度,而是靠内容自动撑开宽度(转载)
查看>>
《程序猿的生命周期》阅读有感
查看>>
重温排序算法
查看>>
Instrumentation 功能介绍(javaagent)
查看>>
Core J2EE Patterns - Data Access Object
查看>>
SpringCloud学习成长之路 六 cloud配置中心
查看>>
MyEclipse定位class文件
查看>>
STM32(HY-SRF05)超声波测距项目
查看>>
《practical Java》读书笔记
查看>>
数据库字段顺序的【坑】
查看>>
spring5新响应式框架-webflux实战
查看>>
软甲架构笔记 三
查看>>
STL training (uva上一些比较好的用来熟悉STL)
查看>>
[未完成]关于CSS的总结
查看>>
陈皓一起写Makefile 概述
查看>>
linux下安装启动rpc服务
查看>>
Software Testing, Lab 1
查看>>