python代码 程序员编程艺术 2.1
生活随笔
收集整理的這篇文章主要介紹了
python代码 程序员编程艺术 2.1
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先一般考慮“萬能的”暴力窮舉(遞歸、回溯)。但因為窮舉時間復雜度通常過高,所以需要考慮更好的方法,如分治法(通過分而治之,然后歸并),以及空間換時間(如活用哈希表)。
此外,選擇合適的數(shù)據(jù)結(jié)構(gòu)可以顯著提升效率,如尋找最小的k個數(shù)中,用堆代替數(shù)組。
再有,如果題目允許排序,則可以考慮排序。比如,尋找和為定值的兩個數(shù)中,先排序,然后用前后兩個指針往中間掃。而如果如果已經(jīng)排好序了(如楊氏矩陣查找中),則想想有無必要二分。但是,如果題目不允許排序呢?這個時候,我們可以考慮不改變數(shù)列順序的貪心算法(如最小生成樹Prim、Kruskal及最短路dijkstra),或動態(tài)規(guī)劃(如 01背包問題,每一步都在決策)。
2.1 尋找最小的k個數(shù):解法1, 解法4
快速排序使用分治法(Divide and conquer)策略來把一個序列(list)分為兩個子序列(sub-lists)。
步驟為:
轉(zhuǎn)載于:https://blog.51cto.com/ctoxiongping/1614957
總結(jié)
以上是生活随笔為你收集整理的python代码 程序员编程艺术 2.1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ionic 安装 inappbrowse
- 下一篇: 数据库中的JDBC