<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          5 個牛逼的算法設(shè)計,你知道幾個?

          共 3413字,需瀏覽 7分鐘

           ·

          2021-03-29 13:58

          1、分治法

          概念:

          將一個難以直接解決的大問題,分割成一些規(guī)模較小的相同問題,以便各個擊破,分而治之。

          思想策略

          對于一個規(guī)模為n的問題,若該問題可以容易地解決(比如說規(guī)模n較小)則直接解決,否則將其分解為k個規(guī)模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞歸地解這些子問題,然后將各子問題的解合并得到原問題的解。

          特征:

          1. 該問題的規(guī)模縮小到一定的程度就可以容易地解決
          2. 該問題可以分解為若干個規(guī)模較小的相同問題,即該問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。
          3. 利用該問題分解出的子問題的解可以合并為該問題的解;
          4. 該問題所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子子問題。

          第一條特征是絕大多數(shù)問題都可以滿足的,因為問題的計算復(fù)雜性一般是隨著問題規(guī)模的增加而增加;

          第二條特征是應(yīng)用分治法的前提它也是大多數(shù)問題可以滿足的,此特征反映了遞歸思想的應(yīng)用;

          第三條特征是關(guān)鍵,能否利用分治法完全取決于問題是否具有第三條特征,如果具備了第一條和第二條特征,而不具備第三條特征,則可以考慮用貪心法或動態(tài)規(guī)劃法。

          第四條特征涉及到分治法的效率,如果各子問題是不獨立的則分治法要做許多不必要的工作,重復(fù)地解公共的子問題,此時雖然可用分治法,但一般用動態(tài)規(guī)劃法較好。

          基本步驟:

          1 分解:將原問題分解為若干個規(guī)模較小,相互獨立,與原問題形式相同的子問題;

          2 解決:若子問題規(guī)模較小而容易被解決則直接解,否則遞歸地解各個子問題 

          3 合并:將各個子問題的解合并為原問題的解。

          適用分治法求解的經(jīng)典問題:

          2、動態(tài)規(guī)劃

          概念:

          每次決策依賴于當(dāng)前狀態(tài),又隨即引起狀態(tài)的轉(zhuǎn)移。一個決策序列就是在變化的狀態(tài)中產(chǎn)生出來的,所以,這種多階段最優(yōu)化決策解決問題的過程就稱為動態(tài)規(guī)劃。

          思想策略:

          將待求解的問題分解為若干個子問題(階段),按順序求解子階段,前一子問題的解,為后一子問題的求解提供了有用的信息。

          在求解任一子問題時,列出各種可能的局部解,通過決策保留那些有可能達到最優(yōu)的局部解,丟棄其他局部解。

          依次解決各子問題,最后一個子問題就是初始問題的解。

          特征:

          能采用動態(tài)規(guī)劃求解的問題的一般要具有3個性質(zhì):

          (1) 最優(yōu)化原理:如果問題的最優(yōu)解所包含的子問題的解也是最優(yōu)的,就稱該問題具有最優(yōu)子結(jié)構(gòu),即滿足最優(yōu)化原理。

          (2) 無后效性:即某階段狀態(tài)一旦確定,就不受這個狀態(tài)以后決策的影響。也就是說,某狀態(tài)以后的過程不會影響以前的狀態(tài),只與當(dāng)前狀態(tài)有關(guān)。

          (3) 有重疊子問題:即子問題之間是不獨立的,一個子問題在下一階段決策中可能被多次使用到。(該性質(zhì)并不是動態(tài)規(guī)劃適用的必要條件,但是如果沒有這條性質(zhì),動態(tài)規(guī)劃算法同其他算法相比就不具備優(yōu)勢)

          基本步驟:

          (1)分析最優(yōu)解的性質(zhì),并刻畫其結(jié)構(gòu)特征。

          (2)遞歸的定義最優(yōu)解。

          (3)以自底向上或自頂向下的記憶化方式(備忘錄法)計算出最優(yōu)值 

          (4)根據(jù)計算最優(yōu)值時得到的信息,構(gòu)造問題的最優(yōu)解

          適用動態(tài)規(guī)劃求解的經(jīng)典問題:

          • 矩陣連乘,
          • 走金字塔
          • 最長公共子序列(LCS) ,
          • 最長遞增子序列(LIS) ,
          • 凸多邊形最優(yōu)三角剖分 ,
          • 背包問題 ,
          • 雙調(diào)歐幾里得旅行商問題

          3、貪心法

          概念:

          在對問題求解時,總是做出在當(dāng)前看來是最好的選擇。也就是說,不從整體最優(yōu)上加以考慮,他所做出的僅是在某種意義上的局部最優(yōu)解。

          思想策略:

          貪心算法沒有固定的算法框架,算法設(shè)計的關(guān)鍵是貪心策略的選擇。必須注意的是,貪心算法不是對所有問題都能得到整體最優(yōu)解,選擇的貪心策略必須具備無后效性,即某個狀態(tài)以后的過程不會影響以前的狀態(tài),只與當(dāng)前狀態(tài)有關(guān)。所以對所采用的貪心策略一定要仔細分析其是否滿足無后效性。

          基本步驟:

          1. 建立數(shù)學(xué)模型來描述問題。

          2. 把求解的問題分成若干個子問題。

          3. 對每一子問題求解,得到子問題的局部最優(yōu)解。

          4. 把子問題的解局部最優(yōu)解合成原來解問題的一個解。

          適用貪心法求解的經(jīng)典問題:

          4、回溯法

          概念:

          回溯算法實際上一個類似枚舉的搜索嘗試過程,主要是在搜索嘗試過程中尋找問題的解,當(dāng)發(fā)現(xiàn)已不滿足求解條件時,就“回溯”返回,嘗試別的路徑。回溯法是一種選優(yōu)搜索法,按選優(yōu)條件向前搜索,以達到目標(biāo)。

          但當(dāng)探索到某一步時,發(fā)現(xiàn)原先選擇并不優(yōu)或達不到目標(biāo),就退回一步重新選擇,這種走不通就退回再走的技術(shù)為回溯法,而滿足回溯條件的某個狀態(tài)的點稱為“回溯點”。

          許多復(fù)雜的,規(guī)模較大的問題都可以使用回溯法,有“通用解題方法”的美稱。

          思想策略:

          在包含問題的所有解的解空間樹中,按照深度優(yōu)先搜索的策略,從根結(jié)點出發(fā)深度探索解空間樹。當(dāng)探索到某一結(jié)點時,要先判斷該結(jié)點是否包含問題的解,如果包含,就從該結(jié)點出發(fā)繼續(xù)探索下去,如果該結(jié)點不包含問題的解,則逐層向其祖先結(jié)點回溯。(其實回溯法就是對隱式圖的深度優(yōu)先搜索算法)。若用回溯法求問題的所有解時,要回溯到根,且根結(jié)點的所有可行的子樹都要已被搜索遍才結(jié)束。

          特征:

          (1)針對所給問題,確定問題的解空間:首先應(yīng)明確定義問題的解空間,問題的解空間應(yīng)至少包含問題的一個(最優(yōu))解。

          (2)確定結(jié)點的擴展搜索規(guī)則 

          (3)以深度優(yōu)先方式搜索解空間,并在搜索過程中用剪枝函數(shù)避免無效搜索。

          適用回溯法求解的經(jīng)典問題:

          5、分支限界法

          概述:

          類似于回溯法,也是一種在問題的解空間樹T上搜索問題解的算法。但在一般情況下,分支限界法與回溯法的求解目標(biāo)不同。

          回溯法的求解目標(biāo)是找出T中滿足約束條件的所有解,而分支限界法的求解目標(biāo)則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標(biāo)函數(shù)值達到極大或極小的解,即在某種意義下的最優(yōu)解。

          策略:

          在擴展結(jié)點處,先生成其所有的兒子結(jié)點(分支),然后再從當(dāng)前的活結(jié)點表中選擇下一個擴展對點。為了有效地選擇下一擴展結(jié)點,以加速搜索的進程,在每一活結(jié)點處,計算一個函數(shù)值(限界),并根據(jù)這些已計算出的函數(shù)值,從當(dāng)前活結(jié)點表中選擇一個最有利的結(jié)點作為擴展結(jié)點,使搜索朝著解空間樹上有最優(yōu)解的分支推進,以便盡快地找出一個最優(yōu)解。

          與回溯法的區(qū)別:

          回溯法:【方式不同】深度優(yōu)先搜索堆棧活結(jié)點的所有可行子結(jié)點被遍歷后才被從棧中彈出找出滿足約束條件的所有解【目標(biāo)不同】。

          分支限界法:【方式不同】廣度優(yōu)先或最小消耗優(yōu)先搜索隊列、優(yōu)先隊列每個結(jié)點只有一次成為活結(jié)點的機會找出滿足約束條件的一個解或特定意義下的最優(yōu)解【目標(biāo)不同】。

          版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。本文鏈接:https://blog.csdn.net/ght886/article/details/80289142

          推薦閱讀

          再見,收費的Teamviewer!!!

          解決Github訪問速度慢以及圖片加載慢的問題

          GitHub 標(biāo)星 8.6K:將任何設(shè)備轉(zhuǎn)換為電腦的輔助屏幕

          經(jīng)典算法面試題:高樓扔雞蛋

          因為一次 Kafka 宕機,終于搞透了 Kafka 高可用原理!


          - EOF -


          長按進入小程序,進行打卡簽到

          新一期打卡簽到,獎品超多


          (更多精彩值得期待……)

          最近熱文:
          一周內(nèi)被程序員瘋轉(zhuǎn)5.6W次,最終被大廠封殺!
          字節(jié)跳動《算法中文手冊》火了,完整版 PDF 開放下載!
          2020 年度開發(fā)者工具 TOP 100 名單!
          基于 Vue+Spring 前后端分離管理系統(tǒng)
          LeetCode1-200題匯總,希望對你有點幫助!

          2T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,人工智能,考研,軟考,英語,等等。在公眾號內(nèi)回復(fù)「資源」,即可免費獲取!回復(fù)「社群」,可以邀請你加入讀者群!


          ??給個「在看」,是對我最大的支持??

          瀏覽 19
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  手机在线观看日韩 | 日本黄色成熟视频 | 苍井空一区二区三区四区 | 日韩天堂| 天天爽日日爽 |