zoukankan      html  css  js  c++  java
  • 算法为基础的:分而治之模式,归并ΘΘΘΘΘΘ知识汇总

    1. 
      
      1.分而治之模式有三个步骤,在每个递归:分解。解决,合并

    2. 2.归并排序算法全然遵循分治模式
    3. 分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列
    4. 解决:使用归并排序递归的排序两个子序列
    5. 合并:合并两个已排序的子序列以产生已排序的答案
    6.   

    7. 3.分析分治算法所须要的时间计算:

    8. 如果T(n)是规模为n的一个问题的执行时间。若问题足够小,如对某个常量c,n≦c,则直接求解须要常量时将。我们将其写作Θ(1).如果吧原问题分解成a个子问题。每一个子问题的规模是原问题的1/b(对归并排序。a和b都为2,然而,我们将看到在很多分治算法中a≠b)为了求解一个规模为n/b的子问题。须要T(n/b)的时间,所以须要aT(n/b)的时间n来求解a个子问题,如果分解问题成子问题须要时间D(n),合并子问题的解成原问题的解须要时间C(n) 那么得到递归式:
    9. T(n)={Θ(1) 若,n≦c
    10.            aT(n/b)+D(n)+C(n)    其它
    11. 4.归并排序算法
            分析建立归并排序n个数的最坏情况执行时间T(n)的递归式,归并排序的一个元素须要常量时间。当有n>1
                    我们元素分解执行时间例如以下:
        分解:分解步骤只计算子数组的中间位置。须要常量时间,因此D(n)=Θ(1)
        解决:我们递归的求解两个规模均为n/2的子问题,将贡献2T(n/2)的执行时间
       合并:我们已经注意到在一个具有n个元素的字数组上过程MERGE须要Θ(n)的时间,所以C(n)=Θ(n)
    当分析归并排序而把函数D(n) 与C(n)相加时,我们是在吧一个Θ(n)函数与还有一个Θ(1)函数相加。相加的和是n的一个线性函数,即Θ(n),把它与来自“解决”步骤的2T(n/2)相加。
    将给出归并排序的最坏情况执行时间T(n)的递归式
                 Θ(1)                 若n=1
    T(n)={   2T(n/2)+Θ(n)   若n>1
    在第4章,我们将看到“主定理” ,能够用改定理来证明T(n)为Θ(nlgn),当中lgn代表㏒2n,由于对数函数比不论什么线性函数增长要慢,所以对足够大的输入,在最坏的情况下执行实际为Θ(nlgn)的归并排序将优于执行时间为Θ(n2)的插入排序
    重写归并排序算法:
                  c                      若n=1
    T(n)={   2T(n/2)+cn     若n>1
    (常量c代表求解规模为1的问题所需的时间以及在分解步骤与合并步骤处理每一个数组元素所需的时间)

            
    lgn +1 代表层,cn 为每层贡献总代价
     cnlgn + cn=cn(lgn +1)  忽略低阶项和常量c便给出了期望的结果 Θ(nlgn)                                                                                                                                  







    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    codevs 2632 非常好友
    codevs 1213 解的个数
    codevs 2751 军训分批
    codevs 1519 过路费
    codevs 1503 愚蠢的宠物
    codevs 2639 约会计划
    codevs 3369 膜拜
    codevs 3135 River Hopscotch
    数论模板
    JXOJ 9.7 NOIP 放松模拟赛 总结
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4832212.html
Copyright © 2011-2022 走看看