python gmm em算法 2维数据_python自学日记18——数据结构与算法(2)
這兩天找了很多關于Python講解數據結構和算法的書和視頻,最終確定下來《python數據結構與算法分析》以及北京大學線上課程“數據結構與算法python版”,先看了課程后來發現好像課程結構和這本書差不多,就當配套視頻看了。
剛開始還是從一些理論知識開始,雖然也想馬上開始敲代碼,但是理論內容還是需要掌握一些的,確實有給自己帶來一些新的認識。我也一直重視自己關于編程思維方面的訓練,正好借助學習算法的機會鍛煉一下自己解決問題的能力。
應該認識到的是雖然python現在很熱門,但是python只是工具,就像計算機科學并不僅是研究計算機本身,盡管計算機在這一學科中是非常重要的工具,但也僅僅只是個工具。學習python和學習計算機科學一樣,研究的對象是問題、解決問題的過程,以及通過該過程得到的解決方案。給定一個問題,計算機科學家的目標是開發一個能夠逐步解決該問題的算法。當然算法并不是萬能的,某些問題并沒有解決方案,認清這一事實很重要。
抽象
抽象是把我們認為對問題不重要的部分拋棄掉,只留下問題的本質的信息就叫做抽象。抽象思維使得我們能夠分別從邏輯視角和物理視角來看待問題及解決方案。就像我們使用手機一樣,我們會使用通信工具、聽音樂、打游戲等,但我們并不需要了解這些功能的實現細節。我們都是從邏輯視角或者使用者視角來看待手機,但是程序員、技術支持人員則從另一個角度看待手機,他們必須知道操作系統的原理、網絡協議的配置,以及如何編寫各種腳本來控制手機等。他們必須能夠控制用戶不需要了解的底層細節。
編程上抽象的例子如python的模塊,比如我們要計算平方根,我們知道可以導入math模塊
import導入math模塊,使用sqrt方法我們就知道可以求出16的平方根4,我們并不需要知道平方根究竟是如何計算出來的,只需要知道計算平方根的函數名是什么以及如何使用它,這是過程抽象。
為什么要學習數據結構及抽象數據類型
計算機中的所有數據實例均由二進制字符串來表達。為了賦予這些數據實際的意義,必須要有數據類型,例如整型、浮點型等。簡單的計算問題可以由常見的數據類型解決,但我們會發現需要問題及其解決方案都過于復雜。盡管由編程語言提供的簡單的控制語句和數據類型能夠表達復雜的解決方案,但它們在解決問題的過程中仍存在不足。
因此,為了控制問題及解決方案的復雜度,計算機科學家利用抽象來幫助自己專注于全局,從而避免迷失在眾多細節中。通過對問題進行建模,可以更高效的解決問題。模型可以幫助計算機科學家更一致的描述算法要用到的數據。
過程抽象將功能實現細節隱藏起來,從而使用戶能夠從更高的視角來看待功能。數據抽象的基本思想與此類似。抽象數據類型(ADT)從邏輯上描述了如何看待數據及其運算而無需考慮具體實現。通過這樣的抽象,我們對數據進行了一層封裝,基本思想是封裝具體的實現細節,使它們對用戶不可見。
抽象數據類型的實現被稱為數據結構。
為何學習算法
各種算法之間往往差異巨大,學習算法可以掌握比較不同算法的分析技巧。要能夠區分有解的問題,無解的問題,以及雖然有解但需要過多的資源和時間來求解的問題。
在選擇算法時,經常會有所權衡。需要學會如何評估一個解決方案。練習如何找到一個解決方案并且確定其為優秀的解決方案。
最大公約數求解優化
在“python自學日記2——函數調試”中有寫過一次求最大公約數的代碼如下:
def這段代碼有點冗余的地方就是不需要判斷a是否等于0,因為a等于0的情況在下面的判斷中包含了,另外這段代碼有另一個問題:print(b)正常顯示,return b在gcd(10,5)這種一次整除情況下能顯示輸出結果,在無法整除的例如gcd(3,4)這種則不顯示結果,要注意print和return的區別。
所以改成代碼如下:
def這樣代碼更精簡,而且也不用糾結return b還是print(b)的問題了。
總結
以上是生活随笔為你收集整理的python gmm em算法 2维数据_python自学日记18——数据结构与算法(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: http三次握手_HTTP 三次握手 四
- 下一篇: 运用数组求平均值