上資料結構這門課前,總以為這門課是和上學期學c++一樣的——那還不簡單,一樣都是程式設計麼,直到真正開始學才知道根本不是那麼回事,遠遠沒有學c++那樣的輕鬆。
仇老師讓我們寫筆記,我覺得這是很有必要的,因為很多東西不是說你理解了就會用,況且有一部分還不能理解,好記性不如爛筆頭吧。至於整理到部落格上也算是再複習一遍了。
廢話不多說了,進入正題:
1.程式設計的實質是什麼?
資料表示:將資料儲存在計算機(記憶體)中
資料處理:處理資料,設計方案(演算法)。
資料結構問題起源於程式設計。
2. 計算機求解問題:
問題→抽象出問題的模型→求模型的解
問題——數值問題、非數值問題
數 值 問 題→數學方程
非數值問題→資料結構。
3.圍棋19*19=361所以就有2^361種下法,所以人機對弈問題的實質就是人與對弈規則作鬥爭。
4.非數值問題的資料組織和處理主要內容有:
邏輯結構,儲存結構,演算法,資料處理技術。
5.資料:所有能輸入到計算機中並能被電腦程式識別和處理的符號集合。
數值資料:整數、實數等
非數值資料:圖形、圖象、聲音、文字等
資料元素:資料的基本單位,在電腦程式中通常作為乙個整體進行考慮和處理。
資料項:構成資料元素的不可分割的最小單位。
1.3 資料結構的基本概念
1.資料、資料元素、資料項之間的關係:
包含關係:資料由資料元素組成,資料元素由資料項組成。
資料元素是討論資料結構時涉及的最小資料單位,其中的資料項一般不予考慮。
2.資料結構:相互之間存在一定關係的資料元素的集合。按照視點的不同,資料結構分為邏輯結構和儲存結構。
邏輯結構:指資料元素之間邏輯關係的整體。
資料結構從邏輯上分為四類:
⑴ 集合:資料元素之間就是
「屬於同乙個集合」 ;
⑵ 線性結構:資料元素之間
存在著一對一的線性關係;
⑶ 樹結構:資料元素之間存在
著一對多的層次關係;
⑷ 圖結構:資料元素之間存在
著多對多的任意關係。
通常有兩種儲存結構:
1. 順序儲存結構:用一組連續的儲存單元依次儲存資料元素,資料元素之間的邏輯關係由元素的儲存位置來表示。(佔據儲存空間少)
2. 鏈結儲存結構:用一組任意的儲存單元儲存資料元素,資料元素之間的邏輯關係用指標來表示 。(佔據儲存空間多,但是很靈活)
1.3.2抽象資料型別
1. 資料型別(data type):一組值的集合以及定義於這個值集上的一組操作的總稱。
例如:c++中的整型變數
2. 抽象(abstract):抽出問題本質的特徵而忽略非本質的細節。
例如: 地圖、駕駛汽車
3. 抽象資料型別(abstract data type,adt):乙個資料結構以及定義在該結構上的一組操作的總稱。
資料的操作:插入,刪除,修改,檢索,排序。
1.4 演算法及演算法分析
演算法的相關概念
1.演算法(algorithm):是對特定問題求解步驟的一種描述,是指令的有限序列。
2. 演算法的五大特性:
⑴ 輸入:乙個演算法有零個或多個輸入。
⑵ 輸出:乙個演算法有乙個或多個輸出。
⑶ 有窮性:乙個演算法必須總是在執行有窮步之後結束,且每一步都在有窮時間內完成。
⑷ 確定性:演算法中的每一條指令必須有確切的含義,對於相同的輸入只能得到相同的輸出。
⑸ 可行性:演算法描述的操作可以通過已經實現的基本操作執行有限次來實現。
演算法的描述方法——自然語言
優點:容易理解
缺點:冗長、二義性
使用方法:粗線條描述演算法思想
注意事項:避免寫成自然段
使用方法:粗線條描述演算法思想。
演算法的描述方法——流程圖
優點:流程直觀
缺點:缺少嚴密性、靈活性
使用方法:描述簡單演算法
注意事項:注意抽象層次
演算法的描述方法——程式語言
優點:能由計算機執行
缺點:抽象性差,對語言要求高
使用方法:演算法需要驗證
注意事項:將演算法寫成子函式
偽**(pseudocode):介於自然語言和程式語言之間的方法,它採用某一程式語言的基本語法,操作指令可以結合自然語言來設計。
優點:表達能力強,抽象性強,容易理解
使用方法:7 ± 2
1.4 演算法及演算法分析
度量演算法效率的方法:
事後統計:將演算法實現,測算其時間和空間開銷。
缺點:⑴ 編寫程式實現演算法將花費較多的時間和精力;
⑵ 所得實驗結果依賴於計算機的軟硬體等環境因素。
事前分析:對演算法所消耗資源的一種估算方法
演算法分析(algorithm analysis):對演算法所需要的計算機資源——時間和空間進行估算。
時間複雜性(time complexity)
空間複雜性(space complexity)
問題規模:輸入量的多少。
基本語句:是執行次數與整個演算法的執行次數成正比的操作指令
演算法分析——大o符號
定義 若存在兩個正的常數c和n0,對於任意n≥n0,都有t(n)≤c×f(n),則稱t(n)=o(f(n))
定理:若a(n)=amnm+am-1nm-1++a1n+a0是乙個m次多項式,則a(n)=o(nm)。
第一章 緒論(筆記)
程式設計的實質是資料表示和資料處理。計算甲能夠求解的問題一般可以分為數值問題和非數值問題。1.3 1 資料是資訊的載體。2 資料可分為兩類 一類是整數 實數等數值資料 另一類是文字 聲音 圖形和影象等非數值資料。3 資料元素是資料的基本大小。構成資料元素大小的不可分割的最小單位是資料項。4 資料結構...
第一章緒論筆記
資料的邏輯結構 線性表 樹 圖等資料結構,其核心是如何組織待處理的資料以及資料之間的關係 資料的儲存結構 如何將線性表,樹,圖等資料結構儲存到計算機的儲存器中,其核心是如何有效地儲存資料以及資料之間的邏輯關係。演算法 如何基於資料結構的某種儲存結構實現插入,刪除,查詢等基本操作,其核心是如何有效地處...
《機器學習》筆記 第一章緒論
p9 學習演算法自身的 歸納偏好 與問題是否相配,往往會起到決定性作用。1.5發展歷程 人工智慧的研究程序 推理期 知識期 學習期 從樣例中學習 也即是廣義的歸納學習 它涵蓋了監督學習 無監督學習等,本書大部分內容均屬於此範疇。從樣例中學習,從基於邏輯的符號學習 基於神經網路的連線主義學習 統計學習...