1. 程式人生 > >資料結構與演算法 基礎概述 入門必備!

資料結構與演算法 基礎概述 入門必備!

一、資料的邏輯結構
(1)集合結構
結構中的資料元素之間除了同屬於一個集合的關係外,再無任何其它關係。

(2)線性結構
結構中的資料元素之間存在著一對一的線性關係。

(3)樹形結構
結構中的資料元素之間存在著一對多的層次關係。

(4)圖狀結構
結構中的資料元素之間存在著多對多的任意關係。

二、資料的儲存結構
(1)順序映像—>順序儲存
藉助儲存其中相對位置來表示資料元素之間的邏輯關係(與陣列相似)

(2)非順序映像—>鏈式儲存
藉助指標表示資料元素之間的邏輯關係(與連結串列相似)

邏輯結構與儲存結構的關係為:儲存結構是邏輯關係的映像與元素本身的映像,是資料結構的實現,邏輯結構是資料結構的抽象。

三、演算法的概念

 資料結構+演算法=程式

1.有窮性
對於任意一組合法的輸入值,在執行有窮步驟之後一定能結束,即演算法中的每一個步驟都能在有限的時間內完成。

2.確定性
演算法的每一步必須是確切定義的,使演算法的執行者或閱讀者都能夠明確其含義及如何執行,並且在任何條件下,演算法都只有一條執行路徑。

3.可行性
演算法應該是可行的,演算法中的所有操作都必須足夠基本,都可以通過已經實現的基本操作運算有限次實現。

4.有輸入
一個演算法應該有零個或者多個輸入,他們是演算法所需的除溼量或被加工的物件的表示。有些輸入量需要在演算法執行過程中輸入,而有的演算法表面上可以沒有輸入,實際上已被嵌入演算法之中。

5.有輸出
一個演算法應該有一個或者多個輸出,它是一組與輸入有確定關係的量值,是演算法進行資訊加工後的結果,這種確定關係即為演算法的功能。

四、演算法的評價標準
1.正確性
正確性指演算法能滿足具體問題的要求,即對任何合法的輸入,演算法都會得出正確的結果。

2.可讀性
可讀性指演算法被理解的難易程度。演算法主要是為了人閱讀與交流,其次才是為了計算機執行,因此演算法應該更易於人的理解。另一方面,晦澀難讀的程式易於隱藏較多錯誤而難以除錯。

3.健壯性
健壯性又稱魯棒性,即對非法輸入的抵抗能力。當輸入資料非法時,演算法應當恰當地做出反應或者進行相應處理,而不是產生奇怪的輸出結果。並且,處理出錯的方法不應是中斷程式的執行,而應是返回一個表示錯誤或者錯誤性質的值,以便在更高抽象層次上進行處理。

4.高效率與低儲存量需求
效率通常指的是演算法的執行時間;儲存量指的是演算法在執行過程中所需的最大儲存空間,兩者都與問題的規模有關。儘管計算機的執行速度提高很快,但是這種提高無法滿足問題規模加大帶來的速度要求。所以追求高速演算法仍然是必要的。相比起來,人們會更多滴關注演算法的效率,但這並不因為計算機的儲存空間是海量的,而是由人們面臨的問題的本質決定的。二者往往是一對矛盾,常常可以用空間換時間,時間換空間。

五、演算法效能分析
演算法效率的度量,是評價演算法優劣的重要依據。一個演算法的複雜性高低體現在執行該演算法所需要的計算機資源的多少上面,所需的資源越多,我們就說這個演算法的複雜性更高;反之,所需的資源越低,則該演算法的複雜性越低。最重要的計算機資源是時間和空間資源。因此,演算法的複雜性有時間複雜性和空間複雜性之分。

(1)時間複雜度
一般情況下,演算法中基本操作重複執行的次數是問題規模n某個函式f(n),演算法的時間度量記作T(n) = O(f(n)),它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的時間複雜度。

語句頻度:
語句頻度是指該語句在一個演算法中重複執行的次數。

eg:
(1)x =x+1//時間複雜度為O(1),稱為常量階。
(2)for(i =1;i<=n;i++) x=x+1//時間複雜度為O(n),稱為線性階。
(3)

for(i =1;i<=n;i++) 
         for(j =1;j<=n;j++)
             x=x+1//時間複雜度為O(n方),稱為平方階。

隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率不斷下降。

(2)空間複雜度
與時間複雜度相似,空間複雜度是指演算法在計算機內執行時所需儲存空間的度量。記作:

S(n)=O(f(n))

演算法在執行期間所需要的儲存空間包括三個部分:
(1)演算法程式所佔的空間

(2)輸入的初始資料所佔的儲存空間

(3)演算法執行過程中所需要的額外空間

若輸入資料所佔空間之取決於問題本身,和演算法無關,則只需要分析除輸入和程式之外的輔助變數所佔的額外空間

若所需額外空間相對於輸入資料量來說是常數,則稱此演算法為原地工作。

若所需儲存量依賴於特定的輸入,則通常按最壞的情況考慮。

相關推薦

資料結構演算法 基礎概述 入門必備

一、資料的邏輯結構 (1)集合結構 結構中的資料元素之間除了同屬於一個集合的關係外,再無任何其它關係。 (2)線性結構 結構中的資料元素之間存在著一對一的線性關係。 (3)樹形結構 結構中的資料元素之間存在著一對多的層次關

資料結構演算法--基礎入門概念

資料結構與演算法--基礎入門概念 一: 資料結構 1:資料的層次劃分 1:資料型別 2:資料元素 3:資料物件 4:資料項 5:借圖輔助理解 2:基於資料的資料結構

資料結構演算法基礎-01-二分查詢

二分查詢 注:本題目源自《浙江大學-資料結構》課程,題目要求實現二分查詢演算法。 函式介面定義 Position BinarySearch( List L, ElementType X ); 其中List結構定義如下: typedef int Position; typ

資料結構演算法基礎-02-二分查詢-實踐

演算法中查詢演算法和排序演算法可謂是最重要的兩種演算法,是其他高階演算法的基礎。在此係列文章中,將逐一學習和總結這兩種基礎演算法中常見的演算法實現。首先,第一種演算法——二分(折半)查詢的學習和練習。 1、概念 二分查詢,是逐次將查詢範圍折半,縮小搜尋的範圍,直到找到那個需要的結果。

[資料結構演算法]通俗易懂入門並查集

並查集,顧名思義,具有將兩個或以上的集合合併和查詢的作用。所以討論這個資料結構即討論兩個函式,一個是查詢函式find(),另一個是合併函式join()。 為了便於理解,我們從題目入手:  hdoj暢通工程 用leetcode的題目做例子,簡單的說就是,假設1和2是朋友,

資料結構演算法基礎

1 資料 1.1 資料項(data item) 是不可分割的最小資料單位,具有原子性,比如一張表的某個資料項 1.2 資料元素(data element) 是資料的基本單位,是資料集合的個體,通常由若

資料結構演算法基礎(二)之單鏈表的插入刪除操作

今天主要來講一講單鏈表的插入與刪除操作的步驟和演算法解釋。這是單鏈表最基本的操作但是也是最重要的基礎之一,有些地方還比較容易出錯。下面我就結合原始碼在上面加上註釋來解釋每一步的作用。 **一、單鏈表的插入操作** 1、圖示(截圖來自網易雲課

資料結構演算法基礎(基於python)

用大O法表示執行時間,log都表示log2(以2為底的對數) 所有的演算法都是基於python寫的 一、二分查詢法: 1、輸入:一個有序的元素列表 2、輸出:如果要查詢的元素包含在列表中,二分查詢返回其位置,否則返回NULL. 3、使用

資料結構演算法基礎知識(1)

文章概述 資料結構的定義與分類 邏輯結構 物理結構 資料結構的定義 資料結構就是關係,是資料元素之間存在的一種或者多種特定關係的集合。 資料結構分為兩類: a. 邏輯結構 b. 物理結構 邏輯結構: 資料物件中資料元素之間的相互關係。

[備戰軟考]資料結構演算法基礎

: 資料結構與演算法基礎 線性表 1.順序表 順序的儲存結構,元素在記憶體中以順序儲存。記憶體中佔用連續的一個區域。 順序表的刪除 把要刪除的元素後面每個元素向前移動一位 順序表的插入 把要插入的位置後面的(包括自己)所有元素向後移動

資料結構演算法基礎之指標和陣列

指標和陣列:   指標和一維陣列:      陣列名:        一維陣列名是個指標常量 它的值不能被改變 它存放的是一維數組裡第一個元素的地址 一維陣列名指向的是陣列的下標為0的第一個元素。   下標和指標的關係: 1 a[i]<<==>>*(a+i)&

資料結構演算法基礎總覽

前言        對於絕大多少程式設計師來說,資料結構與演算法絕對是一門非常重要但又非常難以掌握的學科。最近自己系統學習了一套資料結構與演算法的課程,也開始到Leetcode上刷題了。這裡對課程中講到的一些資料結構與演算法基礎做了一些回顧和總結,從巨集觀上先來了解整個

演算法資料結構演算法基礎總覽(中)——刷Leetcode等演算法題時一些很實用的jdk輔助方法錦集

        最近重新學習資料結構與演算法以及刷leetcode演算法題時,發現不少jdk自帶的方法可以提升刷題的效率。這些小技巧不僅僅對刷演算法題帶來便利,對我們平時開發也是很有幫助的。本文以java語言為基礎,記錄了目前已經使用或看到過的一些小技巧,後續在刷題過程

資料結構演算法入門(1)

一、資料結構 資料之間相互存在的一種或多種特定的關係的元素的集合。 邏輯結構 資料物件中資料元素之間的相互關係 1.集合結構 在資料結構中,如果不考慮資料元素之間的關係,這種結構稱為集合結構。 各個元素是平等的,共同屬性是屬於同一個集合 2.線性結構 線性結構中的資料元素之間

資料結構演算法之美專欄學習筆記-二叉樹基礎(上)

樹 節點的定義 樹中的元素稱之為節點 高度的定義 節點的高度:節點到葉子節點的最長路徑 樹的高度:跟節點的高度 深度的定義 根節點到這個節點所經歷的邊的個數 層的定義 節點的深度+1   二叉樹 滿二叉樹 除了葉子結點外每個節點都有左右兩個子節點 完全二叉樹 葉子結

資料結構演算法之美專欄學習筆記-二叉樹基礎(下)

二叉查詢樹 Binary Search Tree  二叉查詢樹的定義 二叉查詢樹又稱二叉搜尋樹。其要求在二叉樹中的任意一個節點,其左子樹中的每個節點的值,都要小於這個節點的值,而右子樹的節點的值都大於這個節點的值。 二叉查詢樹的查詢操作 二叉樹類、節點類以及查詢方法的程式碼實現

資料結構演算法入門

前言 資料結構是計算機軟體專業的基礎課程,幾乎可以說,要想從事程式設計工作,無論你是否是科班出身,都不可以繞過這部分知識。作為一個非科班出生的我,自然要學這門課程。下面是我學習的總結,希望與大家一起進步。   首先讓我們明確一下,什麼是資料結構?什麼是演算法? &nbs

noip資料結構演算法基礎演算法 4 二維差值維護

noip資料結構與演算法 之 基礎小演算法 4 二維差值維護 二維差值維護問題實際上是對一維差值維護問題的擴充套件,相信來看二維差值維護的各位都已經對一維差值維護問題有足夠的認識了。下面先看一下二維差值維護的問題。  問題描述: 已知一個n*n的矩陣a,有m次操作,每次

【3】資料結構演算法---快速入門

第 2 章 快速入門 2.1 入門案例 案例:如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 為自然數),求出所有a、b、c可能的組合? 解決方案: 1.猜三個,條件匹配 2.猜兩個,另一個計算 演算法五特性: 輸入、輸出、有窮性、

資料結構演算法學習背景概述

為什麼要學習資料結構與演算法? 1. 面試必備 站在一個比較現實且功利的角度來看,做計算機技術的大公司,如BAT、Google、Facebook,它們在招聘技術人員時,資料結構與演算法是必考查的知識點。如果想要進入這樣的大公司,那麼掌握資料結構與演算法就是必不可