zoukankan      html  css  js  c++  java
  • 算法设计与分析

    英文原版不上了 直接中文

    定义

    假设有递推关系式T(n)=aT(n/b)+f(n)

    其中n为问题规模
    a为递推的子问题数量
    n/b为每个子问题的规模(假设每个子问题的规模基本一样)
    f(n)为递推以外进行的计算工作,无需参加递归

    定理

    a≥1,b>1为常数,f(n)为函数,T(n)为非负整数。则有以下结果(分类讨论):

    (1)若f(n)=O(nlogba-ε)存在ε>0,就是当nlogba的阶高于f(n)时,可以存在ε使得nlogba-εf(n)的阶相同。此时取T(n)=θ(nlogba)

    (2)若f(n)=Θ(nlogba) 注意这时nlogba的阶和f(n)的阶相同,不需要ε。此时取T(n)=Θ(nlogbalogn)

    (3)若f(n)=Ω(nlogba+ε)首先得存在ε>0,就是当nlogba的阶低于f(n)时,可以存在ε使得nlogba+εf(n)的阶相同,即有足够大的n,而当af(n/b)<=cf(n), c<1此时取T(n)=Θ(f(n))

    定义二

    递推式子可以为T(n)=aT(n/b)+cnk 其中 cnk 表示原问题分解成子问题和将子问题的解合并成原问题的解的时间,对其分析可得到

    [T(n) = egin{cases} O(n^{log_ba}) & a > b^k \ O(n^k·log_bn) & a = b^k \ O(n^k) & a < b^k end{cases}]

    示例

    T(n) = 9T(n/3)+n

    此时 a = 9, b = 3, k = 1, f(n) = n, 满足a > bk 所以套用定理条件1 T(n) = θ(nlogba) = O(n²)

    T(n) = 2T(n/2)+2n

    此时 a = 2, b = 2, k = 1, f(n) = 2n, 满足a = bk,所以套用定理条件2 T(n) = O(nk·logbn) = O(nlog2n)

    T(n) = 2T(n/4)+n²

    此时 a = 2, b = 4, k = 2, f(n) = n², 满足 a < bk, 所以套用定理条件3 T(n) = O(n^k) = O(n²)

    T(n) = 2T(n½)+logn

    a = 2, b = 1, f(n) = logn ... 不考 暂且放置..

  • 相关阅读:
    Software_programming_automation_selenium
    Software_programming_EnterpriseArch_ServiceWithSingleTonFactory
    web-bootstrap-button
    Software--C#--grammer_Delegate--Event
    Software_C#_grammer_Deletegate--Strategy
    Software--BigData--StreamingData
    线程死锁和递归锁
    同步锁Lock(互斥锁)
    GIL计算python 2 和 python 3 计算密集型
    什么是python的全局解释锁(GIL)
  • 原文地址:https://www.cnblogs.com/coderzjz/p/14272460.html
Copyright © 2011-2022 走看看