《圖解數據結構-- 使用Python》筆記 第1章

1.3 認識程序設計

1.3.3 面向對象程序設計

1. 什麼是“面向對象程序設計”

“面向對象程序設計”(Object-Oriented Programming)的主要設計思想:將存在於日常生活中隨處可見的對象(object)概念應用在軟件開發模式中。OOP讓我們以一種更生活化、可讀性更高的設計思路來進行程序的開發和設計,並且開發出來的程序也更容易擴充、修改及維護。

2. 面嚮對象語言特性

  • 封裝性(Encapsulation)
  • 繼承性(Inheritance)
  • 多態性(Polymorphism)

1)封裝

封裝:用“類”來實現“抽象數據類型”(ADT)。

類:一種具體描述對象狀態與行爲的數據類型。

對象:按照“類”這個模型或藍圖產生的實例。

舉例來說,

汽車類 -》 汽車實體對象

2)繼承

繼承:允許代碼重複使用,同時可以表達樹形結構中,父代與子代的遺傳現象。

舉例來說,

“汽車類”就是“交通工具類”的子類,“汽車類”可以繼承“交通工具類”。

3)多態

多態:讓具有繼承關係的不同類別對象可以調用相同名稱的成員函數。

1.4 算法性能

這一小節主要談兩個概念

  • “時間複雜度”(Time Complexity)
  • “空間複雜度”(Space Complexity)

1)空間複雜度

空間複雜度:估算一個算法在運行過程中臨時佔用內存空間的大小,是一種漸進表示法。

2)時間複雜度

時間複雜度:用某一個算法執行步驟技術來衡量運行時間的標準,也是一種漸進表示法。

由於涉及變量存儲類型與表達式的複雜度,因此沒有必要精確計算時間的長短。使用“估算”的辦法衡量時間更爲恰當,詳細定義如下:

  • 在一個完全理想狀態下,定義T(n)來表示程序執行所要花費的時間,其中n代表數據輸入量。最大運行時間用Big-Oh表示。
  • 分析算法的時間複雜度必須考慮它的成長比率,往往是一個函數。

1.4.1 Big-Oh

O(f(n))O(f(n)):某算法在計算機中所需運行時間不會超過某一常數倍數的f(n)f(n)

這一部分的重點是:學會計算時間複雜度。

例1.4.1 計算T(n)=3n3+2n2+5nT(n)=3n^3+2n^2+5n的時間複雜度

答:因爲多項式T(n)T(n)的最高項次數是3,所以時間複雜度爲O(n3)O(n^3)

1.4.2 Ω\Omega

Ω\Omega也是一種時間複雜度的漸進表示法。如果說Big-Oh表示運行時間估算的最壞情況,則Ω\Omega就是運行時間估算的最好情況。

1.4.3 Θ\Theta

Θ\Theta是一種比Big-Oh與Ω\Omega更精確的時間複雜度的漸進表示法。

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