日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法设计与分析】14 分治算法的一般描述和分析方法

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法设计与分析】14 分治算法的一般描述和分析方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要描述分治算法的一般描述和分析方法。銜接上一篇文章:【算法設計與分析】13 分治策略的設計思想

文章目錄

    • 1 分治算法的一般性描述
      • 1.1 分支算法的時間分析
      • 1.2 兩類常見的遞推方程與求解方法
    • 2 總結

1 分治算法的一般性描述

  • 設分治算法為:Divide-and-Conquer§

  • 設計要點
  • 原問題可以劃分或者規約為規模較小的子問題。其中子問題之間遵循以下的規則:

    1. 子問題與原問題具有相同的性質2. 子問題的求解彼此獨立3. 劃分時,子問題的規模盡可能均衡
  • 子問題較小時可以直接求解

  • 子問題的解綜合可以得到原問題的解

  • 算法的實現:迭代或者遞歸

  • 1.1 分支算法的時間分析

    時間復雜度函數的遞推方程:

    • W(n)=W(∣P1∣)+W(∣P2∣)+...+W(∣Pk∣)+f(n)W(n)=W(|P_1|)+W(|P_2|)+...+W(|P_k|)+f(n)W(n)=W(P1?)+W(P2?)+...+W(Pk?)+f(n)
    • W(c)=CW(c)=CW(c)=C

    其中

  • P1,P2,...Pkw為劃分后產生的子問題P_1,P_2,...P_kw為劃分后產生的子問題P1?,P2?,...Pk?w
  • f(n)為劃分子問題以及將子問題的解綜合得到原問題的解的總工足量f(n)為劃分子問題以及將子問題的解綜合得到原問題的解的總工足量f(n)
  • 規模為c的最小子問題的工作兩為:C
  • 1.2 兩類常見的遞推方程與求解方法

    • f(n)=∑inaif(n?i)+g(n),(1)f(n) = \sum_i^n a_i f(n-i)+g(n){, (1)}f(n)=in?ai?f(n?i)+g(n)(1)
    • f(n)=af(nb)+d(n),(2)f(n)=af(\frac{n}{b}) + d(n){, (2)}f(n)=af(bn?)+d(n)(2)

    例子:

    Hanoi塔,W(n)=2W(n?1)+1W(n)=2W(n-1)+1W(n)=2W(n?1)+1
    二分檢索,W(n)=W(n/2)+1W(n)=W(n/2)+1W(n)=W(n/2)+1
    歸并排序,W(n)=2W(n/2)+n?1W(n)=2W(n/2)+ n-1W(n)=2W(n/2)+n?1

    那么這些遞推方程如何求解?

    • 方程1:f(n)=∑inaif(n?i)+g(n)f(n) = \sum_i^n a_i f(n-i)+g(n)f(n)=in?ai?f(n?i)+g(n)
  • 迭代法、遞歸樹
    • 方程2:f(n)=af(nb)+d(n)f(n)=af(\frac{n}{b}) + d(n)f(n)=af(bn?)+d(n)
  • 迭代法、換元法、遞歸樹、主定理
  • 對于方程2,可以使用主定理,該定理可以很快求解出方程的解,前面的文章已經學習過主定理,這里再次提一下:

    • 對于方程T(n)=aT(n/b)+d(n)T(n)=aT(n/b)+d(n)T(n)=aT(n/b)+d(n)
  • 如果d(n)為常數:
  • T(n)={O(nlogba),a=?1O(logn),a=1T(n)= \begin{cases} O(n^{log_ba}), & \text {$a \not= 1$} \\ O(logn), & \text{a=1} \end{cases} T(n)={O(nlogb?a),O(logn),?a?=1a=1?

  • 如果d(n) = c(n)
  • T(n)={O(n),a?<?bO(nlogn),a=bO(nlogba),a>bT(n)= \begin{cases} O(n), & \text {a < b} \\ O(nlogn), & \text{a=b} \\O(n^{log_b{a}}), &\text{a>b} \end{cases} T(n)=??????O(n),O(nlogn),O(nlogb?a),?a?<?ba=ba>b?

    注:上述的logbalog_balogb?a中的b是以b為底的意思,但是上面的公式顯示的不明顯。

    2 總結

    • 想要徹底理解分治算法的思想,還需要多做練習,后面的文章會結合具體的例子,來講解分治算法的思想在具體應用中的使用

    總結

    以上是生活随笔為你收集整理的【算法设计与分析】14 分治算法的一般描述和分析方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。