โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Bansomdej Chaopraya Rajabhat University
Advertisements

โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
ความรู้พื้นฐานเกี่ยวกับการเขียนโปรแกรม
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธิ์
การทำงานแบบเลือกทำ (Selection)
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
BC322 ครั้งที่ 6 Text file BC322 : computer Programming (Week6)
ไวยากรณ์ของภาษาการทำโปรแกรม (2) (Syntax of programming languages)
ต้นไม้และนิยามที่เกี่ยวข้อง
Intermediate Representation (รูปแบบการแทนในระยะกลาง)
สถาปัตยกรรมแบบ stack และ การผลิตโค๊ด
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย.
Functional Programming
Functional programming part II
Stack Holidays/seasonal content.
Decision Tree.
AVL Tree.
Data structure & Algorithms
ลักษณะการทำงานของ Stack
การแก้ปัญหาด้วยคอมพิวเตอร์
คิวQueue Circular Queue.
MAT 231: คณิตศาสตร์ไม่ต่อเนื่อง (6) ทรี-ต้นไม้(Trees)
วิทยาการคอมพิวเตอร์ 1 เรื่องคัดเฉพาะทาง
หน่วยที่ 4: คำสั่งควบคุมโปรแกรม (Control Flow Command)
ตัวแปร (variable) ตัวแปร เป็นชื่อที่เราตั้งขึ้น เพื่อให้คอมพิวเตอร์เตรียมที่ใน หน่วยความจำไว้สำหรับเก็บข้อมูลที่นำไปประมวลผล การตั้งชื่อตัวแปร ชื่อตัวแปรในภาษา.
ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages)
ตัวดำเนินการ(Operator)
Infix to Postfix มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
บทที่ 7 คำสั่งสำหรับเขียนโปรแกรม
โครงสร้างข้อมูลแบบคิว
หน่วยประมวลผลกลางและหน่วยความจำ Central Processing Unit and Memory
นิพจน์และตัวดำเนินการ
ลิงค์ลิสต์ (Linked List)
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
บทที่ 4 นิพจน์ทางคณิตศาสตร์.
หลักการเขียนโปรแกรม ( )
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
PHP การตรวจสอบเงื่อนไข.
วิวัฒน์ ชินนาทศิริกุล
School of Information Communication Technology,
ต้นไม้ Tree (2) ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
บทที่ 9 ไทร์ (Tries).
School of Information Communication Technology,
Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ
รายการโยง (linked lists) หอยทอด 30 ข้าวผัด 30 ไก่ย่าง 50 เนื้อทอด 30
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
หลักการเขียนโปรแกรม ( )
โครงสร้างข้อมูลแบบ สแตก (stack)
ต้นไม้ Tree [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
WATTANAPONG SUTTAPAK SOFTWARE ENGINEERING, SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY, UNIVERSITY OF PHAYAO Chapter 9 Heap and Hash 1.
Computer Program คือ ขั้นตอนการทำงาน ของคอมพิวเตอร์
ต้นไม้ Tree [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
ค32213 คณิตศาสตร์สำหรับคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
Trees Hierarchical Structures. Outlines Definition of trees Modeling by trees Properties of trees Applications – Binary search trees – Prefix codes –
Department of Computer Science, BUU
Burin Rujjanapan Updated:
Stack Sanchai Yeewiyom
Trees (2) University of Phayao Sanchai Yeewiyom
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
บทที่ 9 การอธิบายกระบวนการแบบต้นไม้.
Data Structures and Algorithms 2/2561
4.4 AVL Trees AVL (Adelson-Velskii and Landis) tree เป็น binary search tree กำกับด้วยเงื่อนไขของการสมดุล และประกันว่า depth ของ tree จะเป็น O(log n) อย่างง่ายที่สุดคือกำหนดว่า.
4.7. B-Trees โครงสร้าง tree ที่กล่าวถึงมาแล้วนั้น อยู่บนสมมติฐานที่ว่าโครงสร้างทั้งหมดสามารถจัดเก็บอยู่ในหน่วยความจำของเครื่องคอมพิวเตอร์ได้ ถ้า จำนวนข้อมูลมีปริมาณมากเกินกว่าที่จะเก็บไว้ใน.
Data Structure and Algorithms
ใบสำเนางานนำเสนอ:

โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)

Terminology Node A, B, C Branch AB, AC ต้นไม้ (Tree) ประกอบด้วย 2. Branch ใช้เชื่อม Node เข้าด้วยกัน A B C Node A, B, C Branch AB, AC

Node A มี Degree เท่ากับ 2 Degree หมายถึง จำนวน Branch ที่สัมพันธ์กับ Node แบ่งเป็น 1. Indegree หมายถึง Branch ที่เข้าหา Node 2. Outdegree หมายถึง Branch ที่ออกจาก Node A B C Node A มี Degree เท่ากับ 2 Indegree = 0 Outdegree = 2

Root หมายถึง Node แรกของ Tree A B C

ดังนั้นจะพบว่าต้นไม้ทั่วไป Root มี Indegree = อื่นๆ มี Indegree = Root มี Outdegree = อื่นๆ มี Outdegree = N 1 N

Leaf หมายถึง Node ที่มี Outdegree เท่ากับ 0 B C Leaf B, C

Root A Leaf D, E, C Internal node B Internal node หมายถึง Node ที่ไม่ใช่ Root และ Leaf A B C D E Root A Leaf D, E, C Internal node B

Parent หมายถึง Node ที่มี Outdegree B C D E Parent A, B

Child หมายถึง Node ที่มี Indegree A B C D E Child B, C, D, E

Sibling {B, C}, {D, E} Sibling หมายถึง Node ที่มี Parent เดียวกัน A B

Path จาก A ไป E A -> B -> E Path หมายถึง เส้นทางจาก Node หนึ่งไปยังอีก Node หนึ่ง A B C D E Path จาก A ไป E A -> B -> E ** ทุก Node ใน Tree จะต้องมี Path เดียวเท่านั้น **

Ancestor หมายถึง ทุก Node ในเส้นทางจาก Root ไปยัง Node ที่ต้องการ B C D E Ancestor ของ E A, B

Descendent ของ A B, C, D, E Descendent ของ B D,E Descendent หมายถึง ทุก Node ในเส้นทางจาก Node ที่กำหนดไปจนถึง Leaf A B C D E Descendent ของ A B, C, D, E Descendent ของ B D,E

Level หมายถึง ระยะทางจาก Root A B C D E Level 1 Level 2

Level 0 Level 1 Level 2 Height = 2 + 1 = 3 Height ของ Tree หมายถึง Level สูงสุด ของ Leaf บวกด้วย 1 Level 0 A B C D E Level 1 Level 2 Height = 2 + 1 = 3

Parents Children Siblings Leaves Internal nodes Ancestor of G Descendent of A Height A,B,F B,E,F,C,D,G,H,I {B,E,F}, {C,D}, {G,H,I} C,D,E,G,H,I B,F A,F B,E,F,C,D,G,H,I 3

Subtree หมายถึง โครงสร้างที่เชื่อมต่อกันภายใต้ Root โดย Node แรกของ Subtree จะเป็น Root ของ Subtree นั้น และใช้เป็นชื่อเรียก Subtree Subtree สามารถแบ่งย่อยเป็น Subtree ได้อีกจนกว่าจะ Empty

Tree Representation หมายถึง ลักษณะของการนำเสนอโครงสร้างข้อมูลทรี ซึ่งสามารถทำได้ 3 แบบ ดังนี้ 1. General Tree การนำเสนอแบบรูปภาพต้นไม้ 2. Indented List การนำเสนอโดยใช้การย่อหน้า 3. Parenthetical List การนำเสนอโดยใช้เครื่องหมายวงเล็บเหมือนนิพจน์

ตัวอย่างที่ 1 Indented List : Computer Case ... CPU Controller ALU ROM 3.5” Disk CD-ROM General Tree Parenthetical List : Computer (Case(...)CPU(Controller ALU … ROM)3.5”Disk (... ) … CD/ROM(...))

ตัวอย่างที่ 2 Indented List : A B General Tree C D E F G H I Parenthetical List : A ( B ( C D ) E F ( G H I ) )

แบบฝึกหัด 1. จากต้นไม้ต่อไปนี้ จงหา 1.1 Root 1.2 Leaves 1.3 Internal nodes 1.4 Ancestors of H 1.5 Descendents of F

2. จากต้นไม้ต่อไปนี้ จงหา. 2. 1 Indegree of node F. 2 2. จากต้นไม้ต่อไปนี้ จงหา 2.1 Indegree of node F 2.2 Outdegree of node B 2.3 Siblings of H 2.4 Parent of K 2.5 Children of C

3. จากต้นไม้ต่อไปนี้ จงหา 3.1 Height of the tree 3.2 Height of node G 3.3 Level of node G 3.4 Level of node A 3.5 Height of node E

4. จงแสดง Subtree ต่าง ๆ ของโหนด F ของต้นไม้ ต่อไปนี้

5. จงนำเสนอต้นไม้ต่อไปนี้โดยใช้รูปแบบ Indented List

6. จงนำเสนอต้นไม้ต่อไปนี้โดยใช้รูปแบบ Parenthetical List

7. จงเปลี่ยนรูปแบบการนำเสนอต้นไม้ต่อไปนี้ให้อยู่ในรูปแบบต้นไม้ทั่วไป a ( b ( c d ) e f ( g h ) )

Binary Tree หมายถึง ต้นไม้ที่แต่ละ Node มี Subtree <= 2 หรือ Outdegree <= 2

ตัวอย่าง Binary Tree

Empty หรือ Null Tree

มี Node อยู่ทั้งหมด 7 Nodes Height of Binary Tree คำถามที่ 1 มี Node อยู่ทั้งหมด 7 Nodes 1.1 จะสร้าง Tree ให้มี Height สูงสุดได้เท่าไร อย่างไร 1.2 จะสร้าง Tree ให้มี Height ต่ำสุดได้เท่าไร อย่างไร Hmax = N Hmin = log2N + 1

Nmin = H คำถามที่ 2 Tree ที่มี Height = 3 2.1 จะมี Node สูงสุดได้เท่าไร อย่างไร 2.2 จะมี Node ต่ำสุดได้เท่าไร อย่างไร Nmax = 2H - 1 Nmin = H

Binary Tree จะ Balance เมื่อทุก ๆ Subtree มี Balance Factor เท่ากับ 0 Balance Factor = HL - HR

B = 0 B = 0 B = 0 B = 0 B = 0 B = 0 B = 0 B = 0 B = 0 B = 0 B = 0 Balance Balance B = 0 B = 0 B = 0 B = 0 B = 1-1 = 0 B = 2-1 = 1 Balance B = 0 B = 0 B = 1-1 = 0 B = 0 B = 0 B = 0 B = 0-2 = -2 B = 2-0 = 2 B = 0-1 = -1 B = 1-0 = 1 B = 0 B = 0

Complete Binary Tree Binary Tree ที่มี Node เต็มทุก Level Nearly Complete Binary Tree Binary Tree ที่มี Node เต็มทุก Level ยกเว้น Level สุดท้าย และ Node ใน Level สุดท้ายอยู่เรียงกันทางซ้ายมือ

ตัวอย่าง Complete และ Nearly Complete Binary Tree

Binary Tree Traversal 1. Depth-first Descendent ทั้งหมดของ Child จะต้องถูกประมวลผลก่อน Child ถัดไป 2. Breath-first ประมวลผลทีละ Level จากบนลงล่าง

1. Depth-first แบ่งเป็นทั้งหมด 6 แบบแต่มี 3 แบบที่นิยมใช้ ได้แก่ N L R L N R L R N

แบบ Preorder N L R algorithm preOrder (val root <node pointer>) 1 if (root is not null) 1 process(root) 2 preOrder(root->leftSubtree) 3 preOrder(root->rightSubtree) 2 return

แบบ Inorder L N R algorithm inOrder (val root <node pointer>) 1 if (root is not null) 1 inOrder(root->leftSubtree) 2 process(root) 3 inOrder(root->rightSubtree) 2 return

แบบ Postorder L R N algorithm postOrder (val root <node pointer>) 1 if (root is not null) 1 postOrder(root->leftSubtree) 2 postOrder(root->rightSubtree) 3 process(root) 2 return

2. Breath-first algorithm breathFirst (val root <node pointer>) 1 p = root 2 while (p not null) 1 process(p) 2 if (p->left not null) 1 enqueue(p->left) 3 if (p->right not null) 1 enqueue(p->right) 4 if (not emptyQueue) 1 dequeue(p) else 1 p = null 3 return

แบบฝึกหัด 1. จากต้นไม้ต่อไปนี้ จงหาลำดับการประมวลผลแบบ Depth-first ทั้งหมด

2. จากต้นไม้ต่อไปนี้ จงหาลำดับการประมวลผลแบบ Breath-first

Binary Tree Application 1. Expression Tree 2. Huffman Code

1. Expression Tree หมายถึง Binary Tree ที่มีคุณสมบัติดังต่อไปนี้ 1. Leaf เก็บ Operand 2. Root และ Internal node เก็บ Operator 3. Subtree เป็น Subexpression

ตัวอย่าง

การท่องใน Expression Tree 1. Preorder Traversal 2. Postorder Traversal 3. Inorder Traversal Prefix Expression Postfix Expression Infix Expression

1. Preorder Traversal + * a + b c d 1 if (root is not null) 1 print(root->token) 2 prefix(root->leftSubtree) 3 prefix(root->rightSubtree) 2 return + * a + b c d

2. Postorder Traversal a b c + * d + 1 if (root is not null) 1 postfix(root->leftSubtree) 2 postfix(root->rightSubtree) 3 print(root->token) 2 return a b c + * d +

3. Inorder Traversal ( ( a * ( b + c ) ) + d ) 1 if (root is not null) 1 if root->token is operand 1 print(root->token) else 1 print(open parenthesis) 2 infix(root->leftSubtree) 3 print(root->token) 4 infix(root->rightSubtree) 5 print(close parenthesis) 2 return ( ( a * ( b + c ) ) + d )

การสร้าง Expression Tree จาก Postfix Expression พิจารณาทีละ Token จนหมด ถ้า Token เป็น Operand สร้าง Node แล้ว Push ลง Stack ถ้า Token เป็น Operator Pop ขึ้นมา 2 ตัวเชื่อมเป็น Tree โดยใช้ Operator แล้ว Push ลง Stack

ตัวอย่าง จากนิพจน์ Postfix a b c + * d + จะได้ Expression Tree ดังนี้

แบบฝึกหัด 1. จงแสดง Expression Tree จากนิพจน์ Postfix ที่กำหนดให้ พร้อมทั้งหานิพจน์ Infix และ นิพจน์ Prefix จาก Expression Tree ที่ได้ A B * C D / + E F - *

2. จงแสดง Expression Tree จากนิพจน์ Infix ที่กำหนดให้ พร้อมทั้งหานิพจน์ Prefix และนิพจน์ Postfix จาก Expression Tree ที่ได้ (C + D + A * B) * (E + F)

General Tree หมายถึง Tree ที่สามารถมี Outdegree ได้ไม่จำกัดจำนวน

การแปลง General Tree เป็น Binary Tree มี 3 ขั้นตอน ดังนี้ 1. ระบุ Child ที่อยู่ทางซ้ายสุด 2. เชื่อม Sibling เข้าด้วยกัน 3. ลบ Branch ที่ไม่ต้องการ

ตัวอย่าง การแปลง General Tree เป็น Binary Tree

แบบฝึกหัด จงแปลงต้นไม้ต่อไปนี้เป็น Binary Tree Bill John Josep Mary Smith Rose Jack Brian May Sarah Ben Tom Jay Jim Joey Joe