算法是編程的核心,是計算機解決問題的方法流程,簡單說來,算法就是解決問題的步驟。如果用我們熟知的事物來類比,算法就像是菜譜,按照正确的順序遵從這些步驟做菜,做出的菜會很美味。同樣的道理,計算機按照算法描述的流程來執行程序,會得出美妙的計算結果。
學習Python編程不僅僅是學習Python編程語言本身,計算機算法也同樣的重要。計算機語言和技術日新月異,但萬變不離其宗的永遠是算法。算法就是編程的内功、精髓。因此,要想學好編程,掌握算法知識必不可少。
易嘉編程趣味算法系列将基于Python3為各位同學講解日常工作、生活和學習中常用的算法。一起來看一個實際的問題場景,到底怎樣巧妙地利用算法解決場景中的問題呢?
Part.1
問題場景:
小明的爺爺喜歡讀報紙,更喜歡鑽研報紙上的數獨題,一天,小明爺爺對報紙上一個标題為世界上最難的數獨題發起挑戰。
這個數獨題是芬蘭數學家因卡拉花費3個月時間設計出來的,号稱世界上迄今難度最大的數獨遊戲,而且隻有一個答案。因此卡拉說隻有思考能力最快、頭腦最聰明的人才能破解這個遊戲。
現在該如何通過Python編程快速準确地解決這個問題呢?
首先,分析問題,明确問題會用到的知識,并設計解決問題的步驟;
其次,找出解決步驟對應的算法,編寫程序代碼來實現這個算法;
最後,運行程序代碼,即可得出結果。
Part.2
分析思路:
解答這個數獨題,那麼我們最應該做的是先了解數獨的遊戲規則。
這題正好是一個以9宮數獨題,在9階方陣中,包含了81個小格(九列九行),其中又再分成九個小正方形(稱為宮),每宮有九小格。數獨(sudoku)是一種在宮格裡面填數的小遊戲,标準數獨的規則一般都隻有三點:
所以,做這個數獨題的時候就需要我們填入的數字符合數獨的遊戲規則。
做數獨題,最常用的方法就是嘗試法,一個數一個數的去嘗試,如果填入的數字不符合數獨規則就換一個數去試,如果所有的數都不符合時,就需要回退到上一步,将上一步的數字換掉,重新進行新一輪的嘗試。
這就好像是在走迷宮一樣,沒有地圖,沒有引導,面對每一個岔路口都隻能以嘗試探索的方式深入,進而找到出口,在這個嘗試探索的過程中,一旦發現線路不對,就需要返回岔路口,一旦發現當前岔路口都不能走,則需要返回上一岔路口,重新選擇路線去嘗試。
實際上這個解題思路就是我們計算機算法中的回溯算法.
算法:回溯算法(Backtracking algorithm)
回溯算法,又稱試探法,選優搜索法。回溯算法的核心思想剛才已經闡述了。能夠應用回溯算法解決的問題大都具備以下特點:
回溯算法是在嘗試過程中,逐步構建最終的答案。
Part.3
Python代碼實現 :
程序運行結果:
答案填在原題中就是:
回溯算法實質上一種深度優先的算法,許多複雜的,規模較大的問題都可以使用回溯法,有“通用解題方法”的美稱。
正如上例,在回溯算法面前,号稱世界上最難的數獨題也不過如此,輕輕松松就能得到解決。怎麼樣?是不是感覺算法真的很強大?
易嘉編程後續将會和大家分享更多的Python算法趣味例子,一起進步。
想了解更多Python算法的朋友可以關注我們易嘉編程yjbc88888888。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!