• 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


  • 相关阅读:
    支付系统整体架构
    犹太”安息日”
    JWT(JSON Web Token) 【转载】
    详解布隆过滤器的原理、使用场景和注意事项
    缓存一致性策略以及雪崩、穿透问题 【零壹技术栈】
    RPC概念及分类【转载】
    RDLC 微软报表 导出Excel时产生多个工作表 (worksheet)
    asp.net 5 (mvc 6) 获取网站的物理路径
    Asp.net 5 (MVC6) Areas 分区
    MVC6 OWin Microsoft Identity 自定义验证
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7380671.html
Copyright © 2020-2023  润新知