如何快速正確的寫出各種分治演算法的實現代碼

來源:互聯網
上載者:User

標籤:ase   參考   規模   如何快速   分解   問題   再處理   str   3.1   

分治演算法大家都很熟悉,很多時候(比如ACM競賽)當我們判斷出一個問題可以用分治演算法來解決的時候,卻往往因為具體的問題的複雜性,難以很快理清思路,迅速正確地寫出問題的分治演算法。

因此,要想快速正確的寫出分治演算法的實現代碼,就必須足夠的認識分治演算法。直接看結論

一、認識分治

在分治策略中,我們遞迴地解決一個問題,在每層遞迴中應用如下三個步驟:

1.分解(Divide):將問題劃分為一些子問題,子問題的形式與原問題一樣,只是規模更小。

2.解決(Conquer):遞迴地求解出子問題。如果子問題規模足夠小,則停止遞迴,直接求解。

3.合并(Combine):將子問題的解組合成原問題的解。

此外還需要補充兩個定義:

1.當問題足夠大,需要遞迴求解時,稱為遞迴情況(recursive case)

2.當問題足夠小,不需要遞迴求解時,我們說遞迴已經觸底,進入了基本情況(base case)

這些定義具體可以參考《演算法導論》,在此我不加以贅述。

關於分治我們已經有了一定的瞭解,但是依然無法快速正確的寫出分治的演算法,這是很自然的。

每當我們思考使用分治的時候,我們都有分開思考過三個步驟和兩個情況。

而且這很容易做到,但是我們卻無法寫出具體的代碼,關鍵原因在於我們不清楚這些步驟和情況之間的關係。

 

二、解決分治

首先給出一個簡單的步驟描述:

1.先處理基本情況

  1.1判斷問題規模

  1.2如果是基本情況則直接解決問題

2.再處理遞迴情況

  2.1先在腦海中思考,該問題可具體分解成哪些子問題

  2.2再按順序遞迴調用

3.最終合并

  3.1將已經解決的子問題合并,最終處理問題。

 

三、後續工作

接下來證明剛才的步驟是正確的分治演算法。

//然而這並不簡單,容我用紙先寫一下。

如何快速正確的寫出各種分治演算法的實現代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.