# 資料結構與演算法
### 一、演算法效能分析
#### 1.時間複雜度
1)定義:用來定性描述演算法的執行時間,一般情況用**big o**來判斷,其表示該演算法在最差條件下執行所需時間。
**big o —— 上限,最差情況 ; big omega —— 下限;big theta—— 中間效能,不好不壞,上下界相等。**
2)**效能排序: o(1) < o(logn) < o(n) < o(n^2) < o(n^3) < o(2^n) < o(n!)**
預設資料規模足夠大的情況下,當出現含n的多項式時,一般省略常數項係數,考慮更高次數的影響
個人理解:可以看作函式求極限時,函式隨著自變數趨於無窮大時,自身的變化趨勢。
3)**遞迴演算法的時間複雜度本質:遞迴次數*每次遞迴的時間複雜度**
**4)案例——求x的n次方**
```int function1(int x, int n)
return result;
} //時間複雜度big o(n)
int function2(intx, int n)
return function2(x,n-1)*x;
} //時間複雜度big o(n*1)
int function3(int x, int n)
if(n%2==1)
return function3(x, n / 2) * function3(x, n / 2);
} //二叉樹演算法 時間複雜度big o(n-1)
int function4(int x, int n)
t = function4(x, n / 2)
if(n%2==1)
return t * t;
} // 時間複雜度big o(logn);n(1/2)^m=1
```#### 2.空間複雜度
1)定義:用來考慮程式執行時占用記憶體的大小
2)**遞迴演算法的空間複雜度=每次遞迴的空間複雜度*遞迴深度**
3)傳遞函式引數時,考慮其實是拷貝整個數值還是首元素位址,若是拷貝整個數值,其該層空間複雜度是o(n),反之,則是o(n)。
#### 3.**記憶體消耗
1)記憶體管理:c/c++ 的堆存空間申請和釋放完全自己管理;python記憶體管理是私有堆空間管理的,所有python物件和資料結構都儲存在私有堆空間。程式設計師沒有訪問堆許可權,只有直譯器才行。因此,python將記憶體封裝很好,導致python的基本資料型別所用的記憶體會遠大於存放純資料型別所佔記憶體。
2)c/c++記憶體管理:固定部分:**區和資料區;可變部分:棧區和堆區。
##### **3)為什麼64位編譯器的指標大小是8個位元組?**
1個位元組佔8個位元,那4個位元組就是32個位元,可存放資料大小為2^32=4g空間大小。由於安裝的64位作業系統的記憶體大小已超過4g,若指標還是4個位元組,就不能定址全部的記憶體位址,因此64位編譯器使用8個位元組指標尋找所有記憶體位址
##### 4)為什麼需要記憶體對齊?
2.硬體原因:記憶體對齊操作後可以大大提公升cpu訪問記憶體的速度。
translate with
xenglish
arabic
hebrew
polish
bulgarian
hindi
portuguese
catalan
hmong daw
romanian
chinese simplified
hungarian
russian
chinese traditional
indonesian
slovak
czech
italian
slovenian
danish
japanese
spanish
dutch
klingon
swedish
english
korean
thai
estonian
latvian
turkish
finnish
lithuanian
ukrainian
french
malay
urdu
german
maltese
vietnamese
greek
norwegian
welsh
haitian creole
persian
translate with
copy the url below
back
embed the snippet below in your site
" readonly>
enable collaborative features and customize widget: bing webmaster portal
back
時間複雜度與空間複雜度
空間複雜度 space complexity 是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s n o f n 比如直接 插入排序 的時間複雜度 是o n 2 空間複雜度是o 1 而一般的 遞迴演算法就要有o n 的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法...
時間複雜度與空間複雜度
本文是對時間複雜度以及空間複雜度的乙個理解 時間複雜度 由於環境的不同,同樣的 執行所需要的時間是不同的,所以是不能拿來比較的 而函式中執行的次數確實一樣的 所以時間複雜度就是 程式每個迴圈中的語句總共會執行的次數 時間複雜度的表示方法 大o漸進表示法 o f n 這裡的f n 是什麼呢?void ...
時間複雜度與空間複雜度
本文部分取自搜狗百科 在求演算法效率時,通常有事前分析和事後分析兩種方法,事後分析因為必須實際檢驗過後才能得出答案,且可能由於硬體方面等外部原因影響結果而不被推廣,事前分析的主要就是在考量乙個演算法的基本執行次數,這就是時間複雜度。時間複雜度 一般情況下,演算法中基本操作重複執行的次數是問題規模n的...