讀《Java數據結構和算法》(第六章)

讀《Java數據結構和算法》(第六章)

一、第六章6.1

1、遞歸
(1)導致遞歸的方法返回而沒有再一次進行遞歸調用,爲 基值情況(base case)
(2)每一個遞歸方法都有一個基值(終止)條件,以防止無線地遞歸下去,以及由此引發地程序崩潰
(3)遞歸方法的特徵

調用自身
當調用自身的時候,是爲了解決更小的問題
存在某個足夠簡單的問題的層次,在這一層算法不需要調用自己就可以直接解答,且返回結構

(4)遞歸方法的效率
調用方法有額外開銷,傳給這個方法的參數以及方法返回的地址都要被壓入到一個內部的棧裏
低效也反映在系統內存空間存儲的所有中間參數和返回值,引起棧溢出的問題

二、第六章6.2

1、遞歸的二分查找
(1)每一次折半確認範圍
(2)遞歸的二分查找和非遞歸的二分查找同樣的大O效率:O(logN)
(3)遞歸的二分查找更爲簡潔,但速度可能會慢一點

2、分治算法
(1)遞歸的二分查找法是分治算法的一個例子
(2)將大問題分成更多的小問題

3、歸併排序
(1)O(N*logN)
(2)歸併算法的中心是歸併兩個已經有序的數組
(3)歸併排序的思想是把一個數組分成兩半,排序每一半

4、消除遞歸
(1)使用棧實現遞歸
(2)當調用一個方法的時候,編譯器會把這個方法的所有參數及其返回地址(這個方法返回時控制到達的地方)都壓入棧中,然後把控制轉移給這個方法,當這個方法返回時,這些值退棧。參數消失了,並且控制權重新回到返回地址處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章