天天看點

次元變換--首先将矩陣倒過來

如果你拿着一根3米長的杆子上車你會怎麼進入車裡,肯定是把杆子平起來進入的,如果豎起來的話一般是進不去的,起碼我是沒有見過那個高的車。把杆子放平,雖然我知道它長度依然很長,但是同時我知道它高度減少了,進入車門時我不關心長度,我隻關心放平後的高度。

其實計算機算法中也可以使用這個簡單的原理,首先看看我曾經寫過的一個排序算法,叫做賽跑排序,雖然我們知道待排序的數字很多,但是我們同時也知道每個數字(以int為例)也就是32位,如果我們把數字平放的話,不再一個數字一個數字的比較,而是一個位一個位的比較,那麼就是賽跑算法了,最理想的情況32次就完事了。再考慮一個例子,就是linux排程器發展中O(n)到O(1)的變化,O(n)的想法是按照優先級排序n個程序,而O(1)則是想到優先級是固定數量的,于是将O(n)的隊列平放,這樣按照每個優先級一個連結清單的方式進行排序,這就是O(1),其實和賽跑排序的思想是一樣的。這兩個例子和前面拿杆子上車的例子的關鍵思想是一樣的,就是盡量利用好固定的東西,不确定的東西即使你再厲害也是不可靠的(再好的哈希函數也沒有一個靜态數組效率高)。

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1274067

繼續閱讀