講師:郭育倫 d95037@csie.ntu.edu.tw 第3章 基本資料結構 講師:郭育倫 d95037@csie.ntu.edu.tw.

Slides:



Advertisements
Similar presentations
如何科学认识风水 主讲嘉宾孙百川 揭开神秘的面纱 揭开神秘的面纱 破除迷信的枷锁 破除迷信的枷锁 还易经本来面目 还易经本来面目 学易用易不迷易 学易用易不迷易.
Advertisements

魏晉南北朝的胡漢融和概況. 北朝的漢胡融和 1) 北朝漢胡 融和的概 況 2) 北魏孝文 帝推行的 漢化措施 及影響 北邊民族徙居中原,由 來已久。自曹魏招用胡 兵始,沿邊胡族內徙日 繁。不少胡族君主更傾 心嚮慕漢族文化,大力 促成胡漢的融和。北魏 推行的漢化措施,影響 尤為深遠。
IT 服务与业务发展融合 王维航 北京华胜天成科技股份有限公司 十分钟的悲剧.
蕭文生 中正大學法律系教授兼法學院院長.  壹、前言  貳、司法院釋字第六八四號解釋  參、大學生之受教權  肆、大學自治之範疇  伍、大學生之其他基本權利  陸、救濟管道之改善  柒、結語.
提昇餐廳供餐品質 及服務滿意度 標竿學習主題 標竿學習計劃排定進度 分析客戶對餐廳供餐滿意度偏低原因:
第八課 謝 天. 第八課 謝 天 作者主旨文章作法 民國 陳之藩 謙卑感 恩,功 成不居 以「謝天」的傳統觀念 為中心,經由疑惑、思 索、領悟三個層次的敘 述,賦予新的意義 ★題目含義:表示對很多「人」的感謝。
蔬菜大觀園 V.S 大家來種菜 蔬菜的外觀及分類  蔬菜是我們常吃的食物,蔬菜的外觀形狀不 同,有各種不同的顏色、形狀、氣味等,嚐 起來的味道也不相同。  蔬菜的營養價值不盡相同,可實用的部位也 不同,有的是根、有的是莖、有的是葉、有 的是花、有的是果實,還有的是種子。  依據蔬菜種類和食用部位的不同,可以將蔬.
電腦與問題解決 5-1 電腦解題概論 5-2 電腦解題程序 5-3 演算法概論.
蔬菜大觀園V.S大家來種菜 高雄市楠梓區翠屏國中小教師 林珮如
“腸”保安康 現代人的腸胃保健.
总结-图 基础知识 基本方法 2017年3月6日 西南石油大学..
信心的晨禱 經文: 詩篇 3 日期:
第7章 樹與二元樹 (Trees and Binary Trees)
Chapter 06 Tree and binary tree 第六章 树和二叉树
動畫與遊戲設計 Data structure and artificial intelligent
班級:行流四甲 組員:497D0004何筱瑩 497D0016鄧宜欣 497D0044呂亭儀 497D0056黃 琪 497D0063賴依淩
校園植物探索之旅 架構設計、資料蒐集、照片整理 王雅芬 老師.
第5章 树( Tree )和二叉树 5.1 树的基本概念 5.2 二叉树 5.3 遍历二叉树和线索二叉树 5.4 树和森林
数据结构 第六章 树与二叉树 深圳大学计算机系 蔡茂国.
网络信息资源的开发与设计 主讲教师 罗双兰 广西师范大学教育科学学院.
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
Minimum Spanning Trees
§4 Additional Binary Tree Operations
Chap4 Tree.
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
Chapter 5 Tree & Binary Tree
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
佇列與推疊 (Queue and Stack)
Chapter8 Binary and Other Trees
第8章 列舉器與集合 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
Chapter 5 樹(Trees).
第12章 樹狀搜尋結構 (Search Trees)
第十五章 Linked List, Stack and Queue
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
第十一章 Heap 結構.
演算法與資料結構 製作單位: 高雄市立高雄中學.
第六章 树和二叉树.
第 七 章 樹狀結構 課程名稱:資料結構 授課老師:________ 2019/1/1.
資料結構與C++程式設計進階 堆疊與佇列(Stack & Queue) 講師:林業峻 CSIE, NTU 6/ 21, 2010.
樹狀結構 Tree Structure chapter 7 德明科技大學資訊科技系.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Data Structure.
计算机问题求解 – 论题2-14 -B树 2018年6月10日.
二叉树和其他树 (Binary and other trees)
第六章 樹狀結構 T r e e 版權屬作者所有,非經作者 同意不得用於教學以外用途.
樹 2 Michael Tsai 2013/3/26.
Ch07 圖形與網路 淡江大學 周清江
感謝同學們在加分題建議. 我會好好研讀+反省~
B+ Tree.
Tree & Binary Tree.
二叉树的遍历.
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
Linked Lists Prof. Michael Tsai 2013/3/12.
第7章 樹與二元樹(Trees and Binary Trees)
Chap2 Stack & Queue.
資料結構使用Java 第9章 樹(Tree).
算法导论第三次习题课.
Chapter 6 樹狀結構.
講師:郭育倫 第12章貪婪演算法 講師:郭育倫 演算法導論,探矽工作室.
1. 志明打算就客戶服務開發一個語音互動(IVR)系統, 顧客可透過電話鍵盤與系統進行互動。
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
進階資料結構(2) Disjoint Sets
计算机问题求解 – 论题 基本的数据结构 2018年05月09日.
Data Structure.
圖形結構 Graph Structure chapter 9 德明科技大學資訊科技系.
第10章 二元搜尋樹 (Binary Search Tree)
資料!你家住哪裏? --談指標 綠園.
JAVA 程式設計與資料結構 第十七章 Tree.
JAVA 程式設計與資料結構 第二十一章 Graph.
Presentation transcript:

講師:郭育倫 d95037@csie.ntu.edu.tw 第3章 基本資料結構 講師:郭育倫 d95037@csie.ntu.edu.tw

演算法導論,探矽工作室 本章學習重點 鏈結串列 堆疊 佇列 二元樹

摘要 程式 v.s. 適當的資料結構 回顧基本資料結構 讓程式容易維護 較高的執行效率 減少額外的記憶體空間 演算法導論,探矽工作室 摘要 程式 v.s. 適當的資料結構 讓程式容易維護 較高的執行效率 減少額外的記憶體空間 回顧基本資料結構 鏈結串列(linked list) 堆疊(stack) 佇列(queue) 二元樹(binary tree)

鏈結串列 陣列 v.s. 鏈結串列 單向鏈結串列 v.s. 雙向鏈結串列 環狀鏈結串列 基本操作 初始化 搜尋(線性時間) 插入 刪除 演算法導論,探矽工作室 鏈結串列 陣列 v.s. 鏈結串列 單向鏈結串列 v.s. 雙向鏈結串列 環狀鏈結串列 基本操作 初始化 搜尋(線性時間) 插入 刪除

演算法導論,探矽工作室 範例:鏈結串列的插入

演算法導論,探矽工作室 範例:鏈結串列的刪除

堆疊 先進後出(first in and last out,FILO) 實作方式 基本操作 陣列 鏈結串列 初始化 判斷狀態(空的?滿的?) 演算法導論,探矽工作室 堆疊 先進後出(first in and last out,FILO) 實作方式 陣列 鏈結串列 基本操作 初始化 判斷狀態(空的?滿的?) 堆入(push) 取出(pop)

演算法導論,探矽工作室 範例:堆疊的 pop & push

佇列 先進先出(first in first out,FIFO) 實作方式 基本操作 陣列 鏈結串列 環狀佇列(ring queue) 演算法導論,探矽工作室 佇列 先進先出(first in first out,FIFO) 實作方式 陣列 鏈結串列 環狀佇列(ring queue) 基本操作 初始化 判斷狀態(空的?滿的?) 放入資料(enqueue) 取出資料(dequeue)

範例:佇列的dequeue & enqueue 演算法導論,探矽工作室 範例:佇列的dequeue & enqueue

演算法導論,探矽工作室 樹 定義 一棵樹t可看成是一個非空的有限元素之集合,每個元素稱為節點(node),其中一個元素稱為根節點(root),或稱為樹根,剩下的元素(如果有的話)組成t的子樹(subtree) 這種包含根節點的樹也稱為有根樹(rooted tree) 節點之間的關係 節點之間的邊線(edge)代表兩者之間的階層關係 父節點(parent)、子節點(children)、兄弟節點(sibling) 沒有任何子節點的節點稱為樹葉(leaf),或稱為葉子 有任何子節點的節點稱為內部節點(internal node)

樹的其它性質 n元樹(multi-way tree) 階層(level) 深度(depth) 高度(height) 演算法導論,探矽工作室 樹的其它性質 n元樹(multi-way tree) 每個節點最多可允許n個子節點 階層(level) 樹根的階層為1,其子節點的階層為2,子節點的子節點為3 … 深度(depth) 樹根到此節點的路徑之長度,也就是經過多少個邊線 高度(height) 此節點到以此節點為樹根的子樹其最遠樹葉路徑的長度

演算法導論,探矽工作室 老王後代的樹狀族譜圖 最多到第3階層 樹的高度為2 節點小洋的深度為2 節點阿昌的高度為1

二元樹 定義 常見的應用 二元樹是樹的一個特例(但是允許是空的) 演算法導論,探矽工作室 二元樹 定義 二元樹是樹的一個特例(但是允許是空的) 每個節點最多只有二棵子樹,有左右之分,分別稱作左子樹(left subtree)和右子樹(right subtree),次序不能顛倒 常見的應用 (二元)堆積 二元搜尋樹

二元樹的特性 包含n個節點的二元樹,剛好有n-1個邊 在一棵二元樹的第i層最多有2i − 1個節點 演算法導論,探矽工作室 二元樹的特性 包含n個節點的二元樹,剛好有n-1個邊 在一棵二元樹的第i層最多有2i − 1個節點 高度為k的二元樹最多有2k+1 − 1個節點,最少有k+1個節點 包含n個節點的二元樹,其高度最大為n-1,最小為log2n

滿二元樹(full binary tree) 演算法導論,探矽工作室 滿二元樹(full binary tree) 一棵二元樹的高度為k且有2k+1 − 1個節點 最底層的節點都是葉子,其它層的節點都有2個子節點 可以對這棵滿二元樹的每個節點,依照由上到下、由左到右的順序,從0到2k+1 − 2進行編號

演算法導論,探矽工作室 高度(深度)為3的滿二元樹

完整二元樹(complete binary tree) 演算法導論,探矽工作室 完整二元樹(complete binary tree) 定義 一棵有n個節點的二元樹,按滿二元樹的編號方式對它進行編號,樹中所有節點和滿二元樹0到n-1編號完全一致 特性 有n個節點,則其深度為log2n 有n個節點,則其高度為h的節點最多有n/(2h+1)個,最少有0個(當n=0時),0 ≤ h ≤ log2n

完整二元樹(續) 深度為k,則它最少有2k個節點,最多有2k+1 − 1個節點。 演算法導論,探矽工作室 完整二元樹(續) 深度為k,則它最少有2k個節點,最多有2k+1 − 1個節點。 對於某個編號為i的節點,0 ≤ i ≤ n-1,則以下關係成立(當然,對滿二元樹也會成立): 若編號i的節點不是樹根,其父節點的編號為(i-1)/2 編號i的節點,其左子節點的編號為i×2+1 編號i的節點,其右子節點的編號為i×2+2

演算法導論,探矽工作室 完整二元樹的範例

二元樹的實作方式 陣列 指標 優點 缺點 每個節點包括鍵值,以及指向左、右子節點的指標 一般二元樹都採用此方法 演算法導論,探矽工作室 二元樹的實作方式 陣列 優點 用數學計算即可得知某節點的父節點、左子節點、右子節點在陣列中的索引值 常用於完整二元樹(e.g.堆積) 缺點 空間的浪費 指標 每個節點包括鍵值,以及指向左、右子節點的指標 一般二元樹都採用此方法

演算法導論,探矽工作室 以陣列表示右傾斜二元樹?

二元樹的操作 配置新節點和初始化 加入節點 刪除節點 調整樹狀結構 搜尋某個鍵值相符合的節點 尋訪(traversal) 演算法導論,探矽工作室 二元樹的操作 配置新節點和初始化 加入節點 刪除節點 調整樹狀結構 搜尋某個鍵值相符合的節點 尋訪(traversal)

演算法導論,探矽工作室 二元樹的尋訪 常見的方法 前序尋訪、中序尋訪、後序尋訪 尋訪過程中,每個節點只會被拜訪(visit)過一次,並在尋訪時執行對該節點的所有運算,因此其時間和空間複雜度都為O(n) 可能的運算 列出所有節點的鍵值 統計節點的個數 刪除所有節點 ….

前序尋訪 void preOrder(NODE *ptr){ if(ptr){ 演算法導論,探矽工作室 前序尋訪 void preOrder(NODE *ptr){ if(ptr){ visit(ptr);/* 處理以ptr為樹根的子樹主體 */ preOrder(ptr->left);/* 尋訪左子樹 */ preOrder(ptr->right);/* 尋訪右子樹 */ }

中序尋訪 void inOrder(NODE *ptr){ if(ptr){ 演算法導論,探矽工作室 中序尋訪 void inOrder(NODE *ptr){ if(ptr){ inOrder(ptr->left);/* 尋訪左子樹 */ visit(ptr);/* 處理以ptr為樹根的子樹主體 */ inOrder(ptr->right);/* 尋訪右子樹 */ }

後序尋訪 void postOrder(NODE *ptr){ if(ptr){ 演算法導論,探矽工作室 後序尋訪 void postOrder(NODE *ptr){ if(ptr){ postOrder(ptr->left);/* 尋訪左子樹 */ postOrder(ptr->right);/* 尋訪右子樹 */ visit(ptr);/* 處理以ptr為樹根的子樹主體 */ }

演算法導論,探矽工作室 結論 資料結構是儲存與組織資料的一種方式,可用來加速資料的存取與修改 介紹鏈結串列、堆疊、佇列、二元樹