所謂算法,就是隱匿在數據結構後背後的原理,在開發中好的算法可以降低時間複雜度提升可複用性。《算法之美——隱匿在數據結構背後的原理(C++版)》一書圍繞算法與數據結構這個話題,用漢諾塔問題和八皇后問題等22個經典算法問題循序漸進、深入淺出地介紹了現代計算機技術中常用的45個經典算法。讀後讓人醍醐灌頂,茅塞頓開,並感覺相見恨晚。
這本書的第六章《遞歸——老和尚講故事》寫的很好,首先介紹了遞歸的概念,然後用漢諾塔問題,傳染病問題和八皇后問題分別闡述並實踐了遞歸的兩種思想——分治和回溯。
我是一個不會用NDK的Android工程師,C++的水平見笑大方,但是算法的思想是想通的,我讀了左老師對遞歸的見解後感覺醍醐灌頂,當頭棒喝,馬上寫了一個遍歷整個界面並取消所有RadioButton點擊事件的方法:
private void banClickable(ViewGroup radioGroup){
for (int i = 0;i<radioGroup.getChildCount();i++){
View v = radioGroup.getChildAt(i);
if ( v instanceof RadioButton){
v.setEnabled(false);
}
if ( v instanceof ViewGroup){
banClickable((ViewGroup) v);
}
}
}
在這個一共15個RadioButton的界面裏分別去掉每一個的點擊事件只需要一分鐘,寫這個方法需要十分鐘。但是如果RadioButton足夠多,《算法之美——隱匿在數據結構背後的原理(C++版)》教我的遞歸算法之於笨方法的效率不亞於雕版印刷術之於手抄的效率,而且能大大減少代碼量,增加可維護性。
我還有一本算法書《編程之美》,這兩本書都有大量算法案例。不同點在於《編程之美》側重於C的特性和在白板上手寫僞代碼(面試算法),而《算法之美》則詳細收錄了大量可以被改寫成Java的C++例題來提升讀者實際工作中的編程能力。