王道數據結構 第一章 緒論

今天開始寒假的寫寫寫(記筆記)生活。
本弱渣在經歷了期末的洗禮之后開始繼續計算機專業課的學習,由于即將參加春招,所以先從最基礎最重要的數據結構開始復習。之前刷筆試算法題的時候覺得還算順手,但是總是覺得有些地方基礎不夠牢固,所以選擇使用王道考研的數據機構來夯實基礎,希望能夠在面試中能夠有更好的表現吧,之后可能還會再把《劍指offer》中的一些不太熟練的題目寫到簡書上面來。

廢話不多說,先是第一章的基本概念1

數據結構的基本概念

基本概念和術語

  1. 數據
    數據是信息的載體,是描述客觀事物屬性的數,字符以及所有能輸入到計算機中并被計算機程序識別和處理的符號的集合。
  2. 數據元素
    數據元素是數據的基本單位,通常作為一個整體進行考慮和處理。一個數據元素可由若干個數據項組成。數據項是構成數據元素的不可分割的最小單元。例如,學生記錄就是一個數據元素,它由學號,姓名,性別等數據項組成。
  3. 數據對象
    數據對象是具有相同性質的數據元素的集合,是數據的一個子集。例如整數數據對象是集合 {0,+-1,+-2...}
  4. 數據類型
    數據類型是一個值的集合和定義在此集合上一組操作的總稱
  • 原子類型: 其值不可再分
  • 結構類型: 其值可以再分成若干成分
  • 抽象數據類型: 抽象數據組織和與之相關的操作
  1. 抽象數據類型(ADT)
    ADT是指一個數學模型以及定義在該模型上的一組操作。抽象數據類型的定義僅取決于它的一組邏輯特性,而與其在計算機內部如何實現和表示無關,不論其內部結構如何變化,只要它的數學特性不變,都不影響其外部的使用。通常用(數據對象,數據關系,基本 操作集)這樣的三元組來表示抽象數據類型

  2. 數據結構
    在任何問題中,數據元素都不是獨立存在的,它們之間存在著某種關系,這種數據元素之間的關系成為結構數據結構是相互之間存在一種或多種特定關系的數據元素的集合。
    數據結構包括三方面的內容,邏輯結構,存儲結構,數據的運算。數據邏輯結構和存儲結構是密不可分的兩個方面。算法的設計取決于選定的邏輯結構,算法的實現依賴于所采用的存儲結構。


數據結構的三要素

數據的邏輯結構

邏輯結構是元素之間的邏輯關系,即從邏輯關系上描述數據。它與數據的存儲無關,是獨立于計算機的。數據的邏輯結構分為線性結構和非線性結構,線性表是典型的線性結構。集合,樹,圖是典型的非線性結構。

集合:結構中的元素除了同屬于一個集合的關系外,沒有其他關系
線性結構:結構中的數據之間僅存在一對一的關系
非線性結構:結構中的數據之間存在一對多的關系
圖狀結構&&網狀結構:結構中的元素之間存在多對多的關系

數據的存儲結構

存儲結構是指數據結構在計算機中的表示,也稱物理結構。它包括數據元素的表示和關系的表示。數據的存儲結構是邏輯結構用計算機語言的實現,它依賴于計算機語言。數據的存儲結構主要有:順序存儲,鏈式存儲,索引存儲和散列存儲。

  1. 順序存儲:把邏輯上相鄰的元素存儲在物理位置上也相鄰的存儲單元里,元素之間的關系由存儲單元的鄰接關系來體現。優點:可以隨機存取,每個元素占用最少的存儲空間。缺點:只是使用相鄰的一整塊存儲單元,可能產生較多的外部碎片。

  2. 鏈接存儲:不要求邏輯上相鄰的單元在物理上也相鄰。借助指示元素存儲地址的指針表示元素之間的邏輯關系。優點:不會出現碎片現象,充分利用所有存儲單元。缺點:每個元素因存儲指針而占用額外的存儲空間,并且只能實現順序存取。

  3. 索引存儲:在存儲信息的同時,還建立其附加的索引表。索引表的每一項成為索引項,索引項的一般形式是:(關鍵詞,地址)。其優點是檢索速度快,缺點是增加了附加的索引表,占用較多的存儲空間。在刪除和增加數據時要修改索引表,會花費較多的時間。

  4. 散列存儲:根據元素的關鍵字直接計算出該元素的存儲地址,也稱HASH。優點是檢索,增加,刪除節點的速度都很快。缺點:如果散列函數不好可能會出現元素存儲單元的沖突,解決沖突需要增加時間和空間開銷。

數據的運算

施加在數據上的運算包括運算的定義和實現。定義針對邏輯結構:指出具體的功能,實現針對存儲結構:指出運算的具體步驟。

基本概念1 完!!!
(之前沒有系統的復習過這些東西,在有了一定代碼量之后看這些概念真有醍醐灌頂之感)


接下來是第一部分的習題的一些知識點提煉

  1. 在存儲數據時,不僅要存儲各個數據元素的值,還要存儲數據元素之間的關系。
  2. 鏈式存儲設計時,接點內的存儲單元地址一定連續。
  3. 可以用抽象數據類型去定義一個完整的數據結構。

問答題:

  1. 對于兩種不同的數據結構,邏輯結構和物理結構一定不相同嗎?
    A:數據的運算也是數據結構的重要方面。比如二叉排序樹和二叉樹它們的邏輯和物理結構完全相同。兩者的運算定義不同。二叉樹一般表示層次關系,二叉排序樹通常用于排序和查找。
  2. 試舉一例,說明對相同的邏輯結構,同一種運算在不同的存儲方式下實現,運算效率不同。
    A:線性表可用順序存儲,也可用鏈式存儲。就插入刪除而言,順序存儲O(n),鏈式存儲O(1),存取反之。

接下來總結基礎知識第二部分

算法和算法評價

算法的基本概念

算法是對特定問題求解步驟的一種描述。它是指令的優先序列,其中每一條指令表示一個或多個操作。
算法具有以下五個特性

  1. 有窮性:一個算法必須總是(對任何合法的輸入值) 在執行有窮步之后結束,且每一步都在有窮的時間內完成。
  2. 確定性:算法中每一條指令必須有確切的含義,讀者理解時不會產生二義性。對于相同的輸入只能產生相同的輸出。
  3. 可行性:一個算法是可行的。算法中描述的操作都是可以通過已經實現的基本運算執行有限次實現。
  4. 輸入: 一個算法有零個或多個輸入。輸入取自于某個特定的對象的集合。
  5. 輸出: 一個算法有多個或一個輸出。輸出是同輸入有著某種特定關系的量。

好的算法應該考慮如下目標

  1. 正確性
  2. 可讀性
  3. 健壯性:對輸入非法數據,也要能做出適當反應或進行處理。
  4. 效率于低存儲量需求

算法效率的度量

算法效率的度量是通過時間復雜度和空間復雜度來描述的。

時間復雜度

最壞時間復雜度:在最壞情況下的時間復雜度
平均時間復雜度:所有輸入實例在等概率出現的情況下,算法的期望運行時間
最好時間復雜度
分析時間復雜度的兩條guize

  1. 加法規則:T(n) = T1(n)+T2(n) = O(f(n)) + O(g(n)) = O(max(f(n), g(n)))
  2. 乘法規則:T() = T1(n) * T2(n) = O(f(n)) * O(g(n))= O(f(n) * g(n))
    常見的漸進時間復雜度有
    O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
空間復雜度

定義為該算法所耗費的存儲空間,他是問題規模n的函數。漸進空間復雜度也常簡稱為空間復雜度。
S(n) = O(g(n))
程序中需要一些對數據進行操作的工作單元和存儲一些為實現計算所需信息的輔助空間。若輸入數據所占空間只取決于問題本身,于算法無關,則只需分析除輸入和程序之外的額外空間。
算法原地工作是指算法所需輔助空間是常量,即O(1)


第二部分的知識點羅列完畢,下面是習題中提取的盲點
分析如下代碼的執行次數

int m = 0;
for(int i = 1; i <= n; i++) {
    for(int j = 1; j <= 2 * i; j++) m++;
}

執行次數為n(n+1)

斐波那契數列:遞歸算法時間復雜度O(2^n)(具體計算略復雜),非遞歸時間復雜度O(n)


嘛,這就是寒假第一次的筆記了,希望不要爛尾,不要爛尾!!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容

  • 公司的經理大哥建議過我,說趁年輕要深入學習算法與數據結構,設計模式, APP 架構,當然也包括 iOS 底層的一些...
    Q以夢為馬閱讀 6,713評論 7 111
  • 1、算法的概念 (1)概念:是指解題方案的準確而完整的描述。 【考題1】在計算機中,算法是指() A查詢方法B加工...
    成都小菜閱讀 1,634評論 0 15
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執行單位為行(line),也就是一...
    悟名先生閱讀 4,185評論 0 13
  • 下班回家在休息之余拿出我的“雜貨本”,翻看以前的隨意記載,小小的本子里,有詩,有美文摘抄,有日記,還有一些感想和感...
    春夏AI閱讀 178評論 0 1
  • 512說起來是那么的順暢,算一算,六年過去了。 六年前的今天,我還在一中的操場等著上體育課,突然覺得一陣惡心,然后...
    仂七閱讀 152評論 0 0