小甲魚資料結構學習筆記 緒論

2021-10-02 04:15:10 字數 1665 閱讀 8592

程式設計=資料結構+演算法

資料結構就是資料元素相互間一種或多種關係的集合。

傳統上,我們把資料結構分為邏輯結構和物理結構,主要研究邏輯結構,而物理結構是次要的。

邏輯結構:指資料物件中資料元素之間的相互關係。

物理結構:指資料的邏輯結構在計算機中的儲存形式。

集合結構:集合結構中資料元素之間的相互關係。

線性結構:線性結構中的資料元素之間是一對一的關係,有點像人體蜈蚣。。

樹形結構:資料元素之間存在一種一對多的層次關係。

圖形結構:資料元素是多對多的關係。按小甲魚的說法就是雜交,emmmm(疑惑.jpg)

研究物理結構就是研究如何把資料元素儲存到計算機的儲存器中。儲存器主要針對記憶體而言,通常用檔案結構來描述。

兩種儲存形式:順序儲存和鏈式儲存

順序儲存結構:把資料元素存放在位址連續的儲存單元裡,其資料間的邏輯關係和物理關係是一致的。(不常用)例如陣列結構。

鏈式儲存結構:把資料元素存放在任意的儲存單元裡,這組儲存單元可以是連續的,也可以是不連續的。

顯然鏈式結構的資料元素儲存關係並不能反映其邏輯關係,因此需要用乙個指標存放資料元素的位址,這樣來通過位址找到相關聯資料元素的位置。

定義:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度。記作:t(n)=o(f(n))。它表示隨問題n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複雜度。其中,f(n)是問題規模n的某個函式。

這樣用大寫o()來體現演算法時間複雜度的記法,我們稱之為大0記法。

一般情況下,隨著輸入規模n的增大,t(n)增長最慢的演算法為最優演算法;

推導大o階的一般步驟

1.用常數1取代執行時間中的所有加法常數;

2.在修改後的執行次數中,只保留最高端項;

3.如果最高端項存在且不為1,則去除與這個項相乘的常數;

我個人的理解是對於一般演算法,隨著輸入規模的無限增大,常數項以及非最高端項都是可以忽略不計的,只需要研究最高端項的項數,甚至最高端項的係數都可以忽略。計算時間複雜度也就是計算迴圈**塊的迴圈次數

常見時間複雜度所消耗的時間從小到大:

o(1)2)3)n)n)

對於o(n3)之後的這些,由於n值的增大會使結果大到難以想象,因此沒必要去討論它們,也不會用這些複雜度的演算法,因為很蠢。

通常除非特定指定,我們提到的執行時間都是最壞情況的執行時間。

相比較於時間複雜度,演算法的空間複雜度顯得沒有那麼的重要

因為我們在寫**時,完全可以用空間去換時間

定義:空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s(n)=o(f(n))。比如直接插入排序的時間複雜度是o(n2),空間複雜度是o(1) 。而一般的遞迴演算法就要有o(n)的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法的執行時間和所需要占用的儲存空間兩個方面衡量。

通常用時間複雜度來指執行時間的需求,用空間複雜度指空間需求(廢話。。。)

當直接讓我們求複雜度時,通常指的是時間複雜度。

本部落格是用於自己學習小甲魚資料結構的學習總結

b站位址為小甲魚資料結構學習

資料結構學習筆記(緒論二)

計算任意n個整數之和。使用不同的演算法求和,比較優劣。典型演算法int sum array claassical int a,int n 該演算法複雜度 t n o n 線性遞迴 遞迴 減而治之,將大問題分解成乙個小的子問題和另乙個稍大的問題,一步一步自頂向下分解稍大問題,最終解決問題。int su...

資料結構學習筆記(1) 緒論

好了進入正題吧!資料結構是一門 研究非數值計算的程式設計問題中 的操作物件,以及它們之間的關係和操作等相關問題的學科。程式設計 資料結構 演算法 資料 是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。資料元素 是組成資料的 有一定意義的基本單位 不是最...

資料結構學習筆記 資料結構緒論

資料 是描述客觀事物的符號,是計算機中可以操作的物件,是能夠被計算機識別,並輸入給計算機處理的符號集合。資料元素 是組成資料的 具有一定意義的基本單位,在計算機中通常作為整體處理。也被稱為記錄。資料項 乙個資料元素可以由若干資料項組成。資料項是資料不可分割的最小單位。資料物件 是性質相同的資料元素的...