算法(二)降低時間複雜度的方法

算法(二)降低時間複雜度的方法

對於一個問題的算法來說,之所以稱之爲算法,首先它必須能夠解決這個問題(稱爲準確性)。其次,通過這個算法編寫的程序要求在任何情況下不能崩潰(稱爲健壯性)。

如果準確性和健壯性都滿足,接下來,就要考慮最重要的一點:通過算法編寫的程序,運行的效率怎麼樣。
在這裏插入圖片描述

一、降低時間複雜度的方法

1、充分利用已有信息
2、使用某種數據結構
優先級隊列使用的兩種場景:
想要根據Map的value值對Map進行排序
想要對某幾個元素的集合進行排序,此時可以針對這幾個元素定義一個類class
3、雙指針遍歷
4、空間換時間
算法的時間複雜度和空間複雜度是可以相互轉化的。
谷歌瀏覽器相比於其他的瀏覽器,運行速度要快。是因爲它佔用了更多的內存空間,以空間換取了時間。
5、數據預處理
6、二分查找
一遇到排序好的數組,下意識就得想到使用二分查找來獲得其中某個值。可以參考Java自帶的Arrays.binarySearch()方法,注意返回值的正負問題即可。
7、數學推理
數學推理通常可以將一個過程直接化爲一個公式得到結果,耐下性子分析過程,推導公式,將非常有利於降低時間複雜度和空間複雜度。

二、幾個簡單的判定時間複雜度的方法:

1.常數級是O(1):就是不管n多大,始終是一個常數;
比如說執行一條語句,a+b;
2.通常循環是O(n)(一層);(因爲執行n次常數級操作)
嵌套通常情況是O(n^m);
3.採用二分策略可以降到log2(n);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章