嚴蔚敏老師版《資料結構》筆記之演算法
1. 什麼是演算法?
是對特定問題求解的步驟
2. 演算法的5個重要特性:
有窮性、確定性(讀者閱讀時不會產生二義性)、可行性、輸入(至少0個)、輸出(至少1個)
3. 演算法設計的要求:
正確性(程式碼無誤、幾組輸入能夠得到滿足要求的結果、對典型、苛刻而帶有刁難性的資料能夠得出滿足要求的結果、一切合法輸入都能得到滿足要求的結果)、可讀性、健壯性(輸入非法資料作出適當反應)、效率與低儲存量需求(通常效率指執行時間,可使用事後統計和事前估計來得到效率)
4. 演算法的時間複雜度:
時間複雜度常用大O符號
表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。(摘自百度百科《時間複雜度》)
O的形式定義為:若f(n)是正整數n的一個函式,則xn=O(f(n))表示存在一個正的常數M,使得當n大於等於nc時,都滿足|xn|<=M|f(n)。
5. 演算法的空間複雜度:
相關推薦
關於嚴蔚敏老師《資料結構(C語言版)》書中程式碼的誤解
清華大學嚴蔚敏老師的《資料結構(C語言版)》以其嚴謹被奉為經典,我是從其Pascal版一路追著買到C語言版,一直覺得這本書理論功力深厚,是不可多得的資料結構教材。但其編寫過程中為避免太過拘泥於具體語言細節,使用了ADT描述,具體演算法中使用了偽碼描述,對於新手直接把程式碼原樣照抄是沒法直接在電腦
嚴蔚敏老師版《資料結構》筆記之演算法
1. 什麼是演算法? 是對特定問題求解的步驟 2. 演算法的5個重要特性: 有窮性、確定性(讀者閱讀時不會產生二義性)、可行性、輸入(至少0個)、輸出(至少1個) 3. 演算法設計的要求: 正確性(程式碼無誤、幾組輸入能夠得到滿足要求的結果、對
嚴蔚敏老師版《資料結構》筆記之基本概念和術語
1. 什麼是資料結構 如果要寫好一個程式,必須分析待處理的物件的特性和物件之間的關係,這是“資料結構”形成和發展的背景。 “資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作等的學科”。 2. 基本概念和術語: (1) 資料(
大學經典教材《資料結構》(C語言版 嚴蔚敏 吳為民 編著) 中該演算法的實現
/* 測試資料 教科書 P189 G6 的鄰接矩陣 其中 數字 1000000 代表無窮大 6 1000000 1000000 10 100000 30 100 1000000 1000000 5 1000000 1000000 1000000 1000000 1000000
嚴蔚敏版資料結構課本程式碼——演算法2.2
/* algo2-2.c 實現演算法2.2的程式 */ //#include"c1.h" /* c1.h (程式名) */ #include<string.h> #include<ctype.h> #include<m
嚴蔚敏版資料結構課本程式碼——演算法2.1
/* main2-8.c 檢驗bo2-8.c的主程式 */ //#include"c1.h" /* c1.h (程式名) */ #include<string.h> #include<ctype.h> #include<
數據結構之線性表(嚴蔚敏《數據結構》要求)
刪除 fin 是我 sqlist 定義 code bug 分析 如果 1、每個代碼都是博主一個字一個敲出來的(有參考,但是我很認真的去分析了每個函數邏輯結構,並做了一定的修改)2、函數都已經通過測試,沒有bug,符合要求3、這裏只貼出代碼,代碼裏有些本人的理解和註釋,但是沒
資料結構 筆記:演算法效率的度量
演算法的空間複雜度(space Complexity) -定義:S(n) = S(f(n)) ·n為演算法的問題規模 ·f(n)為空間使用函式,與n相關 推導時間複雜度的方法同樣適用於空間複雜度 空間與時間的策略 -多數情況下,演算法的時間複雜度更令人關注 -如果有必要,
資料結構 筆記:演算法的事件複雜度
判斷一個演算法的效率時,運算元量中的常數項和其他次要項常常可以忽略,只需要關注最高階項就能得出結論 演算法的複雜度 -時間複雜度 ·演算法執行後對時間需求量的定性描述 -空間複雜度 ·演算法執行後對空間需求量的定性描述 大O表示法 -演算法效率嚴重依賴於操作(Operat
大話資料結構筆記之--緒論及演算法
一.資料結構緒論 資料結構含義:是相互之間存在一種或多種特定關係的資料元素的集合 1,資料結構起源 1)資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。 2)程式設計的實質是對確定的問題選擇一種好
資料結構筆記之用C++實現順序棧和鏈式棧
這裡介紹兩種實現棧的方式:“順序棧”和“鏈式棧”,各有各的優缺點。 不管是“順序棧”還是“鏈式棧”,我們可以先定義一個棧的ADT(抽象資料型別),如下面的“stack.h” #ifndef STACK_H #define STACK_H const int
回爐篇4—資料結構(3)之演算法的時間複雜度、空間複雜度
演算法的時間複雜度、空間複雜度 時間複雜度 定義:基本操作重複執行的次數是問題規模n的某個函式,用T(n)表示,有輔助函式f(n),使得當n趨於無窮大時,T(n)/t(n)的極限值為不等於零的常數。記作T(n)=O(f(n)),稱O(f(n))為演算法的漸進時間複雜度,簡稱時間複雜度
嚴蔚敏版資料結構學習筆記(4):佇列
和上次的棧相反,佇列是一種先進獻出的線性表(FIFO);它只允許在它的一端進行刪除操作,而在另一邊進行插入操作。在佇列裡面,允許插入的一端我們稱之為隊尾,允許刪除的一端稱為隊頭; 佇列和棧的基本操作差不多,也有八個,不同的一點是刪除操作是在表的頭部進行而不
嚴蔚敏版資料結構學習筆記(3):棧
棧是隻能在表尾進行插入和刪除的一種簡單一點的線性表。表尾端是棧頂(top),表頭端是棧底(bottom),不含元素的稱為空棧。因為我們只能對棧頂的元素進行插入和刪除操作,所以棧這個資料結構就是一個很有”原則”的結構,棧的修改是按照後進先出的原則進行的,也就是LI
嚴蔚敏版資料結構學習筆記(5):串
串(string),由字面意思理解就知道是和字串有關的一種資料結構,它是由零個或者多個字元組成的有限序列,一般記為 s = ‘a1a2a3……an’(n>=0); 其中s為串名,用單引號括起來的字元序列是串的值,ai可以是字母,數字,或者是其他字元;
資料結構c語言版 嚴蔚敏 順序線性表12個基本操作及演算法的實現
標頭檔案: c1.h (相關標頭檔案及函式結果狀態程式碼集合) /* c1.h (程式名) */ #include<string.h> #include<ctype.h> #include<malloc.h> /
資料結構c語言版 嚴蔚敏(演算法2.1 將所有在Lb中但不在La中的元素插入到La中)
標頭檔案: c1.h (相關標頭檔案及函式結果狀態程式碼集合) /* c1.h (程式名) */ #include<string.h> #include<ctype.h> #include<malloc.h> /
嚴蔚敏版資料結構——佇列(連結串列實現)
佇列有兩種表示方式,我們再看連結串列實現: 個人感覺佇列也就是連結串列的一種特殊表,如果前面的連結串列知識通關了這裡隨便看看記住佇列的遊戲規則就行了。還是和前面一樣,先要有頭結點,總體來說就是單鏈表的插刪。 這裡與順序佇列不同的是不需要判斷佇列是不是滿了,連結串列最大的特點是動態分配節點空間
嚴蔚敏版資料結構——鏈隊(佇列的鏈式實現)
其實這節的內容也是單鏈表的特殊操作,這裡要記住的是 頭指標 被front 指但是它不是隊頭,front->next(首元結點)才是隊頭。咱們看程式碼吧! #include<stdio.h> #include<malloc.h> #def
嚴蔚敏版資料結構——佇列(順序表表示)
佇列有兩種表示方式,我們先看順序表示: 程式碼中的rear(尾指標)與front(頭指標)都是int 型的,它的作用就是做陣列下標,我們習慣稱它為指標,這裡應該注意它不是指標型別。頭指標始終指向佇列頭元素,尾指標始終指向隊尾元素的下一個位置。 由於增加元素rear加一,刪除元素fr