標籤:遞迴演算法
一開始講了演算法的空間複雜度和時間複雜度的分析,其怎麼由來的,一步步的分析演變,以前看過《演算法之道》,這個還有點熟悉,就是具體的例子的時間複雜度的分析不怎麼
會,應多加練習,畢竟
這是很基礎的東西~
然後就是遞迴和分治~ 今晚只夠時間講遞迴~
其實,都看過遞迴~以前剛剛開始接觸的時候覺得很容易,慢慢的就很難了,就是實現代碼的時候碰到了思維障礙,過不去,大二時就學過遞迴~很重要的基礎
以前的印象是調用自身,“推卸責任”,數學公式,遞迴圖,經典的Fibonacci數列~
以前就是看或寫遞迴代碼的時候就會遇到思維障礙,這很難說明,但就是要理解其中的一個環節時卡住了,不明白為什麼~
通過今晚的課,我想,也許是我認識理解遞迴演算法的方式錯誤了~應該充分的把握其本質(要拿出來用時最直接接觸的本質)和“不求甚解”~
今晚,老師將了遞迴的空間本質,其實就是一個棧,臨界結束條件在最頂層,最底層的是n的情況,這個就像是個手榴彈一樣,最頂的就是個保險環,我們要寫的代碼就是保險
環(臨界結束條件)和炸藥(遞迴關係,反應鏈)~這個記憶很重要,因為明確了要寫的是什麼,就不會出現思維障礙了~理解起來就順了,要寫怎麼樣的遞迴代碼就一目瞭然了~
寫遞迴代碼,要先推出臨界結束條件和遞迴關係式,然後再去實現代碼!!!要分析遞迴的時間複雜度也是要先寫出遞迴式分析!!!遞迴:重在“歸”和化歸差不多!
比如,Fibonacci數列f[n]=f[n-1]+f[n-2],分析的話,就是T(n)變為兩個T(n)(T(n-1)和T(n-2)都看為T(n)),就是T(n)=2T(n)+O(1),
每個T(n)都變為2T(n),有n個,即是O(2^n)的複雜度~(其中還有一個O(n),忽略不計)~<注意!這裡的兩個字“變為”是很重要的思想!!!>
還有就是講了全排列~很經典~
perm(n)=(變為)rn(perm(n-1))+rn-1(perm(n-1))......r0(perm(n-1))
遞迴演算法,幾乎都是找f(n)和f(n-1)或f(n/2)等等的關係!
我相信其實這些都很簡單,我知道我所理解的方向不對,即是開啟的方式不對罷了,所以才會學演算法這麼慢!!!加油!!!
筆記一:遞迴