Reference to FUNDAMENTALS OF DATA STRUCTURE IN C++

Slides:



Advertisements
Similar presentations
1 第八章 深入探討樹狀結構. 2 目次 8.1 m-way 搜尋樹 8.2 B-tree 8.3 動動腦時間 8.4 練習題解答.
Advertisements

《公路纵断面设计》 —— 纵断面设计的要求 道桥系 二○○七年五月. 纵断面设计的一般要求 1 .纵坡设计必须满足《公路工程技术标准》中的各项规定。 2 .为保证汽车能以一定的车速安全舒顺地行驶,纵坡应具有 — 定 的平顺性,起伏不宜过大及过于频繁。尽量避免采用极限纵坡 值.缓和坡段应自然地配合地形设置,在连续采用极限长度的.
Author : Hyesook Lim, Changhoon Yim, and Earl E. Swartzlander, Jr., Fellow Publisher : IEEE TRANSACTIONS ON COMPUTERS, VOL. 59, NO. 6, JUNE 2010 Presenter.
算法分析(3) 重要的数据结构.
第7章 樹與二元樹 (Trees and Binary Trees)
Tree (2): heap, deap, 2-3 tree, 2-3-4tree
資料結構(計財系).
第6章 二叉树和树 前面的章节主要讨论的是线性结构,二叉树和树属于非线性的结构。遍历非线性结构比线性结构要麻烦。
计算机软件技术基础 数据结构与算法(4).
引入树 线性表、堆栈和队列都是线性结构,它们的共同特点:一对一; 计算机对弈中的一个格局可能有多个后继格局,用线性结构难以描述。
第5章 树( Tree )和二叉树 5.1 树的基本概念 5.2 二叉树 5.3 遍历二叉树和线索二叉树 5.4 树和森林
第五章 树 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
第8章 查找 数据结构(C++描述).
新世代計算機概論 第14章 程式語言.
Minimum Spanning Trees
§4 Additional Binary Tree Operations
Chap4 Tree.
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
Linked List Operations
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
程式設計 博碩文化出版發行.
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
第11章 查找 主要知识点 查找的基本概念 静态查找表 动态查找表 哈希表.
Chapter8 Binary and Other Trees
樹狀結構 Trees.
第七章 搜索结构 静态搜索结构 二叉搜索树 AVL树.
哈夫曼编码.
Chapter 5 樹(Trees).
第12章 樹狀搜尋結構 (Search Trees)
資料結構 第6章 樹狀結構.
(Circular Linked Lists)
第十章 C高级程序应用—链表* 10.1链表的基本概念 10.2单向链表 10.3双向链表 10.4应用举例.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
資料結構–樹(Tree) 綠園.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
鄧姚文 資料結構 第六章:樹(Tree) 鄧姚文
Chapter 9 高度平衡二元搜尋樹 AVL Binary Search Tree
樹狀結構 Tree Structure chapter 7 德明科技大學資訊科技系.
第7章 树和二叉树 7.1 树 7.2 二叉树 7.3 以结点类为基础的二叉树设计 7.4 二叉树类 7.5 二叉树的分步遍历
计算机问题求解 – 论题2-14 -B树 2018年6月10日.
Chapter 11 B-tree 11.1 m-way 搜尋樹 11.2 B-tree.
二叉树和其他树 (Binary and other trees)
第六章 樹狀結構 T r e e 版權屬作者所有,非經作者 同意不得用於教學以外用途.
数据结构 第八章 查找.
Ch 3 Dynamic Programming (動態規劃).
樹 2 Michael Tsai 2013/3/26.
感謝同學們在加分題建議. 我會好好研讀+反省~
Chap4 Tree.
Tree & Binary Tree.
網路遊戲版 幸福農場168號.
二叉树的遍历.
7.1 广义表的概念 广义表是n(n≥0)个数据元素组成的序列,其中每个数据元素或是单个数据元素(简称原子),或仍然是一个广义表 。
OOP6 結構Struct 黃兆武.
第1章 绪论 2019/4/16.
第8章 資料排序 資料結構設計與C++程式應用
第7章 樹與二元樹(Trees and Binary Trees)
資料結構與C++程式設計進階 樹狀結構(Tree) 講師:林業峻 CSIE, NTU 11/ 12, 2009.
資料結構使用Java 第9章 樹(Tree).
Disjoint Sets Michael Tsai 2013/05/14.
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
6.1 樹狀結構的一些專有名詞 6.2 二元樹 6.3 二元樹的表示方法 6.4 二元樹的追蹤 6.5 引線二元樹 6.6 其它議題
#define RBTREE_RED 0 #define RBTREE_BLACK 1 typedef int dataType; typedef struct treeNode{ dataType key; int color; //red:0.
第十二章 位运算.
Trees 授課者:驕芸.
第10章 二元搜尋樹 (Binary Search Tree)
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
JAVA 程式設計與資料結構 第十七章 Tree.
Presentation transcript:

Reference to FUNDAMENTALS OF DATA STRUCTURE IN C++ 左傾樹(Leftist Tree) Reference to FUNDAMENTALS OF DATA STRUCTURE IN C++

擴充二元樹(extendedbinary tree) 在擴充二元樹中,方形節點稱為外部節點(external node)。原有的節點為內部節點(internal node)。

shortest(x) 令x為擴充二元樹的節點。令left_child(x)和right_child(x)分別表示內部節點x的左、右子節點。 shortest(x)= 0 if x is an external node 1+min{shortest(left_child(x)),shortest(right_child(x))}

左傾樹定義 左傾樹為二元樹,它如果不是空的,則對每一內部節點x, shortest(left_child(x)) ≧ shortest(right_child(x))

公式 令x為有n個(內部)節點的左傾樹之根節點。n ≧ 2shortest(x) –1 Proof:根據shortest(x)的定義,在左傾樹第一個shortest(x)階層不會有外部節點。因此,左傾樹至少有 shortest(x) Σ 2i-1 = 2shortest(x) –1 i=1

最小左傾樹(min-leftist tree) (或最大左傾樹(max-leftist tree))

Combine的步驟 挑出a、b之root的最小值作為新樹之root(令a為最小)。 A之root為新樹之root,且a之左子樹保留,將a之右子樹與b合併 。 重複前兩個步驟,直到合併完成。 檢查有無滿足min leftist tree性質,若沒有,則要對調左右子樹來調整。

C typedef struct { int key; /*other field*/ }element; typedef struct *leftist_tree; struct leftist{ leftist_tree left_child; element data; leftist_tree right_child; int shortest; };

C void min-combine(leftist_tree *a, leftist_tree *b){ /*combine the two min leftist trees *a and *b. The resulting min leftist tree is returned in *a, and *b is set to NULL*/ if(!a){ *a = *b; }else if(*b){ min-union(a,b); } *b = NULL;

void min-union(leftist_tree *a, leftist_tree *b){ /*recursively combine two nonempty min leftist trees*/ leftist_tree temp; /*set a to be the tree with smaller root*/ if((*a)->data.key > (*b)->data.key){ SWAP(*a,*b,temp);} /*create binary tree such that the smallest key in each subtree is the root*/ if(!(*a)->right_child){ (*a)->right_child = *b; }else{ min_union(&(*a)->right_child,b);} /*leftist tree property*/ if(!(*a)->left_child){ (*a)->left_child = (*a)->right_child; (*a)->right_child = NULL; }else if((*a)->left_child->shortest<(*a)->right_child-<shortest){ SWAP((*a)->left_child,(*a)->right_child,temp); (*a)->shortest = (!(*a)->right_child)?1:(*a)->right_child->shortest +1;}}

Java class Element{ int key; /*other field*/ } class LeftistTree{ LeftistTree leftChild; LeftistTree rightChild; int shortest;

Java void minCombine(LeftistTree a, leftistTree b){ /*combine the two min leftist trees a and b. The resulting min leftist tree is returned in a and b is set to null*/ if(a==null){a=b;} else if(b!=null){ minUnion(a,b) } b=null;

void minUnion(LeftistTree a, LeftistTree b){ /*recursively combine two nonempty min leftist trees*/ LeftistTree temp; /*set a to be the tree with smaller root*/ if(a.data.key > b.data.key){swap(a,b,temp);} /*create binary tree such that the smallest key in each subtree is the root*/ if(a.rightChild==null){a.rightChild=b;} else{minUnion(a.rightChild,b);} /*leftist tree property*/ if(a.leftChild==null){ a.leftChild= a.rightChild; a.rightChild=null; }else if(a.leftChild.shortest < a.rightChild.shortest){ swap(a.leftChild,a.rightChild,temp); } a.shortest = (a.rightChild == null)?1 : a.rightChild.shortest+1;

分析min-combine 因為min-union沿著兩個要結合的左傾樹的最右邊的路徑向下移動,且這些路徑的長度最多為每一樹中元素個數的對數函數,所以合併全部元素個數為n的兩個左傾樹所需時間為O(log n)。

min-union 交替進行下列步驟: (1)建立包含所有元素的二元樹,並確認每一個子樹的根節點的鍵值是該子樹中最小的。 (2)確認每一節點有一左子樹,其shortest值大於或等於其右子樹的shortest值。

範例:結合兩最小左傾樹

Exercise:合併下列兩個左傾樹 1 3 2 4 5 9 10 6 8 12 15 請寫出全部過程!!

解答 1 3 2 4 5 6 9 8 10 12 15

The End 謝謝大家!!