中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分治法的理解

發布時間:2020-10-02 12:21:06 來源:網絡 閱讀:1276 作者:qingliangdexiar 欄目:開發技術
  1. 什么是分治法?

    分治法的基本思想是將一個難以直接解決的大問題,分解成一些規模較小的相同問題,以便各個擊破,分而治之。

  2. 何時能,何時用分治法來解決這些問題比較好呢?

    這些問題應當具備這幾個特征:

    (1)問題的規模縮小到一定程度就可以容易的解決了。

    (2)問題可以分解為若干個規模較小的相同子問題。

    (3)問題所分解成各個子問題是相互獨立的,即子問題之間不包含公共的子問題。

    (4)問題分解出的子問題的解可以合并為原問題的解。

    上述的第一條特征是絕大多數問題可以滿足的,因為問題的計算復雜性一般是隨著問題規模的增大而增加;第二條特征是引用分治法的前提,它也是大多數問題可以滿足的,此特征反映了遞歸思想的應用;第三條特征涉及分治法的效率,涉及許多不必要的工作-重復求解公共的子問題,第四條特征是關鍵,能否利用分治法完全取決于問題是否具有第四條特征。

  3. 分治法的基本步驟:

    divide-and-conquer(P)

     {

    if ( | P | <= n0) adhoc(P);   //解決小規模的問題

       divide P into smaller subinstances P1,P2,...,Pk//分解問題

      for (i=1,i<=k,i++)

       yi=divide-and-conquer(Pi);  //遞歸的解各子問題

    return merge(y1,...,yk);  //將各子問題的解合并為原問題的解

          }

        如果問題足夠小能夠直接解決,則解決,如果不能夠在進行分治。

4.分治法與遞歸,分治法與循環

分治法是一種思想,遞歸和循環都只不過是一種手段,來幫助問題來進行分治。

示例如下:

(1)二分查找算法的非遞歸形式

 int NBinarySearch(int n,int s[n],int x)

{

int low=0,high=n-1;

//通過循環手段來進行分治

while(low<=high)

{

int middle=(low+high)/2;

if(x==s[middle]) return middle;

else if(x>s[middle]) low=middle+1;

else high=middle-1;

}

}

(2)二分查找算法的遞歸形式

int BinarySearch(int s[n],int x,int low,int high)

{

if(low>high) return -1;

int middle=(low+high)/2;

if(x==s[middle]) return middle;

else if(x>middle)

return BinarySearch(s,x,middle,high)

else

return BinarySearch(s,x,low,middle-1);

}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳东县| 麟游县| 丹江口市| 三台县| 普陀区| 视频| 盐山县| 铜鼓县| 女性| 正宁县| 金阳县| 亚东县| 景泰县| 兴义市| 屯留县| 百色市| 普定县| 右玉县| 罗田县| 卢龙县| 林口县| 南阳市| 衡阳县| 富顺县| 双流县| 甘肃省| 清镇市| 聂拉木县| 西青区| 那坡县| 塔河县| 永定县| 如东县| 昂仁县| 湖南省| 寿光市| 韩城市| 合川市| 承德市| 丰原市| 汉寿县|