掌握數據結構和算法知識是成爲一名合格開發人員的必須,不管你是使用任何一種編程語言。python
舉例:算法
若是a+b+c=1000,且a^2+b^2=c^2(a,b,c爲天然數),如何求出全部a,b,c可能的組合?編程
思路(枚舉法):數據結構
算法是計算機處理信息的本質,由於計算機程序本質上是一個算法來告訴計算機確切的步驟來執行一個指定的任務。通常地,當算法在處理信息時,會從輸入設備或數據的存儲地址讀取數據,把結果寫入輸出設備或某個存儲地址供之後再調用。app
算法是獨立存在的一種解決問題的方法和思想。數據結構和算法
對於算法而言,實現的語言並不重要,重要的是思想。編程語言
算法能夠有不一樣的語言描述實現版本(如C描述、C++描述、Python描述等),咱們如今是在用Python語言進行描述實現。spa
1.輸入: 算法具備0個或多個輸入.net
2.輸出: 算法至少有1個或多個輸出code
3.有窮性: 算法在有限的步驟以後會自動結束而不會無限循環,而且每個步驟能夠在可接受的時間內完成
4.肯定性:算法中的每一步都有肯定的含義,不會出現二義性
5.可行性:算法的每一步都是可行的,也就是說每一步都可以執行有限的次數完成
時間複雜度與大O記法
每臺機器執行的總時間不一樣
可是執行基本運算數量大致相同
1.基本操做,即只有常數項,認爲其時間複雜度爲O(1)
2.順序結構,時間複雜度按加法進行計算
3.循環結構,時間複雜度按乘法進行計算
4.分支結構,時間複雜度取最大值
5.判斷一個算法的效率時,每每只須要關注操做數量的最高次項,其它次要項和常數項能夠忽略
6.在沒有特殊說明時,咱們所分析的算法的時間複雜度都是指最壞時間複雜度