遞迴問題

青色流蘇發表於2020-10-29

書到手了,所以開始對數學發起進攻了。第一章講解遞迴問題,內容一下午很快就過完了,其實就講解了三個問題。
  第一個是很熟悉的河內塔問題,畢竟已經接觸過了,而且內容也較簡單。其實這個問題還是主要為了介紹解決這類問題的一般步驟,通過研究較小情形以尋找規律,在推廣到一般情形以進一步證實一般規律得到遞迴式,接著根據遞推式求得相應的封閉式,此封閉式稱為問題的遞迴解。在運用到計算機時,很多時候推匯出遞迴式就可以解決大部分問題了,畢竟封閉式能夠實現差不多O(1)的複雜度實在很難,而且在資料是變化的情況下很多情況是不存在的,不過對結論的進一步推到或者簡化卻是很有必要的,很多時候做題得到一個結論認為可行就不再繼續思考了,真正去打比賽當然可以,不過對於平時確是限制了自己思維了。在之前數論的第一次作業任務時,記得有個題目我推到出來了一個結論,並確定可以實現就沒有繼續思索,提交之後也確實AC了,但搜了題解後才發現,原來還可以繼續化簡,使得結論的程式碼更易實現。當然,這對於結果來說其實並沒有多少作用,但除了賽場,都不能只求結果。
  第二個問題是用直線分割平面問題。當然,也是接觸過的,而且方法也和我先前已有的方法相同,只不過當已經得到了最優的Aₙ結果後再考慮Aₙ-Aₙ₋₁這新增的是怎麼來的,而我會去觀察該用什麼方式去切割才能得到更多的區間,找到以後再得出結論。前一種方式沒有根據性,所以不能完全確定這就是最優解,後一種方式有根據性,在考慮全面的情況下可以幾乎確定能夠得出最優解,但要求準確分析題目,各有益弊吧。推到封閉式時,求解三角陣列保齡球數目(雖然我們都已經熟知1~n的和是n*(n+1)/2)時把Sₙ反向書寫後相加其實就是將三角形倒置後於原三角形拼接成一個平行四邊形,不過這裡不會去將兩個三角形進行重合,所以就由原先邊長和高都為n的三角形轉換成了底為n+1高為n的平行四邊形,面積除二即為結果(具體圖等在書上畫了,這裡就不展示了)。再然後是對這一問題的推廣,當用折線切割平面時又會怎樣。這裡介紹的是將折線補全為兩個直線切割平面的情況去對比,進而得到n條折線切割與2n條直線切割間的關係,思路確實很好。不過,我是延續先前的思路解決的。即每一步都用新的折線去切割以得到最多的新區域(這一思維挺像貪心的思維),再找到新加的區域與原先情形的關係,遞推關係雖然不同(跟直線切割沒關係)但得到的封閉式是一樣的,(具體推到過程也在書上寫了,這裡也不展示了)。
  第三個問題是約瑟夫問題,較前兩個難度提升了,當然看懂還是很容易的,不過由此問題推廣的各種結論以及得到的一般約瑟夫問題解實在讓人眼前一亮。這裡考慮的不再是解決已有的問題了,而是發散的考慮還能從這個問題得到的結論得出什麼其他結論或者更高階的結論,這是提醒我們去培養髮散性思維思考問題。
  綜合看下這三個問題,難度是逐漸增加的。第一個問題較簡單,所以思路也很單一,不需要什麼其他方法。第二個問題稍有難度,但問題結構簡單(或者說貼近於我們的一般思維),所以也能夠有自己的想法,並且以自己的方式解決問題。第三個難度進一步加大,並擴充套件思考範圍,讓人很容易接受,並逐步明白。不過因為問題結構較複雜,且給定的方法有那麼完美,所以感覺跟在作者腳後跟後面如此舒服,結果回頭看來時,走過的路如此清晰而周遭的環境如此模糊,所以也沒有什麼自己的想法。換句話說,我接受了這一思路,並不說明我掌握了這一種思維,當我能夠從自己的角度用自己的方法解決這一問題時,我應該就是真的懂了。

相關文章