演算法的好壞有兩個指標:需要的記憶體空間(可以 理解為執行**需要的記憶體空間),**執行的時間(可以簡單的理解為**需要執行的步數)
程式的設計要不就是時間換空間,要不就是用空間去換時間。並且時間和空間是可以進行相互轉化的:對於執行的慢的程式,可以通過消耗記憶體(即構造新的資料結構)來進行優化。而消耗記憶體的程式,也可以多消耗時間來降低記憶體的消耗。
下面舉個簡單的例子:比如要寫乙個兩個值互換的演算法
//時間換空間
int a = 5;
int b = 10;
a = a+b;//得到a值為15
b = a-b;//得到b值為5
a = a-b;//得到a值為10
//空間換時間
int c = 5;
int d = 10;
int e = c;//得到e為5
c= d;//得到c值為10
d = e;//得到d值為
結論:第乙個a和b互換值的演算法:總共進行了3次加減運算和三次賦值運算,能夠把a和b的值進行互換,沒有開闢多餘的記憶體空間。c和d互換的時候,多開闢了乙個記憶體空間儲存e,但是這樣只需要進行三次賦值運算就可以把c和d的值進行互換。所以第乙個演算法空間效率高,時間效率低,第二個演算法空間效率低,時間效率高,
我們在程式當中,請求分頁,請求分段,都屬於用時間去換空間。在專案當中使用各種快取技術,都屬於利用空間去換時間。
空間換時間
空間換時間這樣的思路,在程式設計演算法 硬體設計燈 戰爭領域都是有涉及的,我這裡所講的空間換時間是被包含在資料倉儲範疇裡面的。空間換時間,我的理解是什麼呢?就是我們需要設計一種資料結構,這種資料結構最大的特點是提高查詢的效率。我在這裡總結一下,空間換時間的做法。在業務系統裡面,一般會按照資料庫的三正...
空間換時間隨筆
空間換時間隨筆 在實際的生活中,難免遇到排隊的事情,比如去銀行存錢取錢,轉賬等,如果去櫃檯都有先拿個號,按號排隊處理業務,這是非常常見的,火爆的餐館也是這樣。為提高效率,減少等待時間,銀行的做法可以是簡化辦事流程,提供營業員的處理速度來減少使用者等待的時間,另乙個做法可以是增加櫃檯,多些營業員來處理...
以空間換時間經典演算法
以前看過一篇文章 優化c 常用的幾招 作者提到的第一招就是 以空間換時間 還舉了乙個例子,由於比較經典,引用一下 電腦程式中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程式的效率問題,我們就有了解決問題的第1招 以空間換時間。比如說字串的賦值 方法a 通常的辦法 define l...