Expression Tree Binary Tree Search

Post on 24-Feb-2016

96 views 1 download

description

Expression Tree Binary Tree Search. ExpressionTree เอ็กซ์ เพรส ชันท รี คือ อะไร. เอ็กซ์ เพรส ชันท รี เป็นการประยุกต์การใช้งาน จากไบนารีท รี มีหลักการทำงาน เหมือนไบนารีท รีแต่ เอ็กซ์ เพรส ชันท รีจะใช้เก็บนิพจน์ทางคณิตศาสตร์ โดย เอ็กซ์ เพรส ชันท รีมีข้อมูลด้วยกัน 2 ชนิด คือ - PowerPoint PPT Presentation

Transcript of Expression Tree Binary Tree Search

Expression Tree

Binary Tree Search

Expression Tree เอ็กซเ์พรสชนัทรี คือ อะไร

เอ็กซเ์พรสชนัทร ีเป็นการประยุกต์การใชง้านจากไบนารทีร ีมีหลักการทำางานเหมอืนไบนารทีรีแต่เอ็กซเ์พรสชนัทรจีะใชเ้ก็บนิพจน์ทางคณิตศาสตร์โดยเอ็กซเ์พรสชนัทรมีขีอ้มูลด้วยกัน 2 ชนิด คือ

Operand Operator

(โอเปอรแ์รนด์ ) (โอเปอรเ์รเตอร)์

Expression Tree ขอ้มูลใน เอ็กซเ์พรสชนัทรี

รูจ้กัขอ้มูลทั้ง 2 ชนิด โอเปอรแ์รนด์ คือ ตัวถกูดำาเนินการ(ตัวแปรหรอืค่าคงที)

เชน่ A B C D หรอื 1 3 5 7โอเปอรเ์รเตอร ์คือ เครื่องหมาย

การคำานวณต่างๆ เชน่เชน่ + - * /

Expression Tree คณุลักษณ์ของ เอ็กซเ์พรสชนัทรี

1 โอเปอรแ์รนด์ จะถกูเก็บไวท่ี้โหนดใบ

2 โอเปอรเ์รเตอร ์จะถกูเก็บไวท่ี้รูทโหนด หรอืโหนดอ่ืนท่ีไมใ่ชโ้หนดใบ

3 ซบัทร ีจะมรูีทโหนดเป็นตัวโอเปอรเ์รเตอร ์

Expression Tree คณุลักษณ์ของ เอ็กซเ์พรสชนัทรี

โอเปอรแ์รนด์ จะถกูเก็บไวท่ี้โหนดใบ

D

+

*

+

C

A

B

โอเปอร์แรนด์

Expression Tree คณุลักษณ์ของ เอ็กซเ์พรสชนัทรี

โอเปอรเ์รเตอร ์จะถกูเก็บไวท่ี้รูทโหนด หรอื โหนดอ่ืนท่ีไมใ่ช้โหนดใบ

D

+

*

+

C

A

B

โอเปอร์เร

เตอร์

Expression Tree คณุลักษณ์ของ เอ็กซเ์พรสชนัทรี

ซบัทร ีจะมรูีทโหนดเป็นตัวโอเปอรเ์รเตอร ์

D

+

*

+

C

A

B

จะมรีูทโหนดเป็น

เครื่องหมาย

Expression Tree การท่องไปใน เอ็กซเ์พรสชนัทรี

จะใชว้ธิเีดียวกันกับการท่องในไบนารทีร ี

แต่จะเรยีกต่างกัน 1. ในเอ็กซเ์พรสชนัทร ีPrefix ในไบนารทีร ี เรยีก

Preorder = NLR2. ในเอ็กซเ์พรสชนัทร ีInfix ในไบนารทีร ี

เรยีก Inorder = LNR3. ในเอ็กซเ์พรสชนัทร ีPostfix ในไบนารทีร ีเรยีก

Postorder = LRN* N คือ รากโหนด หรอื รูทโหนด (Root Node)

Expression Tree การท่องเอ็กซเ์พรสชนัทรี แบบ

Prefix

D

+

*

+

C

A

B

+* A+B C

DPrefix = NLR

Expression Tree การท่องเอ็กซเ์พรสชนัทรี แบบ

PostfixPostfix = LRN

D

+

*

+

C

A

B

AB C +* D +

Expression Tree การท่องเอ็กซเ์พรสชนัทรี แบบ

InfixInfix = LNR

D

+

*

+

C

A

B

((A*(B+C ))+D)

แบบทดสอบ Expression Tree

+

/-

A * ED

B C

13

การประยุกต์ใชง้าน Binary Tree ต้นไมข้องนิพจน์ทางคณิตศาสตร์ (Expression Tree)

• เราสามารถแทนนิพจน์ทางคณิตศาสตรด้์วย โครงสรา้งขอ้มูลแบบต้นไมไ้ด้ เชน่แทน ((A*B) + C) +

((D + (E / F)) - G)

ต้นไมข้องนิพจน์ทางคณิตศาสตร์ (Expression Tree)

• โหนดใบ (Leave) ของ Expression Tree คือOperands (ตัวถกูดำาเนินการ) ได้แก่ค่าคงที่(Constant) หรอืตัวแปร (Variable)

• โหนดอ่ืนๆบรรจุ Operators (ตัวดำาเนินการ)

การคำานวณหาค่าของ Expression Tree

หาค่าของ Infix expression (อาจรวมวงเล็บด้วย) ได้ โดย

• หาค่าของนิพจน์ทางคณิตศาสตร์ (Expression) พรอ้มวงเล็บ ของ subtree หรอื tree ทางด้านซา้ย

ด้วยวธิแีบบ recursive• แสดงค่า Operator ท่ี Root ของ subtree/tree

ออกมา• หาค่าของนิพจน์ทางคณิตศาสตร์ (Expression)

พรอ้มวงเล็บ ของ subtree หรอื tree ทางด้านขวา ด้วยวธิแีบบ recursive

• วธิกีารท่ีกระทำาการบนสมาชกิทางด้านซา้ยของ โหนดก่อนตัวโหนด แล้วตามการกระทำาบนสมาชกิ

ทางด้านขวาของโหนด (Left, Node, Right) น้ีเรยีก วา่ Inorder Traversal

การคำานวณหาค่าของ Expression Tree

Inorder Traversal (Left, Node, Right) ให้ Infix Expression ((A*B)+C)+((D+(E/F))-G)Postorder Traversal (Left, Right, Node) ให้ Postfix Expression AB*C+DEF/+G-+Preorder Traversal (Node, Left, Right) ให้ Prefix Expression ++*ABC-+D/EFG

การคำานวณหาค่าของ Expression Tree

Infix Expression Postfix Expression Prefix Expression

(A + (B/C)) + ((D*E)+((F-G)*H))A B C / + D E * F G – H * + ++ + A / B C + * D E * - F G H

Expression Tree การแปลงนิพจน์ Infix เป็น

Postfixการแปลงนิพจน์ Infix

เป็น Postfix จะใช้ วธิกีารเรยีงลำาดับแบบ สแต็ก

การสรา้งต้นไมข้องนิพจน์ทางคณิตศาสตร์ การเปล่ียน Postfix Expression เป็น Expression

Tree • อ่านนิพจน์ทางคณิตศาสตร์ (Expression) เขา้มาที

ละตัว• ถ้าอักษรที่ได้เป็น Operand (ตัวถกูดำาเนินการ) ให้

สรา้งต้นไมข้นาด 1 โหนด แล้ว push พอยน์เตอร์1 อันลงบนสแตก

• ถ้าอักษรที่ได้เป็น Operator (ตัวดำาเนินการ) ให้pop พอยน์เตอรไ์ปยงัต้นไม้ 2 อันคือ T1 และ T2 ออกมาจากสแตกแล้วสรา้งต้นไมใ้หมข่ึ้นหนึ่งอันให้

มี Root อยูท่ี่ Operator ท่ีรบัเขา้มาและมี Child ด้านซา้ยและด้านขวา เป็น T1 และ T2 ตามลำาดับ

• พอยน์เตอรท์ี่ชีไ้ปยงัต้นไมท้ี่สรา้งขึ้นมาใหมน้ี่ จะ ถกู Push ลงไปบนสแตก

Expression Tree การแปลงนิพจน์ Postfix เป็น

ต้นไม้จะมหีลักด้วยกัน 2 อยา่งคือ

1. เจอโอเปอรแ์รนด์ ให้ทำาการ Push

2. เจอโอเปอรเ์รเตอร ์ให้ pop ขอ้มูลออก2ตำาแหน่ง

Input a b + c d e + * *

a b + c d e + * * • Input 2 ตัวแรกเป็น

Operand จงึสรา้งต้นไม้ ขนาด 1 โหนดแล้ว push

พอยน์เตอร์ 1 อันลงบนสแตก

a b + c d e + * * อ่าน + เขา้มา จงึ pop พอยน์

เตอรอ์อกมาจากสแตก สรา้งต้นไมใ้หม ่Push พอยน์เตอร์ท่ีชีไ้ปยงัต้นไมท่ี้สรา้งขึน้มาใหมล่งไปบนสแตก

a b + c d e + * * อ่าน + เขา้มา จงึ pop พอยน์

เตอรอ์อกมาจากสแตก สรา้งต้นไมใ้หม ่Push พอยน์เตอร์ท่ีชีไ้ปยงัต้นไมท่ี้สรา้งขึน้มาใหมล่งไปบนสแตก

a b + c d e + * * อ่าน c, d, e เขา้มา สรา้ง

ต้นไมข้นาด 1 โหนด สำาหรบัอักษรแต่ละตัว แล้ว Push พอยน์เตอรท่ี์ชีไ้ปยงัต้นไม ้แต่ละอันนี้ลงบนสแตก

a b + c d e + * * อ่าน * เขา้มา ทำาการ Pop

พอยน์เตอรอ์อกมาจากสแตก แล้วสรา้งต้นไมใ้หม่โดยม ี* ท่ีอ่านเขา้มาเป็น Root

a b + c d e + * * อ่าน * เขา้มา จงึทำาการ Pop

พอยน์เตอรอ์อกมาจากสแตก แล้วสรา้งต้นไมใ้หมโ่ดยม ี* ท่ีอ่านเขา้มาเป็น Root

+ C D E + * *

BA

AB

C D E + * *

BA+

+

C D E + * *

BA

+ C D E

* *

BA

+ C D E+

+

*

BA

+ C

ED

+*

*

*

BA

+

C

ED

+

**

• 1. จงสรา้ง Expression Tree จากนิพจน์ต่อไปน้ี– 1.1 ((A – 2) * (B + C)) – ((D * E) * F)– 1.2 A + (B – C) * D ^ ( E * F )

• 2. จงแปลง Postfix เป็น ต้นไม้– 2.1) 6 2 * 3 /– 2.2) A 2 ^ 2 A * B * - B 2 ^ + A B - /

แบบฝึกหัด

Binary search tree

• ไบนารเีซริช์ทรี (Binary Search Tree)เป็น ไบนารทีรท่ีีมคีณุสมบติัท่ีวา่ทกุ ๆ โหนดใน

ทรี ค่าของโหนดรากมค่ีามากกวา่ค่าของ ทกุโหนดในทรยีอ่ยทางซา้ย และมค่ีาน้อย

กวา่หรอืเท่ากับค่าของทกุโหนดในทรยีอ่ย ทางขวาและในแต่ละทรยีอ่ยก็มี

คณุสมบติัเชน่เดียวกัน

• ไบนารเีสริช์ทรปีระกอบด้วยคณุสมบติั ดังต่อน้ี

• 1. ทกุๆ โหนดในซบัทรด้ีานซา้ยต้องมี ค่าน้อยกวา่รูทโหนด

• 2. ทกุๆ โหนดในซบัทรขีา้งขวาต้องมค่ีา มากกวา่หรอืเท่ากับรูทโหนด

• 3. แต่ละซบัทรจีะต้องเป็นไบนารเีสริช์ ทรี

Binary search tree

• ในการสรา้ง และแทรกโหนดใหมเ่ขา้ในBinary Search Tree เป็นกระบวนการ

ทำางานท่ีไมส่ลับซบัซอ้นมากนัก เพราะจะ เริม่ต้นจากตำาแหน่งของ Root Node

หลังจากนัน้เมื่อมโีหนดใหม่ๆ เพิม่เขา้มา ก็จะทำาการเปรยีบเทียบวา่ค่าของโหนด

ใหม่ มค่ีามากวา่ หรอื น้อยกวา่โหนดปัจจุบนั

Binary search tree

• ถ้าค่าของโหนดใหมน้่อยกวา่ค่าของ โหนดปัจจุบนั ก็จะทำาการค้นหาขอ้มูล

ต่อไป ทางซา้ยตามลำาดับ จนกวา่จะ เจอท่ีวา่งๆ จงึทำาการแทรกค่าโหนด

ใหมล่ง ณ ตรงจุดนัน้ และในทาง กลับกัน ถ้าค่าของโหนดใหมท่ี่ค่า

มากกวา่ค่าของโหนดปัจจุบนั ก็จะทำาการค้นหาขอ้มูลต่อไปทางขวาจนกวา่จะเจอท่ีวา่งท่ีจะทำาการแทรก

โหนดใหมล่งไป ณ ตรงจุดนัน้

Binary search tree

• ตัวอยา่ง จงสรา้งและแทรกขอ้มูลลงใน Tree โดยอาศัยขอ้มูลดังต่อไปนี้

40, 20, 10, 50, 65, 45, 30• เริม่แรกด้วยการสรา้งโหนดแรก ใน

Tree ซึ่งขอ้มูลแรกสดุ คือ 40 และจะ เป็นขอ้มูลที่เป็น Root Node

Binary search tree

40 40null null

• สว่นโหนดถัดมา คือ 20 เมื่อเปรยีบ เทียบค่าขอ้มูลกับ Root node แล้วมค่ีา

น้อยกวา่ 40 ก็จะทำาการแทรกลงมาทาง ด้านซา้ยของโหนด 40

Binary search tree

40 40

20 20null null

40 40 null

• โหนดต่อไป คือ 10 เปรยีบเทียบ แล้วมค่ีาน้อยกวา่40 จงึต้องนำาไปเปรยีบเทียบกับโหนดถัดไปทางด้าน

ซา้ยในท่ีน้ี คือ 20 และ 10 น้ีมค่ีาน้อยกวา่ 20 ดัง นัน้จงึทำาการแทรกลงทางด้านซา้ยของโหนด 20

Binary search tree

40

20

4040 null

10 10null null

20 null

• โหนดต่อไป คือ 50 เปรยีบเทียบ แล้วมค่ีามากกวา่ 40 จงึทำาการแทรกลงทางด้านขวาของ Tree 40 เนื่องจาก

ทางด้านขวาของ 40 ยงัไมม่ขีอ้มูล

Binary search tree

20

4040

10 10null null

20 null 50 nullnull50

• ถัดไปคือ 65 เปรยีบเทียบแล้วมค่ีา มากกวา่ 40 จงึ ต้องนำาไปเปรยีบเทียบกับ โหนดถัดไปทางด้านขวาใน

ท่ีนี้ คือ 50 และ 65 นี้ทีค่ามากกวา่ 50 ฉะนัน้จงึ ทำาการแทรกลงทางด้านขวาของ Tree 50 เน่ืองจาก

ทางด้านขวาของ 50 ยงัไมม่ขีอ้มูล

Binary search tree

20

40

40

10

10null null

20 null 50null

50

65null null

65

• ถัดไปคือ 45 เปรยีบเทียบ แล้วมค่ีามากกวา่ 40 จงึต้องนำาไปเปรยีบเทียบกับโหนดถัดไปทางด้านขวาในท่ี

นี้ คือ 50 และ 45 น้ีมค่ีาน้อยกวา่ 50 ฉะนัน้จงึ ทำาการแทรกลงทางด้านซา้ยของ Tree 50 เน่ืองจาก

ทางด้านซา้ยของ 50 ยงัไมม่ขีอ้มูล

Binary search tree

20

40

40

10

10null null

20 null 50

50

65null null

6545

45null null

• ท้ายสดุคือ 30 เปรยีบเทียบแล้วมค่ีาน้อยกวา่ 40 จงึต้องนำาไปเปรยีบเทียบกับโหนดถัดไป ทางด้าน

ซา้ยในท่ีนี้คือ 20 และ 30 นี้มค่ีามากกวา่ 20 ฉะนัน้ จงึทำาการแทรกลงทางด้านขวาของ Tree 20

เน่ืองจากทางด้านขวาของ 20 ยงัไมม่ขีอ้มูล

Binary search tree

20

40

40

10

10null null

20 50

50

65null null

6545

45null null

30null null

30

การค้นหาขอ้มูลในไบนารเีสริช์ทรี(BST Search)

• การค้นหาโหนดท่ีมค่ีาต่าสดุ (Find the Smallest Node)

• 1. โหนดท่ีมค่ีาต่าสดุคือ 10 อยูใ่น ตำาแหน่งโหนดใบด้านซา้ยของทรี

• 2. การค้นหาโหนดท่ีเก็บค่าต่าสดุใน ทรี ด้วยการเดินตามบรานซท์างซา้ย

มอืไปจนกระทั่งถึงโหนดใบ• 3. ก็จะค้นพบโหนดท่ีมค่ีาตำ่าสดุใน

ไบนารเีสริช์ทรี

• การค้นหาโหนดท่ีมค่ีาสงูสดุ (Find the Largest Node)

• 1. การค้นหาจะเริม่ต้นจากรูทโหนด และเดินตามไปยงับรานชฝ์ั่ งขวา

• 2. จนกระทั่งพบโหนดท่ีมค่ีาสงูสดุ ก็คือ 65

การค้นหาขอ้มูลในไบนารเีสริช์ทรี(BST Search)

การดำาเนินงานในไบนารเีสริช์ทรี(BST Operation) การแทรกโหนด

(Insertion) • การแทรกโหนดใน BST จะดำาเนิน

การแทรกท่ีตำาแหน่งโหนดใบ หรอื โหนดท่ีคล้ายใบ

• กระทำาการแทรกท่ีโหนดใบในตำาแหน่งท่ียงัคงไวซ้ึง่คณุสมบติั

ของ BST

20

40

10

50

654530

• เพิม่ โหนด 25

20

40

10

50

654530

20

40

10

50

654530

25

การดำาเนินงานในไบนารเีสริช์ทรี(BST Operation)

• เพิม่ โหนด 40

20

40

10

50

654530

20

40

10

50

654530

25

การดาเนินงานในไบนารเีสริช์ทรี(BST Operation)

40

การดำาเนินงานในไบนารเีสริช์ทรี(BST Operation) การลบโหนด

(Delete) • การลบโหนดออกจากไบนารเีสริช์ทรี มี

ความเป็นไปได้ 4 ประการ• 1. กรณีโหนดท่ีต้องการลบไมม่ลีกู ให้ดา

เนินการลบได้ทันที• 2. กรณีโหนดท่ีต้องการลบมเีฉพาะซบัทรี

ด้านขวา ให้ทำาการลบโหนดดังกล่าวท้ิง และดึงซบัทรด้ีานขวาขึน้มาแทน

• 3. กรณีโหนดท่ีต้องการลบมเีฉพาะซบัทรี ด้านซา้ย ให้ทาการลบโหนดดังกล่าวทิ้ง และ

ดึงซบัทรด้ีานซา้ยขึน้มาแทน• 4. กรณีโหนดท่ีต้องการลบมสีองโหนดซบั

ทรี (ท้ังด้านซา้ยและขวา) มี 2 แนวทาง– ให้ดำาเนินการหาโหนดท่ีมค่ีามากท่ีสดุในซบัทรี

ด้านซา้ยของโหนดท่ีต้องการลบ และเคลื่อน ยา้ยมาแทนท่ีตาแหน่งโหนดท่ีถกูลบ

– ให้ดำาเนินการหาโหนดท่ีมค่ีาน้อยท่ีสดุในซบัทรี ด้านขวาของโหนดท่ีต้องการลบ และเคลื่อนยา้ย มาแทนท่ีตาแหน่งท่ีโหนดถกูลบ

การดำาเนินงานในไบนารเีสริช์ทรี(BST Operation) การลบโหนด

(Delete)

• ลบ โหนด 50

20

40

10

50

654530

25

การดาเนินงานในไบนารเีสริช์ทรี(BST Operation)

40 48

Node to be delete

20

40

10

50

654530

25 40 48

Find largest nodeFind delete node

• ลบ โหนด 50

20

40

10

48

654530

25

การดาเนินงานในไบนารเีสริช์ทรี(BST Operation)

40 48

Node to be delete

20

40

10

50

654530

25 40 48

Largest NodeOn left subtree

Move Largest Node

Move Largest Node here

• ลบ โหนด 50

20

40

10

48

654530

25

การดาเนินงานในไบนารเีสริช์ทรี(BST Operation)

40

Delete complete

• ลบ โหนด 45

20

40

10

50

654530

25

การดาเนินงานในไบนารเีสริช์ทรี(BST Operation)

40 48

Node to be delete20

40

10

50

654530

25 40

Find smallest nodeFind delete node

4946

Node to be delete

48

4946

• ลบ โหนด 45

20

40

10

50

654530

25

การดาเนินงานในไบนารเีสริช์ทรี(BST Operation)

40 48

Node to be delete20

40

10

50

654530

25 40

move smallest nodeSmallest node on right subtree

4946

48

4946

Move smallest Node here

• ลบ โหนด 45

20

40

10

50

654630

25

การดาเนินงานในไบนารเีสริช์ทรี(BST Operation)

40 48

49Delete complete

แบบฝึกหัด• 1. จงแสดงภาพแต่ละขัน้ตอนของ

การสรา้ง Binary Search Tree จาก ขอ้มูลต่อไปน้ี

• 5 8 2 3 9 1 7 10 6

แบบฝึกหัด

• 2. จากรูปไบนารทีรเีสริช์ท่ีกำาหนดให้ ต่อไปน้ี จงวาดรูปแสดงการดำาเนิน

การกับไบนารทีรเีสริช์ตามลำาดับต่อไปน้ี

30

60

10

70

806520

5 75 85

แบบฝึกหัด• 2.1 ป้อน 15 • 2.2 ป้อน 95• 2.3 ลบ 30• 2.4 ลบ 85