Data Structure and Algorithms

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
Advertisements

โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
ต้นไม้ Tree (2) ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ
บทที่ 5 การดำรงชีวิตของพืช
การใช้งานโปรแกรม SPSS
ซอฟต์แวร์ระบบที่รู้จักกันดี คือซอฟต์แวร์ควบคุมการปฏิบัติการ ของคอมพิวเตอร์ที่เรียกว่า ระบบปฏิบัติการ ระบบปฏิบัติการเป็นชุดคำสั่งที่ใช้ควบคุมระบบฮาร์ดแวร์และ.
Chapter 10 Arrays Dept of Computer Engineering Khon Kaen University.
1 Search & Sort Search & Sort วรวิทย์ พูลสวัสดิ์.
โครงสร้างข้อมูล (Data Structures ) รหัสวิชา การเรียงลำดับข้อมูลแบบ (Heap Sort)
หน่วยการเรียนรู้ที่ 2 หลักการแก้ปัญหาด้วยคอมพิวเตอร์
DATA STRUCTURE AND ALGORITHM Linked List.
หน่วยที่ 6 แถวลำดับ (Array)
ครั้งที่ 7 รีจิสเตอร์ (REGISTER). รีจิสเตอร์ (Register) รีจิสเตอร์เป็นวงจรความจำที่ใช้ในการเก็บค่า ทางไบนารี่ ใช้ในการเก็บค่าในระหว่างการ ประมวลผลโดยใช้ฟลิป.
เทคนิคการใช้ Microsoft Excel. 1. การตีตารางในรูปแบบต่าง ๆ 2. การแทรกภาพในตาราง 3. การตกแต่งข้อมูลด้วย Format Cells 4. การคำนวณ บวก ลบ คูณ หาร 5. การย่อ.
ประเภทของ CRM. OPERATIONAL CRM เป็น CRM ที่ให้การสนับสนุนแก่กระบวนการธุรกิจ ที่เป็น “FRONT OFFICE” ต่างๆ อาทิ การขาย การตลาด และการ ให้บริการ SALES FORCE.
คำสั่งควบคุมการทำงาน
Project Management by Gantt Chart & PERT Diagram
Microsoft Access 2007 การสร้างฟอร์ม
Burin Rujjanapan Updated:
อาจารย์อภิพงศ์ ปิงยศ บทที่ 3 : รูปแบบการเชื่อมต่อเครือข่ายและส่วนประกอบของเครือข่ายท้องถิ่น (Topologies and LAN Components) Part3.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การทำ Normalization 14/11/61.
IP-Addressing and Subneting
Number system (Review)
โครงสร้างข้อมูลและอัลกอริทึมเบื้องต้น
บทที่ 1 สถาปัตยกรรมของระบบฐานข้อมูล (Database Architecture)
Trees (2) University of Phayao Sanchai Yeewiyom
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
BC320 Introduction to Computer Programming
การบัญชีต้นทุนช่วง (Process Costing).
QUEUE คิวจะมีโครงสร้างแบบเชิงเส้นเหมือน stack แต่แตกต่างตรงที่ queue มีตัวชี้ 2 ตัวคือ หัว(Head) และหาง(Tail) โดยการใส่ข้อมูลเข้าและนำข้อมูลออก จะมีลักษณะ.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
ทฤษฎีการวางเงื่อนไข แบบการกระทำ (Operant Conditioning Theory)
ชุดที่ 1 ไป เมนูรอง.
คำสั่ง Create , Insert, Delete, Update
ขั้นตอนการออกแบบ ผังงาน (Flow Chart)
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
วิธีการกำหนดค่า Microsoft SharePoint ของคุณ เว็บไซต์ออนไลน์
Data storage II Introduction to Computer Science ( )
ต้นไม้เอวีแอล (AVL Tree)
บริษัท พัฒนาวิชาการ (2535) จำกัด
SMS News Distribute Service
โครงสร้างข้อมูลแบบสแตก (stack)
บทที่7 ทฤษฎีกราฟเบื้องต้น
ผลการเรียนรู้ 1. สามารถบอกความหมายของการสืบค้นข้อมูลได้ 2. สามารถบอกประเภทของการสืบค้นข้อมูลได้ 3. สามารถตรวจสอบความน่าเชื่อถือของข้อมูลได้
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Data storage II Introduction to Computer Science ( )
สาขาวิชาคอมพิวเตอร์ธุรกิจ โดย อาจารย์กิตติพงษ์ ภู่พัฒน์วิบูลย์
BASIC STATISTICS MEAN / MODE / MEDIAN / SD / CV.
หน่วยที่ 6 อะเรย์ของอักขระ
บทที่ 9 การเรียงลำดับข้อมูล (Sorting)
Data Structures and Algorithms 2/2561
บทที่ 7 การประมวลผลอาร์เรย์
หลักเกณฑ์การเก็บรักษาข้อมูลจราจรทางคอมพิวเตอร์ ของผู้ให้บริการ
Tree.
OPERATOR ภาษาปาสคาล (Pascal)
ค่ารูรับแสง - F/Stop ค่ารูรับแสงที่มีค่าตัวเลขต่ำใกล้เคียง 1 มากเท่าไหร่ ค่าของรูรับแสงนั้นก็ยิ่งมีความกว้างมาก เพราะเราเปรียบเทียบค่าความสว่างที่ 1:1.
2 โครงสร้างข้อมูลแบบสแตก (STACK).
3 โครงสร้างข้อมูลแบบคิว (QUEUE).
บทที่ 2 โครงสร้างข้อมูลแบบแถวลำดับหรืออาร์เรย์ (Array)
Array: One Dimension Programming I 9.
การเขียนโปรแกรมด้วยภาษาไพทอน การเขียนโปรแกรมแบบทางเลือก
การขายและการตลาดสำหรับธุรกิจโรงแรมและที่พัก
บทที่ 5 พัลส์เทคนิค
Decision: Single and Double Selection (if and if-else statement)
กระดาษทำการ (หลักการและภาคปฏิบัติ)
ใบสำเนางานนำเสนอ:

Data Structure and Algorithms Chapter 1 Chapter 7 ต้นไม้ (Tree) 235012 Data Structure and Algorithms

โครงสร้างทั่วไปของต้นไม้ Non-Linear Data Structure Hierarchical Relationship Root - จุดยอดของต้นไม้ Node - จุดที่มีการแตกกิ่งก้านสาขาออกไป Branch or Link - กิ่งก้านสาขาที่เชื่อมต่อระหว่างโหนด

ลักษณะของโครงสร้างข้อมูลแบบต้นไม้ Root Node Branch/ Link

การเรียกชื่อส่วนต่างๆ ของต้นไม้ โหนดราก (Root Node) โหนดแรกของต้นไม้ โหนดแม่(Parent Node) node ที่มี degree > 0 โหนดลูก Children) node ที่อยู่ลำดับล่างของอีกโหนดหนึ่ง โหนดพี่น้อง (sibling) โหนดที่อยู่ในระดับเดียวกันมีโหนดแม่ร่วมกัน โหนดใบ (Leaf Node) node ที่มี degree = 0

การเรียกชื่อส่วนต่างๆ ของต้นไม้ ระดับ Level ระยะทางจาก ราก จนถึงโหนดนั้นๆ ความสูง (height) หรือ ความลึก (depth) ระดับสูงสุดของโหนดใบ บวกด้วย 1 ส่วนย่อยของต้นไม้ (Sub trees) โหนดที่อยู่ในตำแหน่งสืบทอดของโหนดที่เป็นราก

ส่วนย่อยของต้นไม้ (Sub-Tree) ทุกโหนดเป็น root ของ sub-tree ของตัวมันเอง R เป็น root ของ subtree A,B,C,D A เป็น root ของ subtree E,F,G F เป็น root ของ subtree J C เป็น subtree ที่มีแต่ root C

Root Parents Leaves Children sibling (A) (B) (H) (C) (E)

ต้นไม้แบบทวิภาค (Binary Tree) Tree ที่แต่ละ node มีจำนวน sub tree <= 2 (แต่ละ node มี degree <= 2 )

Empty หรือ Null Tree

Fig.A Fig.B 1 1 2 3 2 4 4 3 4 2 3 4 4

ต้นไม้สำหรับค้นหาแบบทวิภาค (Binary Search Tree) 7 5 12 1 3 9 17

การแทนต้นไม้แบบทวิภาคในคอมพิวเตอร์ การแทนโดยอาศัยอาร์เรย์ ใช้อาร์เรย์ 3 อาร์เรย์ในการจัดเก็บ ใช้อาร์เรย์ 1 มิติอาร์เรย์เดียวในการจัดเก็บ การแทนโดยอาศัย Linklisted

การแทนโดยใช้อาร์เรย์ 3 อาร์เรย์ในการจัดเก็บ จะใช้อาร์เรย์ที่มีขนาดเท่ากันจำนวน 3 ชุด คือ data – เก็บข้อมูลในแต่ละ node left – เก็บตำแหน่งของ node ลูกทางด้านซ้ายมือ right – เก็บตำแหน่งของ node ลูกทางด้านขวามือ ถ้า node ใดไม่มี node ลูก ให้เก็บค่า 0 (แทน NULL) และใช้ตัวแปร root เก็บตำแหน่งของ node แรกใน tree

A B C D E F G H root data left right 1 1 A 2 3 2 B 6 4 3 C 7 4 E 8 5 5 ตัวอย่าง ข้อมูลในหน่วยความจำ General binary tree root data left right A 1 1 A 2 3 2 B 6 4 B C 3 C 7 4 E 8 5 5 H D E F 6 D 7 F G H 8 G

การแทนโดยใช้อาร์เรย์ 1 มิติอาร์เรย์เดียวในการจัดเก็บ กำหนดตำแหน่งช่องในอาร์เรย์ให้แต่ละ node โดย เริ่มตั้งแต่ level 0 , 1 , … , k ตามลำดับ แต่ละ level จะเริ่มจาก node ทางด้านซ้ายสุดไปถึงโหนดทางขวาสุด ตามลำดับ ลักษณะเป็นการนับช่องจากบนลงล่าง, ซ้ายไปขวา การกำหนดตำแหน่งเช่นนี้จะไม่สนใจว่ามีข้อมูลของโหนดนั้นจริงหรือไม่ (Fix ตำแหน่งอาร์เรย์ไว้)

ตัวอย่าง general binary tree A B C D E G F H I 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ข้อมูลในหน่วยความจำ A B C D E - F G H I 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

จะได้ความสัมพันธ์ระหว่าง tree และ อาร์เรย์ ดังนี้ ถ้า binary tree มีความสูงเท่ากับ h จะต้องใช้อาร์เรย์ที่มีขนาด 2h – 1 ในการจัดเก็บ parent ของโหนด i ใดๆ จะอยู่ที่ตำแหน่ง i/2 ถ้า i ไม่เท่ากับ 1 left child ของโหนด i ใดๆ จะอยู่ที่ตำแหน่ง 2i right child ของโหนด i ใดๆ จะอยู่ที่ตำแหน่ง 2i + 1

การแทนโดยอาศัย link listed เป็นวิธีการจัดเก็บที่มีประสิทธิภาพ เนื่องจากไม่เกิดปัญหาการจองข้อมูลมากหรือน้อยเกินไป โดยข้อมูลแต่ละ node ของ tree จะประกอบไปด้วย data – เก็บข้อมูลในแต่ละ node Lptr – เก็บ address ของ node ลูกทางด้านซ้ายมือ Rptr – เก็บ address ของ node ลูกทางด้านขวามือ

ตัวอย่าง

ใช้อาร์เรย์ที่มีขนาดเท่ากันจำนวน 3 ชุด Assignment : จงเขียนภาพแสดงการจัดเก็บข้อมูลในหน่วยความจำ Binary Tree ด้วยวิธีต่อไปนี้ ใช้อาร์เรย์ที่มีขนาดเท่ากันจำนวน 3 ชุด ใช้อาร์เรย์ 1 มิติอาร์เรย์เดียวในการจัดเก็บ การแทนโดยอาศัย link-listed

เฉลย !!! root data left right 5 5 A 4 3 4 B 2 1 3 C -1 2 D -1 -1 1 E ใช้อาร์เรย์ที่มีขนาดเท่ากันจำนวน 3 ชุด root data left right 5 5 A 4 3 4 B 2 1 3 C -1 2 D -1 -1 1 E -1 -1 F -1 -1 เฉลย !!! ใช้อาร์เรย์ 1 มิติอาร์เรย์เดียวในการจัดเก็บ A B C D E F

เฉลย !!! การแทนโดยอาศัย link-listed  A  B  C null null D null E F เฉลย !!!

ใช้อาร์เรย์ที่มีขนาดเท่ากันจำนวน 3 ชุด Assignment : จงเขียนภาพแสดงการจัดเก็บข้อมูลในหน่วยความจำ Binary Tree ด้วยวิธีต่อไปนี้ ใช้อาร์เรย์ที่มีขนาดเท่ากันจำนวน 3 ชุด ใช้อาร์เรย์ 1 มิติอาร์เรย์เดียวในการจัดเก็บ การแทนโดยอาศัย pointer

เฉลย !!! root data left right 2 1 7 2 5 3 2 4 6 5 9 6 5 7 11 8 4 จากการข้อมูลในอาร์เรย์ต่อไปนี้ เขียนเป็นโครงสร้างข้อมูล Binary Tree ได้อย่างไร root data left right 2 1 7 2 5 3 2 4 6 5 9 6 5 เฉลย !!! 7 11 8 4

จากการข้อมูลในอาร์เรย์ต่อไปนี้ เขียนเป็นโครงสร้างข้อมูล Binary Tree ได้อย่างไร เฉลย !!! 2 7 5 6 9 11 4

ต้นไม้แบบทวิภาค (Binary tree) Binary tree traversals Expression Tree Binary Search Tree (BST) AVL Tree Heaps

ต้นไม้แบบทวิภาค (binary tree) หมายถึง tree ที่แต่ละ node มีจำนวน subtree <= 2 ( แต่ละ node มี degree <= 2 )

Empty หรือ Null Tree

Complete และ Nearly Complete Binary Tree

Binary tree traversals 1. Depth-first traversals เป็นการท่องเข้าไปในทรีด้วยการเดินทางจากรูทโหนดไปยังโหนดลูก ๆ 2. Breath-first traversals ประมวลผลทีละ Level จากบนลงล่าง

Depth-first traversals มีการบัญญัติคำย่อเพื่อใช้งานดังนี้ N แทน root node L แทน left sub tree R แทน right sub tree มี 3 วิธีที่นิยมใช้กันอย่างแพร่หลาย Pre-order traversals In-order traversals Post-order traversals

Depth-first tarversals N L R L N R L R N

แบบ Pre-order 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

แบบ Pre-Order Traversal N L R R X A D C G start stop Y Result R A C D X Y G

แบบ 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

แบบ In-Order Traversal L N R R X A D G start stop C Y Result C A D R G Y X

แบบ Post-order 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

แบบ Post-Order Traversal L R N start R stop A X C D Y G Result C D A G Y X R

Pre-order – NLR In-order – LNR Post-order - LRN A B C D G E F H I A B

Pre-order – NLR In-order – LNR Post-order - LRN 2 7 2 6 5 5 9 4 2 7 5 11 5 9 4 2 7 5 6 11 2 5 4 9 2 5 11 6 7 4 9 5 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

A B C D G E F H I Breath-first A B C D E F G H I

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

ตัวอย่าง

การท่องใน Expression Tree 1. Pre-order Traversal 2. Post-order Traversal 3. In-order Traversal Prefix Expression Postfix Expression Infix Expression

Pre-order 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

Post-order 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 +

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 )

Pre-fix Expression (NLR) Assignment + A - * D B C จงหา Expression ของ Binary Tree นี้ Pre-fix Expression (NLR) Infix Expression (LNR) Postfix Expression (LRN) + A - * B C D A + B * C - D A B C * D - +

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

การแปลง General Tree เป็น Binary Tree ขั้นตอน 1. ระบุ chide ที่อยู่ด้านซ้ายสุด 2. ให้เชื่อม node ที่มีพ่อเดียวกัน ( node พี่น้อง) เข้าด้วยกัน - ลบเส้นเชื่อมโยงจาก node ที่เป็นพ่อไปยังลูก ๆ ออกให้หมด ยกเว้น ลูกที่อยู่ตำแหน่งซ้ายสุด 3. เลือก son ทางซ้ายและขวา ของแต่ละ node - son ทางซ้าย คือ node ที่อยู่ใต้ node นั้น - son ทางขวา คือ node ที่อยู่ข้าง ๆ (ระดับเดียวกัน / Brother )

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

การแปลง Tree ไปเป็น Binary Tree เริ่มต้น A B D E F G T C H 1.ให้เชื่อม node ที่มีพ่อเดียวกัน ( node พี่น้อง) เข้าด้วยกัน

ขั้นที่ 1 A D B C T G H F E 1.ให้เชื่อม node ที่มีพ่อเดียวกัน ( node พี่น้อง) เข้าด้วยกัน

ขั้นที่ 1-1 A D B C T G H F E 1. ลบเส้นเชื่อมโยงจาก node ที่เป็นพ่อไปยัง ลูก ๆ ออกให้หมด ยกเว้น ลูกที่อยู่ตำแหน่งซ้ายสุด

A B C E D F G H T ขั้นที่ 2 เลือก son ทางซ้ายและขวา ของแต่ละ node - son ทางซ้าย คือ node ที่อยู่ใต้ node นั้น - son ทางขวา คือ node ที่อยู่ข้าง ๆ (ระดับเดียวกัน / Brother )

แบบฝึกหัด จงแปลง Tree ให้เป็น Binary Tree 1 2 6 10 7 3 4 5 8 9

แบบฝึกหัด-เฉลย จงแปลง Tree ให้เป็น Binary Tree 1 2 6 10 7 3 4 5 8 9

Binary Search Tree เป็น binary tree ที่มีคุณสมบัติพิเศษ คือ ทุก node ของ subtree ทางซ้ายมีค่าน้อยกว่า root ทุก node ของ subtree ทางขวามีค่ามากกว่าหรือเท่ากับ root ทุก ๆ subtree เป็น binary search tree >

ตัวอย่าง Binary Search Tree ที่ถูกต้อง

ตัวอย่าง Binary Search Tree ที่ไม่ถูกต้อง

ประโยชน์ของ Binary Search Tree ต้องการค้นหาข้อมูล 1 ตัวจากข้อมูลทั้งหมด 100,000 ตัว เก็บในอาร์เรย์ : อาจต้องค้นหา 100,000 ครั้ง ค้นหาในอาร์เรย์ทีละช่อง เก็บใน BST : ลดจำนวนการค้นหาลงได้สูงสุดเหลือเพียง 17 ครั้ง(โดยประมาณ) ถ้า root แบ่งข้อมูลเป็น 2 ส่วนเท่าๆกัน ค้นครั้งที่ 1 เหลือข้อมูล ½ ค้นครั้งที่ 2 เหลือข้อมูล ¼ ...

สิ่งที่ควรทราบเพิ่มเติมเกี่ยวกับ binary search tree ถ้าเป็น BST ที่ลูกทางด้านซ้ายมีค่าน้อยกว่าพ่อแม่ เรา สามารถใช้ inorder traversal เพื่อหาข้อมูลที่เรียงลำดับกัน ได้ ถ้าต้องการหาข้อมูลที่มีค่าน้อยที่สุด สามารถหาได้ leaf ที่ อยู่ทางด้านซ้ายสุดของทรี หรือจะเท่ากับ root ของ subtree ทางด้านซ้ายสุด ถ้ากรณี subtree นั้นไม่มีโหนด ลูกทางด้านซ้าย ในทำนองเดียวกัน เราก็สามารถหาข้อมูลที่มีค่ามากที่สุดได้ เช่นเดียวกัน

operation ที่ต้องทำใน BST BST มี operation ที่สำคัญอยู่ 2 operation คือ การเพิ่มโหนด เพิ่มแล้วโหนดใหม่ต้องเป็น Leaf เท่านั้น เพิ่มในตำแหน่งที่ยังคงคุณสมบัติของ Binary Search Tree ไว้ การลบโหนด

ตัวอย่าง การเพิ่มข้อมูลใน Binary Search Tree

การลบโหนด ใน BST ต้องพิจารณาว่า Node ที่จะลบนั้นตรงกับกรณี 1. ไม่มี Child 2. มีเฉพาะ Right Subtree 3. มีเฉพาะ Left Subtree 4. มีทั้ง Left และ Right Subtree <== ลบได้เลย <== ดึง Right Subtree ขึ้นมา <== ดึง Left Subtree ขึ้นมา นำค่าที่มากที่สุดของ Left Subtree มาแทน

ตัวอย่าง กรณีที่ 1 ไม่มีโหนดลูก 23 18 X 44 before delete 44 23 X 18 after delete 44

ตัวอย่าง กรณีที่ 2 มีเฉพาะ right subtree 23 18 X 44 before delete 44 46 58 after delete 44 23 18 X 46 58

ตัวอย่าง กรณีที่ 3 มีเฉพาะ left subtree 23 18 X 44 before delete 44 36 28 23 18 X after delete 44 36 28

ตัวอย่าง กรณีที่ 4 มีโหนดลูกทั้ง 2 ข้าง 23 18 44 X before delete 23 20 10 20 18 X 44 after delete 23 10

การสร้าง BST insert 10 insert 15 insert 8 10 X 10 X 15 10 15 X 8 เช่น 10 15 8 14 13 12 insert 10 insert 15 insert 8 10 X 10 X 15 10 15 X 8

insert 14 10 15 X 8 14 insert 12 10 15 X 8 14 13 12 insert 13 10 15 X 8 14 13

ตัวอย่าง 65 40 75 30 55 35 70 95 80 65 40 75 30 55 70 95 35 80

ADD 40 ซ้ำ !! 1. ทิ้งไปเลย 65 40 75 30 55 70 95 35 80

2 . เก็บความถี่ Node ที่ซ้ำ ADD 40 2 . เก็บความถี่ Node ที่ซ้ำ 65 ซ้ำ !! 2 40 75 30 55 70 95 35 80

ADD 40 3. ใช้ Link list มาเชื่อม 65 40 40 75 ซ้ำ !! 30 55 70 95 35 80

แบบฝึกหัด สร้าง Binary Search Tree จากการ Add ข้อมูลตามลำดับ 65 40 30 70 75 55 35 95 80

คุณภาพของ BST ขึ้นอยู่กับการกระจายค่าของข้อมูล เช่น ชุดข้อมูล 10 12 18 24 35 10 X 12 18 24 25

ข้อเสีย : ความเร็วในการค้นหาข้อมูลจะแย่ (กรณีแย่ ที่สุดคือต้องเปรียบเทียบ n ครั้ง) ปี 1960 นักคณิตศาสตร์ชาวรัสเซียได้พัฒนาเทคนิคใน การจัดรูปแบบของ BST โดยปรับแต่งโหนดให้สมดุล หรือเกือบสมดุล ทุกครั้งที่มีการเพิ่มหรือลบข้อมูล และ ยังคงคุณสมบัติของ BST อยู่ เรียกต้นไม้ชนิดนี้ว่า AVL tree หรือ ต้นไม้ความสูงสมดุล

AVL tree (Adel’son, Vel’skii and Landis) Height-balanced binary search tree หรือ ต้นไม้ความ สูงสมดุล คือ BST ชนิดหนึ่งที่มีคุณสมบัติเพิ่มเติมคือ ทุก subtree มี balance factor (bf) แตกต่างกันไม่เกิน 1 [-1, 0, +1] bf คือ ความสูงของ left subtree ลบด้วย ความสูงของ right subtree bf = | HL - HR | | bf | <= 1

-7 1 -6 1 -1 -5 -4 -3 -2 -1

AVL tree unbalanced BST

การเพิ่ม , ลบโหนดออกจาก AVL Tree ใช้วิธีการเดียวกันกับการเพิ่ม , ลบ โหนดจาก BST การเพิ่ม – เพิ่มที่ตำแหน่งที่เป็น leaf เท่านั้น การลบ – มี 4 กรณี หลังจากเพิ่ม – ลบ โหนดทุกๆ ครั้ง ต้องสร้าง Balancing Tree เพื่อคงคุณสมบัติของ AVL Tree

Balancing Tree (หลักการทำต้นไม้ให้สมดุล) คือการปรับต้นไม้ที่ไม่เป็น AVL tree ให้เป็น AVL tree ( | bf | <= 1 , | HL - HR | <= 1 ) เกิดขึ้นทุกครั้งหลังการเพิ่มหรือลบโหนด ซึ่งทำให้ต้นไม้ ขาดคุณสมบัติของ AVL tree ไป มีกรณีที่ต้องจำอยู่ 4 กรณี คือ - SLR (single left rotation) - SRR (single right rotation) - DLR (double left rotation) - DRR (double right rotation)

SLR (single left rotation) ใช้ในกรณีที่โหนดล่างสุด ที่ไม่สมดุลมี bf = -2 (right subtree ของโหนดนี้สูงกว่า left subtree อยู่ 2) ดังนั้นจึงต้องมีการหมุนไปทางซ้าย และโหนดลูกทางด้านขวาของโหนดข้างบนมี bf = -1 (right subtree ของโหนดนี้ก็ยังสูงกว่า left subtree อยู่ 1) ซึ่งหมายความว่าต้นไม้มีการเอียงไปทางด้านขวา ตลอด ดังนั้นจึงหมุนไปทางซ้ายแค่ครั้งเดียว

เปลี่ยนตำแหน่งของ subtree B กรณีมี 3 โหนด (-2) (0) 10 20 (-1) 20 (0) (0) (0) 30 10 30 เปลี่ยนตำแหน่งของ subtree B กรณีทั่วไป (-2) 10 (-1) (0) 20 20 A (0) (-1,1) (-1,1) 30 10 30 B C D A B C D

SLR

SRR (single right rotation) ใช้ในกรณีที่โหนดล่างสุดที่ไม่สมดุลมี bf = 2 (left subtree ของโหนดนี้สูงกว่า right subtree อยู่ 2) ดังนั้นจึงต้องมีการหมุนไปทางขวา และโหนดลูกทางด้านซ้ายของโหนดนี้มี bf = 1 (left subtree ของโหนดนี้ก็ยังสูงกว่า right subtree อยู่ 1) ซึ่งหมายความว่าต้นไม้มีการเอียงไปทางด้านซ้าย ตลอด ดังนั้นจึงหมุนไปทางขวาแค่ครั้งเดียว

เปลี่ยนตำแหน่งของ subtree C กรณีมี 3 โหนด (2) 30 (0) 20 (1) 20 (0) (0) (0) 10 10 30 กรณีทั่วไป เปลี่ยนตำแหน่งของ subtree C (2) 30 (1) (0) 20 20 D (0) (-1,1) (-1,1) 10 30 10 C A A C B B D

SRR

DLR (double left rotation) ใช้ในกรณีที่โหนดล่างสุด ที่ไม่สมดุลมี bf = -2 (right subtree ของโหนดนี้สูงกว่า left subtree อยู่ 2) ดังนั้นจึงต้องมีการหมุนไปทางซ้าย แต่โหนดลูกทางด้านขวาของโหนดข้างบน มี bf = 1 (right subtree ของโหนดลูกกลับต่ำกว่า left subtree อยู่ 1) ซึ่งหมายความว่าต้นไม้มีการ เอียงไปทางด้านขวาและด้านซ้าย ดังนั้นจึงหมุน ไปทางซ้าย 2 ครั้ง

เปลี่ยนตำแหน่งของ subtree B,C กรณีมี 3 โหนด (-2) 10 (0) 20 (1) 30 (0) (0) (0) 20 10 30 เปลี่ยนตำแหน่งของ subtree B,C กรณีทั่วไป (-2) 10 (1) (0) 30 20 A (1,0) (0,-1) (-1,1) 20 10 30 D B C A C D B

DLR case ที่ 1

DLR + case ที่ 2

DRR (double right rotation) ใช้ในกรณีที่โหนดล่างสุดที่ไม่สมดุลมี bf = 2 (left subtree ของโหนดนี้สูงกว่า right subtree อยู่ 2) ดังนั้นจึงต้องมีการหมุนไปทางขวา แต่โหนดลูกทางด้านซ้ายของโหนดนี้ มี bf = -1 (left subtree ของโหนดนี้กลับต่ำกว่า right subtree อยู่ 1) ซึ่งหมายความว่าต้นไม้มีการเอียงไปทางด้านซ้ายและ ด้านขวา ดังนั้นจึงหมุนไปทางขวา 2 ครั้ง

เปลี่ยนตำแหน่งของ subtree B,C กรณีมี 3 โหนด (2) 30 (0) 20 (-1) 10 (0) (0) (0) 20 10 30 เปลี่ยนตำแหน่งของ subtree B,C กรณีทั่วไป (2) 30 (-1) (0) 20 10 D (0,1) (-1,0) (1,-1) 10 30 A 20 A C C B D B

DRR case ที่ 1

DRR case ที่ 2

Heaps หัวข้อวันนี้ Heaps โครงสร้างของ heap heap operation Reheap Up , Reheap Down การแทน heap ในหน่วยความจำ heap sort (application of heap) ข้อดีของ heap sort

Heap คือ binary tree ที่มีคุณสมบัติ คือ แต่ละ subtree ค่าของ root >= child เสมอ  (Max-heap) หรือ แต่ละ subtree ค่าของ root <= child เสมอ  (Min-heap) เป็น complete binary tree หรือ nearly complete binary tree Heap ไม่ใช่ binary search tree

ต้นไม้ทวิภาคแบบสมบูรณ์ (complete binary tree) คือ binary tree ที่มี node เต็มทุก level (ทุก node ที่ไม่ใช่ leaf มี child ทั้งด้านซ้ายและด้านขวา) nearly complete binary tree คือ binary tree ที่มี node เต็มทุก level ยกเว้น level สุดท้าย และ node ใน level สุดท้ายอยู่เรียงกันทางซ้ายมือ

โครงสร้างของ Max-heap ค่าที่มากที่สุดอยู่ที่ root เสมอ < <

โครงสร้างของ Min-heap ค่าที่น้อยที่สุดอยู่ที่ root เสมอ > >

ตัวอย่าง Heap ที่ถูกต้อง

ตัวอย่าง Tree ที่ไม่ใช่ Heap

Heap Operation 1. Insert & Reheap Up Insert โหนดใหม่ที่ level ล่างสุด ณ ตำแหน่งว่างด้านซ้ายสุด (ทำให้ยังคงสภาพของ nearly complete หรือ complete binary tree อยู่) Reheap Up ปรับ tree หลังจาก insert ให้เป็น heap 2. Delete & Reheap Down Delete ที่ Root เท่านั้น และนำ Node ที่ level ล่างสุดตำแหน่งขวาสุดขึ้นมาแทน (ทำให้ยังคงสภาพของ nearly complete หรือ complete binary tree อยู่) Reheap Down ปรับ tree หลังจาก delete ให้เป็น heap

Reheap Up สลับที่ระหว่างโหนดที่ insert เข้ามากับ Parent ของมันเองตามหลักของ heap ทำซ้ำกับโหนดเดิมจนกว่าจะอยู่ตำแหน่งที่ถูกต้อง a heap

ตัวอย่าง

Reheap Down สลับที่ระหว่างโหนดที่ตำแหน่ง root (โหนดที่พึ่งสลับที่มาหลังจาก delete) กับโหนดลูกของมันเองจนกว่าโหนดนั้นจะอยู่ตำแหน่งที่ถูกต้อง (เลือกโหนดลูกตามหลักของ heap) ทำซ้ำจนกว่า root จะอยู่ตำแหน่งที่ถูกต้อง a heap

ตัวอย่าง Delete

การแทน heap ในหน่วยความจำ นิยมแทน heap ลงในอาร์เรย์ 1 มิติ เนื่องจากคุณสมบัติของการเป็น nearly complete ของตัวมันเอง ข้อมูลที่จัดเก็บลงในอาร์เรย์จะเรียงต่อกันไปตามลำดับจากซ้ายไปขวาของแต่ละ level ใน heap จะได้ความสัมพันธ์ของตำแหน่งข้อมูลใน heap คือ parent ของโหนด i ใดๆ = i/2 ถ้า i <> 1 left child ของโหนด i ใดๆ = 2i right child ของโหนด i ใดๆ = 2i + 1

[1] [2] [3] [4] [5] [6] [7] [1] [2] [3] [4] [1] [5] [6] [7]

Heap sort (Application of heap) สำหรับ heap ข้อมูลที่มีค่าสูงสุด/ต่ำสุดจะเก็บอยู่ที root คุณสมบัติดังกล่าว + ลักษณะการเก็บข้อมูล สามารถนำมาช่วยในการเรียงลำดับข้อมูลได้ นำข้อมูลเข้าในลักษณะของ heap จนหมด delete ทีละโหนด จนหมด ข้อมูลที่ delete จะสลับที่กับโหนดสุดท้ายแทน ลำดับของข้อมูลที่ delete เรียงจาก มาก -> น้อย ค่าในอาร์เรย์ เรียงจาก น้อย -> มาก

กำหนดให้ข้อมูลนำเข้าคือ 14 , 70 , 32 , 100 , 65 , 56 ขั้นที่ 1 นำข้อมูลเข้า heap ทีละโหนดจนหมด 1. insert 14 2. insert 70 3. reheap up 14 70 70 14 14 4. insert 32 5. insert 100 6. reheap up 70 14 32 70 14 32 100 100 70 32 14

7. insert 56 7. insert 65 100 70 32 14 65 56 100 70 32 14 65 8. reheap up 100 70 56 14 65 32 ในหน่วยความจำ 100 70 56 14 65 32

ขั้นที่ 2 delete ข้อมูลทีละโหนดจนหมด (สลับกับโหนดสุดท้ายแทนตัดจาก heap ) 2. reheap down 32 70 56 14 65 100 70 65 56 14 32 100 3. delete 70 4. reheap down 32 65 56 14 70 100 65 32 56 14 70 100

5. delete 65 6. reheap down 14 32 56 65 70 100 56 32 14 65 70 100 7. delete 56 8. reheap down 14 32 56 65 70 100 32 14 56 65 70 100

9. delete 32 14 32 56 65 70 100 เหลือโหนดเดียว ไม่ต้องปรับ heap 10. delete 14 14 32 56 65 70 100 สิ้นสุดการทำงาน ข้อมูลเรียงลำดับแล้ว

[1] [2] [3] [4] [5] [6] ขั้นที่ 1 สร้าง heap 1. insert 14 14 ดังนั้นจากตัวอย่างข้างต้น สิ่งที่จะเกิดในหน่วยความจำจะเป็นการเปลี่ยนแปลงค่าข้อมูลในอาร์เรย์แทน [1] [2] [3] [4] [5] [6] ขั้นที่ 1 สร้าง heap 1. insert 14 14 2. insert 70 70 3. reheap up

[1] [2] [3] [4] [5] [6] 4. insert 32 70 14 32 5. insert 100 100 6. reheap up 7. insert 65 65 8. insert 56 56 9. reheap up ขั้นที่ 2 delete heap 1. สลับ 100 กับ 32 2. ปรับ heap

[1] [2] [3] [4] [5] [6] 3. สลับ 70 กับ 32 32 65 56 14 70 100 4. ปรับ heap 5. สลับ 65 กับ 14 6. ปรับ heap 7. สลับ 56 กับ 14 8. ปรับ heap 9. สลับ 32 กับ 14 10. ปรับ heap 11. สิ้นสุดการเรียงลำดับ

การบ้าน 1. จงสร้าง min-heap จากข้อมูลต่อไปนี้ 23 15 17 13 31 10 2 4 29 14 5 2. จงแสดงวิธีการลบข้อมูลจาก min-heap ที่ได้จากข้อ 1 ทีละขั้นตอน