数据结构与算法绪论
一. 數據結構相關概念
- 1.數據:
用于描述客觀事物的數值、字符,以及一切可以輸入到計算機中的并由計算機程序加以處理的符號的集合。 - 2.數據元素:
數據的基本單位,通常作為一個整體進行考慮和處理 - 3.數據項:
是數據的不可分割的最小單位,一個數據元素可由若干個數據項組成 - 4.數據對象:
性質相同的元素的集合叫做數據對象
二.邏輯結構
- 1.概念:數據結構中描述的是數據元素之間的抽象關系(邏輯關系),稱為邏輯結構
- 2.線性結構:線性結構中數據元素之間是一對一的關系(線性表、數組、隊列、雙隊列、棧、串)
- 3.非線性結構:
樹:樹形結構中的數據元素之間存在一對多的層次關系
圖:數據元素是多對多的關系
多維數組: - 4.集合:集合結構中的數據元素除了同屬于一個集合外,它們之間沒有其它關系 集合:集合結構中的數據元素除了同屬于一個集合外,它們之間沒有其它關系
三.物理結構
數據結構在計算機中的表示(又稱映像,也稱物理結構),存儲結構主要分為順序存儲(線性表)、鏈式存儲(鏈式表)、索引存儲和散列(哈希)存儲。
- 1.順序存儲結構:借助數據元素之間的相對位置來表示元素之間的邏輯結構.(vector動態(tài)數組、 deque雙端隊列、stack棧容器、queue隊列容器)
- 2.鏈式存儲結構:借助數據元素之間的元素的指針表示數組元素的邏輯結構.
- 3.散列存儲結構:順序存儲+算列.(哈希表)
- 4.索引存儲結構:順序存儲+索引.
四.數據運算
- 1.插入
- 2.修改
- 3.刪除
- 4.查找
靜態(tài)查找:對查找表只作查找操作的查找表
動態(tài)查找:查找過程中同時插入表中不含的元素,或者 刪除查找表中已有的元素的操作的查找表
順序查找:順序查找又稱線性查找,是最基本的查找方法之一。順序查找既 適用于順序表,也適用于鏈表。
二分法(折半)查找:是一種效率較高的查找方法,但前提是表中元素必須 按關鍵字有序(按關鍵字遞增或遞減)排列。
分塊查找:塊內無序、塊間有序、如何分塊 效率最高
動態(tài)查找表:二叉排序樹查找。
哈希表:哈希函數構造:直接定址法、除留余數法、平方取中法,隨機數法,數字分析法。
五.排序
1.直接插入排序:
- 每次將一個待排序的數據元素,插入到前面已經排好序的數列中的適當位置,使數列依然有序;直到待排序數據元素全部插入完為止。
2.希爾排序:
- 基本思想:先將整個待排序記錄序列分成為若干個子序列分別進行直接插入排序,待整個序列中的記錄 基本有序 時在對全體序列進行一次直接插入排序,子序列的構成不是簡單的逐段分割,而是將像個某個增量的記錄組成一個子序列。
3.冒泡排序:
- 也稱冒泡法,每相鄰兩個記錄關鍵字比大小,大的記錄往下沉(也可以小的往上浮)。每一遍把最后一個下沉的位置記下,下一遍只需檢查比較到此為止;到所有記錄都不發(fā)生下沉時,整個過程結束(每交換一次,記錄減少一個反序數。
4.快速排序:
- 在當前無序區(qū)R【1…H】中任取一個數據元素作為比較的"基準"(不妨記為X),用此基準將當前無序區(qū)劃分為左右兩個較小的無序區(qū):R【1…I-1】和R【I+1…】,且左邊的無序子區(qū)中數據元素均小于等于基準元素,右邊的無序子區(qū)中數據元素均大于等于基準元素,而基準X則位于最終排序的位置上,即R【1…I-1】≤X.Key≤R【I+1…H】(1≤I≤H),當R【1…I-1】和R【I+1…H】均非空時,分別對它們進行上述的劃分過程,直至所有無序子區(qū)中的數據元素均已排序為止。
5.簡單選擇排序:
- 每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最后,直到全部待排序的數據元素排完。
6.堆排序:
- 堆排序是一樹形選擇排序,在排序過程中,將R[1…N]看成是一顆完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關系來選擇最小的元素。
7.二路歸并排序
8.基數排序
各排序算法比較:
六.算法
1.特性
- 有窮性:
算法的執(zhí)行步驟、時間、都是有限的。不會無休止的一直執(zhí)行下去。 - 確切性:
算法的每一步都必須有明確的定義和描述。 - 輸入:
一個算法應該有相應的輸入條件,就像我們小時候做的應用題,已知什么什么。來求某個結果,已知部分便是輸入條件。 - 輸出:
算法必須有明確的結果輸出。沒有結果,那這個算法是沒有任何意義的。 - 可行性:
算法的步驟必須是可行的,無法執(zhí)行的則沒有意義,也解決不了任何問題
2.算法的分類
-按照算法的應用來分:
算法可以分為基本算法、幾何算法、加密/解密算法、查找算法、圖標數據分析算法等。
- 按照算法的思路來分:
算法可以分為遞推算法、遞歸算法、窮舉算法、分治算法、概率算法等。
3.重點介紹算法基本思路
- 窮舉算法思想:
- 根據題目的部分條件確定范圍,并在次范圍內對所有情況逐一窮盡驗證,直到找到那個最符合的解。如循環(huán)遍歷找解。
- 遞推算法思想:
- 遞推算法是一種理性思維模式的代表,根據已有的數據和關系,逐步推導而得到結果,通常是根據前面的一些項得到后面的一些項。如斐波那契數列。
- 遞歸算法思想:
- 1.直接遞歸 ,在方法中調用自身。
- 2.間接遞歸,間接的調用一個方法。比如方法a調用方法b,方法b又調用方法a。
- 遞歸方法在編寫時,要注意使用if語句來在某些情況下強制退出遞歸返回結果。否則,會形成死循環(huán)。無法結束,當然也無法得到實際問題的解
使用遞歸,可以是代碼更簡潔清晰,可讀性更好。如八皇后問題、漢諾塔問題,階乘計算。 - 分治算法思想:
- 基本思想是將一個計算復雜的問題分為規(guī)模較小,計算簡單的小問題求解,然后綜合各個小問題,從而得到最終答案。例如我們常說的合并排序、二分法查找、堆排序、快速排序等。
- 概率算法思想:
- 概率算法依照概率統計的思路來求解問題,其往往不能得到問題的精確解,但是在數值計算領域得到了廣泛的應用。因為很多數學問題,往往需要通過數值計算來求解近似值。數值概率算法;
蒙特卡羅(Monte Carlo)算法;拉斯維加斯(Las Vegas)算法;舍伍德(Sherwood)算法;
總結
- 上一篇: 发个红包封面
- 下一篇: 互联网晚报 | 8月12日 星期四 |