衡量算法的标准
1. 時(shí)間復(fù)雜度
??????????????????????? 算法核心部分大概要執(zhí)行的次數(shù). 而非執(zhí)行時(shí)間.
????????????????????????
???????????????????????? 為什么不能是執(zhí)行時(shí)間. 是因?yàn)?個(gè)算法在不同的機(jī)器和不同的環(huán)境中執(zhí)行時(shí)間可能有巨大的差別.
???????????????????????? 而什么是核心部分大概要執(zhí)行的時(shí)間?
?????????????
????????????????????????? 就是假設(shè)算法是1個(gè)循環(huán), 那么循環(huán)里面的部分被循環(huán)執(zhí)行的次數(shù).
?????????????????????????? 例如1個(gè)算法
?????????????????????????? for (i =0; i <n ;i++){
????????????????????????????????? main_part();
??????????????????????????? }
?????????????????????????? 他的核心部分main_part() 被執(zhí)行了n次, 也就是說(shuō)隨著n的增長(zhǎng). 被執(zhí)行的次數(shù)也隨著線(xiàn)性增長(zhǎng).
??????????????????????????? 我們可以說(shuō)這個(gè)算法的時(shí)間復(fù)雜度是 O(n)
?????????????????????????? 而另1個(gè)算法
?????????????????????????? for (i=0; i<n; i++){
???????????????????????????????? for (j=0; j<n;j++{
?????????????????????????????????????????? main_part();
???????????????????????????????? }
????????????????????????? }
?????????????????????????????? mian_part() 部分的執(zhí)行次數(shù)隨著n的增長(zhǎng)而幾何級(jí)數(shù)遞增.
????????????????????????????? 時(shí)間復(fù)雜度就是O(n^2)?? 通常這是1個(gè)很糟糕的算法.
???????????????????????????? 而某個(gè)算法完全沒(méi)有循環(huán)部分?? 那么它的時(shí)間復(fù)雜度就是O(1), 通常這個(gè)是一個(gè)有前置條件的算法.
?????????????? ? 2. 空間復(fù)雜度
?????????????????????? 算法執(zhí)行過(guò)程中大概所占用的最大內(nèi)存.
?
? ? ? ? ? ? ? ?
???????????????? 3. 難易程度
?????????????????????????? 就是算法被他人理解的難易程度.
???????????????? 4. 健壯性
?????????????????????? 遇到非法參數(shù)是否容易出錯(cuò).
?????????????
??????????????????
??????????????????? 通常學(xué)習(xí)上或者搞研究的話(huà)最重要的是前兩點(diǎn). 但是在生產(chǎn)應(yīng)用中第3點(diǎn)往往更重要. 因?yàn)?個(gè)大的項(xiàng)目是1個(gè)團(tuán)隊(duì)合作完成的, 在里面加入只有你自己才能理解的內(nèi)容實(shí)在不是明知的做法.
??????????????????????? 算法核心部分大概要執(zhí)行的次數(shù). 而非執(zhí)行時(shí)間.
????????????????????????
???????????????????????? 為什么不能是執(zhí)行時(shí)間. 是因?yàn)?個(gè)算法在不同的機(jī)器和不同的環(huán)境中執(zhí)行時(shí)間可能有巨大的差別.
???????????????????????? 而什么是核心部分大概要執(zhí)行的時(shí)間?
?????????????
????????????????????????? 就是假設(shè)算法是1個(gè)循環(huán), 那么循環(huán)里面的部分被循環(huán)執(zhí)行的次數(shù).
?????????????????????????? 例如1個(gè)算法
?????????????????????????? for (i =0; i <n ;i++){
????????????????????????????????? main_part();
??????????????????????????? }
?????????????????????????? 他的核心部分main_part() 被執(zhí)行了n次, 也就是說(shuō)隨著n的增長(zhǎng). 被執(zhí)行的次數(shù)也隨著線(xiàn)性增長(zhǎng).
??????????????????????????? 我們可以說(shuō)這個(gè)算法的時(shí)間復(fù)雜度是 O(n)
?????????????????????????? 而另1個(gè)算法
?????????????????????????? for (i=0; i<n; i++){
???????????????????????????????? for (j=0; j<n;j++{
?????????????????????????????????????????? main_part();
???????????????????????????????? }
????????????????????????? }
?????????????????????????????? mian_part() 部分的執(zhí)行次數(shù)隨著n的增長(zhǎng)而幾何級(jí)數(shù)遞增.
????????????????????????????? 時(shí)間復(fù)雜度就是O(n^2)?? 通常這是1個(gè)很糟糕的算法.
???????????????????????????? 而某個(gè)算法完全沒(méi)有循環(huán)部分?? 那么它的時(shí)間復(fù)雜度就是O(1), 通常這個(gè)是一個(gè)有前置條件的算法.
?????????????? ? 2. 空間復(fù)雜度
?????????????????????? 算法執(zhí)行過(guò)程中大概所占用的最大內(nèi)存.
?
? ? ? ? ? ? ? ?
???????????????? 3. 難易程度
?????????????????????????? 就是算法被他人理解的難易程度.
???????????????? 4. 健壯性
?????????????????????? 遇到非法參數(shù)是否容易出錯(cuò).
?????????????
??????????????????
??????????????????? 通常學(xué)習(xí)上或者搞研究的話(huà)最重要的是前兩點(diǎn). 但是在生產(chǎn)應(yīng)用中第3點(diǎn)往往更重要. 因?yàn)?個(gè)大的項(xiàng)目是1個(gè)團(tuán)隊(duì)合作完成的, 在里面加入只有你自己才能理解的內(nèi)容實(shí)在不是明知的做法.
總結(jié)
- 上一篇: linux 编译内核几个常见问题解决方法
- 下一篇: Oracle 的两种工作模式Dedica