空間複雜度
最近為了考軟體設計師在補知識,先從資料結構、演算法這些沒有系統學習的部分下刀。
寫這個系列是為了加深和整理對資料結構學習的印象。
資料結構:是相互之間存在一種或多種特定關係的資料元素的集合。
eg:乙個父親三個兒子,乙個兒子兩個孫子。
group=(p,r)
其中:p=
r=r1=
r2=p為資料元素的有限集,r為p上關係的有限集
a為父親,b為兒子,c為孫子
1、資料:是客觀事物的符號表示,在電腦科學中是指所有能輸入到計算機中並被電腦程式處理的符號的總稱
eg:影象,聲音,檔案等。
2、資料元素:是資料的基本單位 。
乙個資料元素可由若干個資料項組成,資料項是資料不可分割的最小單位。
eg:一本書的書目資訊是乙個資料元素,其中書名,作者名等為乙個資料項。
3、資料物件:是性質相同的資料元素的集合,是資料的乙個子集。
eg:包子資料物件是集合a=
4、資料結構:是相互之間存在一種或多種特定關係的資料元素的集合。
這種資料元素之間的關係稱為結構。
資料元素之間的關係多種多樣,通常有4類基本結構:
(1)集合,是資料元素之間關係及為鬆散的一種結構。
(2)線性結構: 結構中的資料元素之間存在乙個對乙個的關係。
(3)樹形結構:結構中的資料元素之間存在乙個對多個的關係。
(4)圖狀結構或網狀結構:結構中的資料元素之間存在多個對多個的關係。
5、邏輯結構:結構定義中的關係描述的是資料元素之間的邏輯關係。
為了在計算機中表示並實現所研究的邏輯結構,又有乙個概念:
6、儲存結構:資料結構在計算機中的表示(又稱映像)稱為資料的物理結構,又稱儲存結構。它包括資料元素的表示和關係的表示。
可以用由若干位組合形成的乙個位串表示乙個資料元素,通常稱這個位串為元素或結點。
當資料元素由若干資料項組成時,位串中對應於各個資料項的子位串稱為資料域。
資料元素之間的關係在計算機中有兩種不同的表示方法:順序映像和非順序映像,並由此得到兩種不同的儲存結構:順序儲存結構和鏈式儲存結構。
這裡講一下我理解的順序儲存結構和鏈式儲存結構:
eg:存入兩個位串:豆漿、油條。
順序儲存結構:借助元素在儲存器中的相對位置來表示元素之間的邏輯關係。
當想要取出 豆漿油條 時,豆漿油條就要按相鄰順序存入儲存器。如圖(a)
鏈式儲存結構:借助指標表示資料元素的儲存關係。
豆漿油條可以存在不相鄰的儲存位址,當想要取出 豆漿油條 時,就通過指示他們儲存位址的指標來取出元素。如圖(b)
eg:整形,其值集為一系列整數,可以進行加減乘除等運算。
按值的不同特性,高階程式語言中的資料型別可分為兩種:
一類是非結構的原子型別:原子型別的值是不可分解的。
eg:整形、字元型、列舉型別,位,位元組,字等。
另一類是結構型別:結構型別的值是由若干成分按某種結構組成的,是可以分解的,它的成分可以是非結構的,也可以是結構的。
eg:陣列
8、抽象資料型別(adt):抽象資料型別的定義僅取決於它的一組邏輯特性,與其在計算機內部如何表示和實現無關。
就是說,現在的高階語言,在1+2=3這樣的運算中,不需要管底層位的操作及資料表示,只需要管數學上求和的抽象邏輯。
抽象資料型別和資料型別實質上是同乙個概念,抽象的意義在於資料型別的數學抽象性。
抽象資料型別按其值的不同特性,分為一下3種型別:
原子型別:值是不可分解的。
eg:個位整數。
固定聚合型別:值由確定數目的成分按某種結構組成
eg:豆漿,可以由豆和漿按一定的次序組成。
可變聚合型別:值的數目不確定。
eg:值個數不確定、可變的陣列。
後兩種型別為結構型別。
抽象資料型別可表示為:
adt
基本操作
多型資料型別:是指其值的成分不確定的資料型別。但是不論其元素具有何種特性,元素之間的關係相同,基本操作也相同。
eg:int,float…等其他可以進行關係運算的資料型別,具有相同的數學抽象特性故稱為多型資料型別。
演算法:是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示乙個或多個操作。
有5個重要特性:有窮性,確定性,可行性,輸入,輸出。
演算法設計的要求:正確性,可讀性,健壯性,效率與低儲存量需求。
就是要寫個人能看得懂的,能應對非法輸入的,邏輯正確,還不佔空間,執行效率還高的完美程式。
1、事後統計的方法:缺點(1)必須先執行程式。(2)依賴計算機硬體、軟體等環境因素,容易掩蓋演算法本身的優劣。
2、事前分析估算的方法:
(1)依據的演算法採用何種策略。
(2)問題的規模。
(3)書寫程式的語言,語言越高階,執行效率就越低。
(4)編譯程式所產生的機器**的質量。
(5)機器執行指令的速度。
因為程式執行依賴於硬體和程式語言,所以使用絕對的時間單位衡量演算法的效率是不合適的,演算法執行工作量的大小依賴於問題的規模。
乙個演算法是由控制結構(順序,分支和迴圈3種)和原操作(指固有資料型別的操作)構成,演算法時間取決於兩者的綜合效果。
1、在同一問題的不同演算法裡,選取對於問題來說是基本操作的原操作,
多數情況下它是最深層迴圈語句中的原操作,以該操作重複執行的次數 n (頻度)作為演算法的時間量度。
隨著問題規模 n 的增大,演算法執行時間的增長率和 次數 n 的增長率相同,這就叫做演算法的漸進時間複雜度又叫時間複雜度。
這就是專案越大越複雜,用的時間就越多。
eg: ①
②for(i=1;i<=n;++i})
③for(i=1;i含基本操作 ++x 的頻度分別為:1,n,n2 ,那麼他們的時間複雜度為 o(1), o(n), o(n2 ),分別叫做 常量階,線性階,平方階。如果專案規模n特別大的時候,建議少用指數階o(2n)的演算法。
2、如果難以計算頻度,只需求出關於n的增長率或階即可。
eg: 輸入資料集的氣泡排序,隨著輸入的資料不同,基本資料的執行次數可能為0也可能特別多次。
那這種情況下,可以計算它的平均值,即考慮所有可能的輸入資料集的期望值,此時時間複雜度為平均時間複雜度。
也可以做最壞的打算,看演算法在最壞的情況下它的執行效率。
eg: 事後算出執行時間為12秒的10 * 10的演算法。時間複雜度為n3
那麼31*31 的時間複雜度可以為 (31/10)3 * 12=358 秒
31 * 31 中有3.13個12秒
空間複雜度: 演算法所需儲存空間的量度。
乙個程式除了需要儲存空間來寄存本身所用指令,常數,變數和輸入資料外,也需要一些對資料進行操作的工作單元和儲存一些為實現計算所需資訊的輔助空間。
若額外空間相對於輸入量來說是常數,則稱此演算法為原地工作。
第一章學習了一些籠統的概念,後期希望能在程式設計裡對應上這些概念,進一步學習。
2021-02-19
資料結構 基本概念和術語
第一章 緒論 1.1 什麼是資料結構 資料結構研究的主要內容 資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作等的學科。1.2 基本概念和術語 資料 data 所有能被輸入到計算機中,且被計算機處理的符號的集合是計算機操作對 象的總稱。資料元素 data elem...
資料結構 基本概念和術語
第一章 緒論 1.1 什麼是資料結構 資料結構研究的主要內容 資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作等的學科。1.2 基本概念和術語 資料 data 所有能被輸入到計算機中,且被計算機處理的符號的集合是計算機操作對 象的總稱。資料元素 data elem...
資料結構基本概念和術語
第一章 緒論 1.1 什麼是資料結構 資料結構研究的主要內容 資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作等的學科。1.2 基本概念和術語 資料 data 所有能被輸入到計算機中,且被計算機處理的符號的集合是計算機操作對 象的總稱。資料元素 data elem...