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