數據結構與算法(一)基礎概念篇

一、數據結構概述
  數據結構的主要任務是通過分析數據對象的結構特徵,包括邏輯結構及數據對象之間的關係,然後把邏輯結構表示成計算機課實現的物理結構,從而便於計算機處理。
  概念術語:
  1)數據(Data):是描述客觀事物的符號,是計算機中可以操作的對象,是能被計算機識別,並輸出給計算機處理的符號集合。數據不僅僅包括整型、實型等數值類型,還包括字符及聲音、圖像、視頻等非數值類型;
  2)數據元素(Data Element):是組成數據的、有一定意義的基本單位,在計算機中通常作爲整體處理,也被稱爲記錄;
  3)數據項(Data Item):一個數據元素可以由若干個數據項組成;數據項是數據不可分割的最小單位;
  4)數據對象(Data Object):是性質相同的數據元素的集合,是數據的子集;
  5)數據結構(Data Structure):是數據的組織形式,是數據元素相互之間存在的一種或多種特定的數據元素的集合;
  6)數據類型(Data Type):是指一組性質相同的值的集合及定義在此集合上的一些操作的總稱;

二、數據的邏輯結構與物理結構:
  邏輯結構(Logical Structure)是指在數據對象中數據元素之間的相互關係。數據元素之間存在不同的邏輯關係構成了以下四種結構類型:
  1)集合類型:集合結構中的數據元素除了同屬於一個集合外,它們之間沒有其他的關係。各個數據元素是“平等的”,它們的共同屬性是“同屬於一個集合”,數據結構中的集合就類似於數學中的集合;
  2)線性結構:線性結構中的數據元素之間是一對一的關係,並且是一種先後的次序;
  3)樹形結構:樹形結構中的數據元素之間存在一種一對多的層次關係;
  4)圖形結構:圖形結構的數據元素關係是多對多的關係;
 
  存儲結構(Storage Structure)也稱爲物理結構(Physical Structure),指的是數據的邏輯結構在計算機中的存儲形式,數據的存儲結構一般可以反映數據元素之間的邏輯關係,分爲順序存儲結構和鏈式存儲結構:
  1)順序存儲結構:是把數據元素存放在地址連續的存儲單元裏,其數據間的邏輯關係和物理關係是一致的;
  2)鏈式存儲結構:是把數據元素存放在任意的存儲單元裏,這組存儲單元可以是連續的,也可以是不連續的。數據元素的存儲關係並不能反映其邏輯關係,因此需要用一個指針存放數據元素的地址,這樣通過地址就可以找到相關聯數據元素的位置;

三、算法
  算法(Algorithm)是解決特定問題求解步驟的描述,在計算機中表現爲有限的操作序列,在數據類型建立起來之後,就要對這些數據類型進行操作,建立起運算的集合即爲程序。運算的建立、方法好壞直接決定了計算機程序原型效率的高低;
  1)數據結構與算法的關係:兩者既有聯繫又有區別,聯繫是:程序=算法+數據結構。數據結構是算法實現的基礎,算法總是要依賴某種數據結構來實現的,算法的操作對象時數據結構,區別是數據結構關注的是數據的邏輯結構、存儲結構的一些基本操作,而算法更多的是關注如何在數據結構的基本上解決實際問題,算法是編程思想,數據結構是這些思想的基礎;
  2)算法的特性:
    有窮性:指算法在執行有限的步驟之後,自動結束而不會出現無限循環,並且每一個步驟在
        可接受的時間內完成;
    確定性:算法的每一步驟都具有確定的含義,不會出現二義性;
    可行性:算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成;
    輸入:是指算法具有零個或多個輸入;
    輸出:是指算法至少有一個或多個輸出;

算法效率的度量方法:
  1)算法採用的策略、方案;
  2)編譯產生的代碼質量;
  3)問題的輸入規模;
  4)機器執行指令的速度;

四、時間複雜度
  在進行算法分析時,語句總的執行次數T(n)是關於問題規模n的函數,進而分析T(n)隨n的變化情況並確定T(n)的數量級;算法的時間複雜度,也就是算法的時間度量,記作:T(n)=O(f(n))。它表示隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸進時間複雜度,簡稱爲時間複雜度。其中f(n)是問題規模n的某個函數,這樣用大寫O來體現算法時間複雜度的記法,我們稱之爲大O記法。
在這裏插入圖片描述

非正式術語
O(1) 常數階
O(n) 線性階
O(n^2) 平方階
O(logn) 對數階
O(nlogn) nlogn階
O(n^3) 立方階
O(2^n) 指數階

常用的時間複雜度所耗費的時間從小到大依次是:
  O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
在這裏插入圖片描述
五、空間複雜度
  算法的空間複雜度通過計算算法所需的存儲空間實現,算法空間複雜度的計算公式記作:S(n)=O(f(n)),其中,n爲問題的規模,f(n)爲語句關於n所佔存儲空間的函數;
  一般情況下,一個程序在機器上執行時,除了需要存儲的程序本身指令、常數、變量和輸入數據外,還需要存儲對數據操作的存儲單元。若輸入數據所佔空間只取決於問題本身,和算法無關,這樣只需要分析該算法在實現時所需的輔助單元即可。若算法執行時所需的輔助空間相對於輸入數據量而言是個常數,則稱此算法爲原地工作,空間複雜度爲O(1)。

發佈了94 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章