งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ. เหมรัศมิ์ วชิรหัตถพงศ์ คณะวิทยาการสารสนเทศ มหาวิทยาลัยบูรพา 1.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ. เหมรัศมิ์ วชิรหัตถพงศ์ คณะวิทยาการสารสนเทศ มหาวิทยาลัยบูรพา 1."— ใบสำเนางานนำเสนอ:

1 Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ. เหมรัศมิ์ วชิรหัตถพงศ์ คณะวิทยาการสารสนเทศ มหาวิทยาลัยบูรพา 1

2 2 Terminology  ต้นไม้ (Tree) ประกอบด้วย 1.Node ใช้เก็บข้อมูล 2.Branch ใช้เชื่อม Node เข้าด้วยกัน A BC NodeA, B, C BranchAB, AC NodeA, B, C BranchAB, AC

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

4 4  Root หมายถึง Node แรกของ Tree A BC Root Terminology

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

6 6  Leaf หรือ External node หมายถึง Node ที่มี Outdegree เท่ากับ 0 A BC LeafB, C

7 7  Internal node หมายถึง Node ที่ไม่ใช่ Root และ Leaf A BC DE RootA LeafD, E, C Internal nodeB RootA LeafD, E, C Internal nodeB

8 8  Parent หมายถึง Node ที่มี Outdegree A BC DE ParentA, B

9 9  Child หมายถึง Node ที่มี Indegree A BC DE ChildB, C, D, E

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

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

12 12  Ancestor หมายถึง ทุก Node ในเส้นทางจาก Root ไป ยัง Node ที่ต้องการ A BC DE Ancestor ของ EA, B Ancestor ของ EA, B

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

14 14  Level หมายถึง ระยะทางจาก Root A BC DE Leve l 0 Leve l 1 Leve l 2

15 15  Height ของ Tree หมายถึง Level สูงสุด ของ Leaf บวกด้วย 1 Level 0 A BC DE Level 1 Level 2 Height = = 3 Height = = 3

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

17 17 Parents Children Siblings Leaves Internal nodes Ancestor of G Descendent of A Height 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

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

19 19 Subtree

20 20 1. จากต้นไม้ต่อไปนี้ จงหา 1.1 Root1.2 Leaves1.3 Internal nodes 1.4 Ancestors of H 1.5 Descendents of F แบบฝึกหัด

21 21 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

22 22 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

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

24 24 ตัวอย่าง Binary Tree

25 25 Emptyหรือ Null Tree

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

27 27 คำถามที่ 2 Tree ที่มี Height = จะมี Node สูงสุดได้เท่าไร อย่างไร 2.2 จะมี Node ต่ำสุดได้เท่าไร อย่างไร N max =2 H - 1 N min =H N max =2 H - 1 N min =H

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

29 29 Complete และ Nearly Complete Binary Tree

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

31 31 Depth-first N L R L N R L R N

32 32 แบบ Preorder N L R วิธีการของ Preorder (val root ) 1 if (root is not null) 1 process(root) 2 preOrder(root- >leftSubtree) 3 preOrder(root- >rightSubtree) 2 return

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

34 34 แบบ Postorde r L R N algorithm postOrder (val root ) 1 if (root is not null) 1 postOrder(root- >leftSubtree) 2 postOrder(root- >rightSubtree) 3 process(root) 2 return

35 35 Breath-first algorithm breathFirst (val root ) 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

36 36 Binary Tree Application 1. Expression Tree 2. Huffman Code 3. Binary Search Tree

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

38 38 ตัวอย่าง

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

40 40 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

41 41 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

42 42 Inorder Traversal 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 )

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

44 44 AB + C * ( A + B ) * C ( 12 / 3 ) + ( 4 * ( 5 – 2 ) ) / + 4 * 52 -

45 45 นิพจน์ทางคณิตศาสตร์ สามารถเขียนได้ 3 รูปแบบ คือ infix, prefix, postfix เช่น (a + b) * c มี ◦ infix ◦ prefix ◦ postfix ซึ่งถ้าเราเปรียบเทียบกับ expression tree จะพบว่า ◦ inorder traversal (LNR) ◦ preorder traversal (NLR) ◦ postorder traversal (LRN) expression tree Vs Traversal ab + c * (a + b) * c *+abc ab+c* (a + b) * c *+ab c ab+c * infi x pre fix pos tfix

46 46 สร้างนิพจน์ prefix จาก expression tree + * a + b c d algorithm prefix if (root is not null) print(root) prefix(root->leftSubtree) prefix(root- >rightSubtree) return algorithm prefix if (root is not null) print(root) prefix(root->leftSubtree) prefix(root- >rightSubtree) return

47 47 สร้างนิพจน์ postfix จาก expression tree a b c + * d + algorithm postfix if (root is not null) postfix(root->leftSubtree) postfix(root- >rightSubtree) print(root) return algorithm postfix if (root is not null) postfix(root->leftSubtree) postfix(root- >rightSubtree) print(root) return

48 48 algorithm infix if (root is not null) if root is operand if root is operand print(root) print(root) else else print(open parenthesis) print(open parenthesis) infix(root->leftSubtree) infix(root->leftSubtree) print(root) print(root) infix(root->rightSubtree) infix(root->rightSubtree) print(close parenthesis) print(close parenthesis)return algorithm infix if (root is not null) if root is operand if root is operand print(root) print(root) else else print(open parenthesis) print(open parenthesis) infix(root->leftSubtree) infix(root->leftSubtree) print(root) print(root) infix(root->rightSubtree) infix(root->rightSubtree) print(close parenthesis) print(close parenthesis)return สร้างนิพจน์ infix จาก expression tree ( ( a * ( b + c ) ) + d )

49 49 อ่านนิพจน์เข้ามาทีละตัวอักษร ถ้าข้อมูลที่อ่านเข้ามาเป็น operand สร้าง tree ใหม่จากข้อมูลที่อ่านเข้ามา ( เป็น tree ที่มีแค่โหนดเดียว ) push ลง stack ถ้าข้อมูลที่อ่านเข้ามาเป็น operator pop ขึ้นมา 2 tree เชื่อมเป็น tree ใหม่โดย ใช้ operator ที่อ่านเข้ามาเป็น root push ลง stack สร้าง expression tree จาก นิพจน์ postfix

50 50 a b c + * d + initial stack read a stack read b a a stack b

51 51 a b c + * d + read cread +read * stack a a b bc + bc + a * c

52 52 a b c + * d + read dread + stack เมื่อหมด ข้อมูล จะได้ผลลัพธ์ ว่า tree ที่อยู่ ในสแตกคือ expression tree stack bc + a * d d + bc + a *

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

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

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

56 56 Binary Search Tree :BST  นำเอา Binary Tree มาประยุกต์ใช้เพื่อค้นหา ข้อมูล  มีคุณสมบัติดังต่อไปนี้  ทุกๆ โหนดในซับทรีด้านซ้ายจะต้องมีค่าน้อย กว่ารูทโหนด  ทุกๆ โหนดในซับทรีด้านขวาจะต้องมีค่า มากกว่ารูทโหนด  แต่ละซับทรีจะต้องเป็นไบนารีเสิร์ซทรี

57 57 Binary Search Tree :BST (1) K AllK

58 58 ตัวอย่าง Binary Search Tree

59 59 การท่องไปใน BST  Preorder  Postorder  Inorder

60 60 การค้นหาโหนดที่มีค่าต่ำที่สุด  หาโหนดที่อยู่ด้านซ้ายสุดให้เจอ  Algorithm findSmallestBST(root)  1 if (left subtree empty)  1 return (root)  2 end if  3 return findSmallestBST(left subtree)  end findSmallestBST

61 61 การค้นหาโหนดที่มีค่าสูงที่สุด  หาโหนดที่อยู่ด้านขวาสุดให้เจอ  Algorithm findLargestBST(root)  1 if (right subtree empty)  1 return (root)  2 end if  3 return findSmallestBST(right subtree)  end findSmallestBST

62 62 END!


ดาวน์โหลด ppt Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ. เหมรัศมิ์ วชิรหัตถพงศ์ คณะวิทยาการสารสนเทศ มหาวิทยาลัยบูรพา 1.

งานนำเสนอที่คล้ายกัน


Ads by Google