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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

分治算法介绍

發布時間:2025/4/5 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分治算法介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 分治算法
      • 1.1引入
      • 1.2 分治算法介紹
      • 1.3 應用實例

1 分治算法

1.1引入

一個裝有 16 枚硬幣的袋子,16 枚硬幣中有一個是偽造的,偽造的硬幣和普通硬幣從表面上看不出有任何差別,但是那個偽造的硬幣比真的硬幣要輕。現有給你一臺天平,請你在盡可能最短的時間內找出那枚偽造的硬幣。

常規思維:
每次從待比較的硬幣中取兩枚進行計較,如果天平平衡(相等)就繼續取剩下的硬幣進行比較。

繼續以上過程,直到找到硬幣。

強者思維:
我們先將 16 枚硬幣分為左右兩個部分,各為 8 個硬幣,分別稱重,必然會有一半輕一半重,而我們要的就是輕的那組,重的舍去。接下來我們繼續對輕的進行五五分,直至每組剩下一枚或者兩枚硬幣,這時我們的問題自然就解決了,下面用一張圖進行更好的理解。

1.2 分治算法介紹

分治法:
見名思義,即分而治之,從而得到我們想要的最終結果。分治法的思想是將一個規模為 N 的問題分解為 k 個較小的子問題,這些子問題遵循的處理方式就是互相獨立且與原問題相同。

兩部分組成:
分(divide):遞歸解決較小的問題
治(conquer):然后從子問題的解構建原問題的解。

三個步驟:
1、分解(Divide):將原問題分解為若干個規模較小,相互獨立,與原問題形式相同的子問題;
2、解決(Conquer):若子問題規模較小而容易被解決則直接解決,否則遞歸地解各個子問題;
3、合并(Combine):將各個子問題的解合并為原問題的解。

1.3 應用實例

二分查找算法實現:

#include <stdio.h> #include <stdlib.h>/*遞歸實現二分查找 參數:arr - 有序數組地址 arrminSub - 查找范圍的最小下標 minSubmaxSub - 查找范圍的最大下標 maxSubnum - 帶查找數字返回:找到則返回所在數組下標,找不到則返回-1 */int BinarySearch(int* arr,int minSub,int maxSub,int num){if(minSub>maxSub){return -1;//找不到 num 時,直接返回}int mid=(minSub+maxSub)/2;if(num<arr[mid]){return BinarySearch(arr,minSub,mid-1, num);}else if(num>arr[mid]){return BinarySearch(arr,mid+1,maxSub, num);}else{return mid;//找到 num 時直接返回} }int main(void){int arr[]={1, 3, 7, 9, 11};int index = BinarySearch(arr, 0, 4, 8);printf("index: %d\n", index);system("pause");return 0; }

參考資料:

  • C/C++從入門到精通-高級程序員之路【奇牛學院】
  • 總結

    以上是生活随笔為你收集整理的分治算法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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