zoukankan      html  css  js  c++  java
  • Advanced Algorithm Lecture2(高等算法课程笔记2)

    作者的博客:
    CSDN: https://blog.csdn.net/u013031229
    博客园: https://www.cnblogs.com/fzyz999/
    主站:https://www.pig2earth.top/

    Contrast Algorithm

    1. Pick an edge uniformly at random
    2. Merge the endpoints of this edge
    3. Remove self-loops
    4. Repeat steps 1-3 until there are only two vertices remain.5The remaining edges form a candidate cut

    Fast Cut算法

    思路:Constrast算法的问题在于成功概率太低。如果可以提高成功概率,则可以少重复一些次数。

    成功率太低的原因:一开始选对的概率很高,但越到后面越小。

    改进思路1:只跑前面k轮,后面剩下的图使用其它方法求解一个min cut。

    改进思路2:每一步的成功概率是不同的,约到后面越低。因此,没必要每次都把n步都重做,而是可以只重做最后的一些成功概率低的部分。

    怎么能让n的时候少重复,后面的时候多重复?每次选边的时候都多选一次。这就相当于:

    搜索树:
    n                       # 第一轮
    k1 k1                   # 第二轮, k1=n-1
    k2 k2 k2 k2             # 第三轮, k2=k1-1
    k3 k3 k3 k3 k3 k3 k3 k3 # 第四轮, k3=k2-1
    

    可以看到,这样就相当于越往下的情况重复次数越多,比如k3的情况重复了8雌,远远比n的时候多。但这样有一个问题,这种扩张是指数级的,复杂度太高。为了避免指数级,需要再做一个改进

    n                       # 第一轮
    k1 k1                   # 第二轮, k1=n/c
    k2 k2 k2 k2             # 第三轮, k2=k1/c
    k3 k3 k3 k3 k3 k3 k3 k3 # 第四轮, k3=k2/c
    

    也就是第一次从n跑到n/c,然后再n/c这个节点可以重跑2次,每次跑到$n/c^2$,这样就可以避免指数增长。

    显然c的大小决定了时间复杂度和成功概率。c越大成功率越低,但速度越快。反之,c越小成功概率越高,但速度越慢。

    时间复杂度:$T(n)=2T(frac{n}{c}+O(n^2))$

    成功概率:$P(n)geqslant 1 - (1 - P(frac{n}{c}))^2$,也就是成功概率为$1- ext{失败概率}$

    每次重复两次,所以失败的概率是$(1-P(frac{n}{c}))^2$

    随机算法的分类

    拉斯维加斯算法

    • 结果一定是正确的
    • 但是运行时间或其它计算资源可能是随机的。
    • 例如:快速排序

    蒙特卡洛算法

    • 结果质量是随机的
    • 例如:随机最小割算法
    • 次数越多越接近正确

    复杂性类

    判定问题: 输出是Yes或No的问题。其它问题一般都可以转换为一个判定问题。例如:求最小割可以认为是求某个割是不是最小割。

    P问题:对于任意的P问题,存在一个多项式时间复杂度的算法A,可以给出这个判定问题的答案。

    NP问题:存在一个多项式时间的算法A,可以对该问题的和一个证据y,算法A可以根据这个证据来判断出结果。也就是我们常说的,多项式时间可验证。

    其它复杂性类:EXP(指数时间内可计算)、PSPASE(多项式空间)...

    NP-hard问题:如果A是一个NP且A在多项式时间可解,则所有的NP问题都在多项式时间内可解。

    NP完全问题:A是NP-hard的且A属于NP问题。也就是NP问题中最难的问题。

    RP(Randomized Polynomial time):随机算法A最坏情况下为多项式复杂度,且对于答案是No的情况,一定不接受。

    co-RP是RP的相反情况,对于正确的答案一定会接受,对于错误的答案,不一定。

    推论:$RP subseteq NP$、$coRP subseteq coNP$。
    证明:
    对于一个随机算法$A(x)$,可以认为它是一个确定性算法$A(x,r)$,其中$r$是随机数串。一个随机的算法,我们把它用到的所有随机数抽出来,形成一个$r$,那么剩下的部分就是确定的了。

    根据NP的定义,$r$最多是多项式的,所以$RP$满足$NP$的定义。

    BPP:双边错误,也就是两边都有可能有错。

    总结:$P subseteq RP subseteq NP subseteq PP$且$P subseteq coRP subseteq coNP subseteq PP$

    意思就是:随机算法对于P和NP的解决是没有作用的,也就是说随机算法不能把一个目前找不到多项式解法的问题变成一个可以用多项式时间随机算法解出来的问题。它的作用主要在于又可能把$O(n3)$的将为$O(n2)$的。

    马尔可夫不等式:$Pr(T_A geq C) leq frac{E(T_A)}{C}$

  • 相关阅读:
    python 模拟浏览器
    转:如何评价架构的优劣
    转:DotNET企业架构应用实践架构师成长之路如何成为优秀架构师
    转:大规模网站架构实战之体系结构(一)
    转:Twitter的设计原则
    转:关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性
    转:我眼中的Visual Studio 2010架构工具
    转:解剖Twitter
    转:Discuz!NT前台模型架构(MVC)
    转: "HTTP 错误 401.1 未经授权:访问由于凭据无效被拒绝"的另类解决方案
  • 原文地址:https://www.cnblogs.com/fzyz999/p/13289229.html
Copyright © 2011-2022 走看看