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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
คณิตคิดเร็วโดยใช้นิ้วมือ
Advertisements

ที่ โรงเรียน เฉลี่ย 1 บ้านหนองหว้า บ้านสะเดาหวาน
Bansomdej Chaopraya Rajabhat University
ยินดีต้อน เข้าสู่ โครงงาน.
สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธิ์
พลังงานในกระบวนการทางความร้อน : กฎข้อที่หนึ่งของอุณหพลศาสตร์
การซ้อนทับกัน และคลื่นนิ่ง
นายรังสฤษดิ์ตั้งคณารหัส นายวสันต์ชานุชิตรหัส
ต้นไม้และนิยามที่เกี่ยวข้อง
วิชาเศรษฐศาสตร์ รศ.ดร. ชวินทร์ ลีนะบรรจง.
Stack Holidays/seasonal content.
จำนวนเต็ม จำนวนเต็ม  ประกอบด้วย                   1. จำนวนเต็มบวก    ได้แก่  1 , 2 , 3 , 4, 5 , ....                   2.  จำนวนเต็มลบ      ได้แก่  -1.
AVL Tree.
Data structure & Algorithms
LAB # 3 Computer Programming 1
การเลื่อนเงินเดือนข้าราชการ
บทที่ 1 อัตราส่วน.
จำนวนนับใดๆ ที่หารจำนวนนับที่กำหนดให้ได้ลงตัว เรียกว่า ตัวประกอบของจำนวนนับ จำนวนนับ สามารถเรียกอีกอย่างว่า จำนวนเต็มบวก หรือจำนวนธรรมชาติ ซึ่งเราสามารถนำจำนวนนับเหล่านี้มา.
เป้าเบิกจ่าย งบรวม เป้าเบิกจ่าย งบลงทุน งบรวม เบิกจ่าย.
MAT 231: คณิตศาสตร์ไม่ต่อเนื่อง (6) ทรี-ต้นไม้(Trees)
บทที่ 3 ตัวดำเนินการ และ นิพจน์
จำนวนทั้งหมด ( Whole Numbers )
เรื่อง ความรู้เกี่ยวกับการจัดเก็บภาษีสุรา
การบ้าน แซมเปิลสเปซ.
การดำเนินงานอาชีวเวชศาสตร์: แพทย์ที่ผ่านการอบรม
Infix to Postfix มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
โครงสร้างข้อมูลแบบคิว
สำนักงานสถิติแห่งชาติ กระทรวงเทคโนโลยีสารสนเทศและการสื่อสาร
สำนักงานสถิติแห่งชาติ กระทรวงเทคโนโลยีสารสนเทศและการสื่อสาร
ข้อมูลเศรษฐกิจการค้า
การเลื่อนเงินเดือนในระบบใหม่
ความก้าวหน้าระดับความสำเร็จ การปฏิบัติราชการของปฏิรูปที่ดิน จังหวัด 5 ครั้ง ณ 30 มิถุนายน 2555 สำนักวิชาการและ แผนงาน.
ความก้าวหน้าระดับความสำเร็จ การปฏิบัติราชการของปฏิรูปที่ดิน จังหวัด 5 ครั้ง ณ 31 พฤษภาคม 2555.
ความก้าวหน้าระดับความสำเร็จ การปฏิบัติราชการของปฏิรูปที่ดิน จังหวัด 5 ครั้ง ณ 15 มิถุนายน 2555.
การแจกแจงปกติ.
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
วิชาคณิตศาสตร์ ชั้นประถมศึกษาปีที่6
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
F M B N สมบัติของจำนวนนับ ตัวคูณร่วมน้อย (ค.ร.น.).
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
สรุปสถิติ ค่ากลาง ค่าเฉลี่ยเลขคณิต เรียงข้อมูล ตำแหน่งกลาง มัธยฐาน
คณิตศาสตร์ (ค33101) หน่วยการเรียนรู้ที่ 7 เรื่อง สถิติ
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
วิวัฒน์ ชินนาทศิริกุล
การเรียงข้อมูล 1. Bubble Sort 2. Insertion Sort 3. Heap Sort
ณ โรงแรมมารวยการ์เด็น ธันวาคม 2555
School of Information Communication Technology,
ต้นไม้ Tree (2) ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
บทที่ 9 ไทร์ (Tries).
School of Information Communication Technology,
Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ
สรุปผลการสำรวจ ความคิดเห็นของประชาชนเกี่ยวกับ การป้องกันและปราบปรามยาเสพติด (ก่อนและหลัง การประกาศสงครามขั้นแตกหักเพื่อเอาชนะยาเสพติด) พ.ศ สำนักงานสถิติแห่งชาติ
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การค้นในปริภูมิสถานะ
กราฟเบื้องต้น.
การปรับเงินเดือน กรณีที่เงินเดือนยังไม่ถึงขั้นต่ำของระดับ
โครงสร้างข้อมูลแบบ สแตก (stack)
ต้นไม้ Tree [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การค้นในปริภูมิสถานะ
กราฟเบื้องต้น.
ผลการประเมิน คุณภาพการศึกษาขั้นพื้นฐาน ปีการศึกษา
CHAPTER 2 Operators.
ต้นไม้ Tree [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
ครูปพิชญา คนยืน. สถิติ หน่วยการ เรียนรู้ที่ 7 ครูปพิชญา คนยืน จงสร้างตารางแจก แจงความถี่ของ ข้อมูลต่อไปนี้ โดย กำหนดให้มี 5 ชั้น และหาขอบล่าง, ขอบบน.
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
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 หรือ External node หมายถึง 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

Depth ของ Node หมายถึง ความยาวของ path จาก root node ถึง node นั้น ดังนั้น root node จึงมีความลึก (Depth) เป็น 0 Depth ของ Tree หมายถึง ความลึกของ leaf node ที่อยู่ลึกที่สุด ซึ่งจะมีค่าเท่ากับความสูงของ tree เสมอ

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

Subtree

แบบฝึกหัด 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 G 2.3 Siblings of I 2.4 Parent of G 2.5 Children of C

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

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

ตัวอย่าง Binary Tree

Empty หรือ Null Tree

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

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

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

Complete และ Nearly Complete Binary Tree

This association suggests that a complete binary tree can be implemented with an array: F G L [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

A B C D E R S F G L [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

A B C D E R S F G L [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

A B C D E R S F G L [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

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

1. Depth-first 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 ทั้งหมด A B C D E R S F G L

2. จากต้นไม้ต่อไปนี้ จงหาลำดับการประมวลผลแบบ Breath-first B C D E R S F G L

Binary Tree Application 1. Expression Tree 2. Huffman Code

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

ตัวอย่าง

การท่องใน 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 ดังนี้

แบบฝึกหัด จงแสดง Expression Tree จากนิพจน์ Postfix ที่กำหนดให้ A B * C D / + E F - *

2. Huffman Code Problem บีบอัด file โดยไม่ให้เสียข้อมูลไปเลยได้อย่างไร ให้ M เป็น ข้อมูลที่เราต้องการบีบอัด สมมติว่ามันมีขนาด 100,000 characters ซึ่งประกอบไปด้วยตัวอักษร a ถึง e เท่านั้น สมมติให้ 1 character ใช้ 1 byte (8 bits) ฉะนั้น 100,000 characters ใช้ 800,000 bits เราสามารถลดจำนวน bits ที่ใช้แต่ละตัวอักษรได้หรือไม่?

ดังนั้น จำนวน bits ที่ใช้จะลดลงเหลือ 300,000 bits เนื่องด้วยมีตัวอักษรเพียง 5 ตัว ดังนั้น สมมติให้ 1 character ใช้ 3 bits ในเมื่อเรารู้ว่ามีแค่ไม่กี่จำนวน เราก็กำหนดโค้ดเองได้ดังในแผ่นใส ดังนั้น จำนวน bits ที่ใช้จะลดลงเหลือ 300,000 bits

จำนวน bits ที่ใช้จะลดลง ถ้าลดจำนวนบิตลงอีก จะเห็นว่า จำนวน bits ที่ใช้จะลดลง แต่สมมติข้อมูล 001010 สามารถเป็นได้ทั้ง aababa หรือ cbda ก็ได้ !! อย่างนี้ถึงจะ compress ได้ แต่ก็ไม่มีทางตีความกลับคืนได้ เพราะความหมายไม่แน่นอน

ใช้ Huffman Code เป็นรหัสแทนตัวอักษรที่แต่ละตัวอักษรมีความยาวของรหัสแตกต่างกัน โดย ตัวอักษรที่ใช้บ่อย จะมีขนาดสั้น ตัวอักษรที่ใช้น้อย จะมีขนาดยาว ทั้งนี้เพื่อทำให้ข้อมูลมีขนาดเล็กลง

ตัวอย่าง การสร้าง Huffman Tree เพื่อหา Huffman Code สมมติให้

1 ดังนั้นจะได้ a 00001 b 00000 c 0001 d 011 e 010 f 001 g 11 h 10 1 1 1 1 1 1

แบบฝึกหัด กำหนดความถี่ของการใช้งานตัวอักษรต่าง ๆ ดังนี้ A = 30% C = 15% E = 25% B = 15% D = 10% F = 5% จงสร้าง Huffman Code แทนตัวอักษรดังกล่าว

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

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

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