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

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

บทที่ 9 ไทร์ (Tries) 1. Simple Tries Full Tries Compressed Tries สรุปเนื้อหาบทที่ 9 2 กล่าวนำไทร์

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


งานนำเสนอเรื่อง: "บทที่ 9 ไทร์ (Tries) 1. Simple Tries Full Tries Compressed Tries สรุปเนื้อหาบทที่ 9 2 กล่าวนำไทร์"— ใบสำเนางานนำเสนอ:

1 บทที่ 9 ไทร์ (Tries) 1

2 Simple Tries Full Tries Compressed Tries สรุปเนื้อหาบทที่ 9 2 กล่าวนำไทร์

3 3 ไทร์ (Tries) หรือเรียกอีกอย่างว่า profix Tree ไทร์เป็นทรีแบบลำดับที่เก็บความสัมพันธ์ด้วยคีย์ ไทร์จะเก็บข้อมูลโดยใช้โครงสร้างที่เป็นข้อความ รูปแบบการเพิ่มข้อมูลในไทร์จะไม่เหมือนกับไบนารีทรีตรงที่ว่า ไทร์ไม่มีโหนดสำหรับเก็บข้อมูลแต่จะใช้คุณสมบัติ (signature) ในการสร้างความสัมพันธ์ของคีย์เพื่ออ้างอิงไปยัง โหนดถัดไป คีย์ที่ใช้ในการอ้างอิงมักจะใช้คุณสมบัติบิตของตัวอักษรใน รูปแบบแอสกรี (Ascii) กล่าวนำไทร์ (Tries) คุณสมบัติ (Signature) ในการสร้างไทร์ คือ “ เปลี่ยน ตัวอักษรตัวแรกของข้อความเป็นรหัสแอสกรี ” กำหนดให้บิต ชั้นที่ i เป็นคุณสมบัติในการตรวจสอบ โดยที่ o ถ้าบิตเท่ากับ ‘0’ ให้ไปทางซ้าย o ถ้าบิตเท่ากับ ‘1’ ให้ไปทางขวา

4 4 กล่าวนำไทร์ (Tries) เปรียบเทียบการเพิ่มข้อมูลในไบนารีทรีในรูป (a) กับการเพิ่ม ข้อมูลในไทร์ในรูปที่ (b) (a) (b)

5 5 Simple Tries Simple Ties ในบ้างครั้งเรียกว่า “ ทรีในการค้นหาแบบ ดิจิตอล ” (Digital Search Tees) Simple Tires จะใช้คุณสมบัติของบิตในการค้นหาตำแหน่งที่ เหมาะสมในการเพิ่มโหนดในไทร์ ตัวอย่างของ Simple Tries ในการเพิ่มข้อมูล โดยกำหนด คุณสมบัติ (Signature) “ เปลี่ยนอักษรตัวแรกของข้อความเป็น รหัสแอสกรี ” ซึ่งกำหนดให้มีอักษรตัวแรกของข้อความดังนี้ KeySignatur e ABCDEFABCDEF B B B B B B

6 6 Simple Tries เพิ่มคีย์ “B” : คีย์ “B” ( B) เปรียบเทียบกับคีย์ “A” ไม่ เท่ากัน บิตแรกของคีย์ “B” คือ ‘0’ ดังนั้นเพิ่มคีย์ “B” เป็นลูกทางซ้ายของคีย์ “A” เพิ่มคีย์ “A” : ไทร์เป็นไทร์ว่างเปล่าให้เพิ่มคีย์ “A” ( B) เป็นตำแหน่งโหนดราก (root) เพิ่มคีย์ “C” : คีย์ “C” ( B) เปรียบเทียบกับคีย์ “A” ไม่ เท่ากัน บิตแรกของคีย์ “C” คือ ‘1’ ดังนั้นเพิ่มคีย์ “C” เป็นลูกทางขวาของคีย์ “A”

7 7 เพิ่มคีย์ “D” : คีย์ “D” ( B) บิตแรกของคีย์ “D” คือ ‘0’ ดังนั้น เป็นลูกทางซ้ายของคีย์ “A” แต่คีย์ “A” มีลูก ทางซ้ายแล้ว ต่อไปบิตที่ 2 ของคีย์ “D” คือ ‘0’ ดังนั้น เป็นลูกทางซ้ายของคีย์ “B” Simple Tries เพิ่มคีย์ “E” : คีย์ “E” ( B) บิตแรกของคีย์ “E” คือ ‘1’ ดังนั้นเป็นลูกทางซ้ายของคีย์ “A” บิตที่ 2 ของคีย์ “E” คือ ‘0’ ดังนั้น เป็นลูกทางซ้ายของคีย์ “C”

8 8 เพิ่มคีย์ “F” : คีย์ “E” ( B) บิตแรกของคีย์ “F” คือ ‘0’ ดังนั้นเป็นลูกทางซ้ายของคีย์ “A” บิตที่ 2 ของคีย์ “F” คือ ‘1’ ดังนั้นเป็นลูกทางขวาของคีย์ “B” Simple Tries

9 9 ตัวอย่างที่ 9.1 โค้ดรหัสเทียมการเพิ่มคีย์ใน Simple Tries Simple Tries insertTries(in trieTree:TriesTree,in key:keyType,in value:valueType):TriesTree if (trieTree is empty){ return root = create new root with key and value in trieTree }else{ return insertKeyTries(root,key,value,0); } +insertKeyTries(in Node:TriesTree,in key:keyType,in value:valueType, in bitNum:integer):TriresTree if (Node.key = key) return Node else if (key.getBit(bitNum) = 0){ if (Node.left is null) Node.left = new trie node with key and value else insertKeyTries(Node.left,key,value,bitNum+1) }else{ if (Node.right is null) Node.right = new trie node with key and value else insertKeyTries(Node.right,key,value,bitNum+1) } return Node

10 10 Simple Tries ตัวอย่างที่ 9.2 โค้ดรหัสเทียมการค้นหาคีย์ใน Simple Tries searchTries(in root:TriesTree,in key:keyType,):valueType Node = searchKeyTries(root,key,0) if (Node is null) return -1 else Node.value +searchKeyTries(in Node:TriesTree,in key:keyType,in bitNum:integer):TriresTree if (Node.key = key) return Node else if (key.getBit(bitNum) = 0){ if (Node.left is null) return null else searchKeyTries(Node.left,key,bitNum+1) }else{ if (Node.right is null) return null else searchKeyTries(Node.right,key,bitNum+1) }

11 11 Full Tries Full Tries จะนำทุกบิตของตัวอักษรรหัสแอสกรีมากำหนด ตำแหน่งของโหนด Full Tries ใช้รูปแบบความเหมือนกันของบิต ดังนั้น จึงต้อง สลับตำแหน่งบิตกับ Simple Tries เช่น ต้องการเพิ่ม “E” ซึ่งมี บิตสตริงคือ “ ” ใน Full Tries

12 12 Full Tries ตัวอย่างในการเพิ่มคีย์ “A”, “B”, “C”, “D”, “E”, “F” ใน Full Tries โดยเลือกมาเฉพาะห้าบิตในรหัสแอสกรีเพื่อนำมาสร้าง ไทร์

13 13 ตัวอย่างที่ 9.3 โค้ดรหัสเทียมการเพิ่มคีย์ใน Full Tries Full Tries //maxBits : maximum bit for use in key +insertFullTries(in trieTree:TriesTree,in key:keyType,in value:valueType):TriesTree if (trieTree is empty){ root = create empty internal node; //Start bit-numbering at 0 and create path to leaf extendBrance(root,key,value,0); retrun root } insertNodeFullTries(root,key,value,0) +extendBranch(in Node:TriesTree, in key:keyType,in value:valueType,in bitNum:integer) Create path of internal nodes from level bitNum to maxBits-1 if (key.getBit(maxBits) = 0) create left leaf at end of path else create right leaf a end of path +insertNodeFullTries(in Node:TriesTree, in key:keyType,in value:valueType,in bitNum:integer) if (key.getBit(bitNum = 0){ //Check left side. if (Node.left is null) //Grow a branch of internal nodes and append leaf. extendBranch(Node,key,value,bitNum) else insertNodeFullTries(Node.left,key,value,bitNum+1) }else{ //Check right side. if (Node.right is null) //Grow a branch of internal nodes and append leaf. extendBranch(Node,key,value,bitNum) else insertNodeFullTries(Node.right,key,value,bitNum+1) }

14 14 Compressed Tries Compressed Tries เป็นการลดบิตที่ซ้ำกันในการสร้างไทร์ ตัวอย่างการเพิ่มคีย์ คีย์ “A”, “B”, “C”, “D”, “E”, “F” ใน Compressed Tries เพิ่มคีย์ A : signature(“A”) = “00001” ไทร์ว่างเปล่า ให้ เพิ่มคีย์เป็นโหนดราก เพิ่มคีย์ B : signature(“B”) = “00010” คีย์ “B” มีบิตที่ แตกต่างจากคีย์ “A” ที่บิตที่ 4 ดังนั้น จะต้องผ่านบิตจำนวน 3 บิต

15 15 Compressed Tries เพิ่มคีย์ C: signature(“C”) = “00011” คีย์ “C” มีบิตที่ แตกต่างจากคีย์ “B” ที่บิต สุดท้าย ดังนั้นจะต้องผ่านบิตทั้งหมด 5 บิต เพิ่มคีย์ D: signature(“D”) = “00100” คีย์ “D” มีบิตที่ แตกต่างจากคีย์ “C” ที่บิตที่ 3 ไม่มี คีย์ไหนที่ต้องใช้บิตที่สามร่วมกัน ดังนั้น แทรกคีย์ “D” ในบิตที่ 3

16 16 Compressed Tries เพิ่มคีย์ E: signature(“E”) = “00101” คีย์ “E” มีบิตที่ แตกต่างจากคีย์ “D” ที่บิตสุดท้าย ดังนั้นจะต้องผ่านบิตทั้งหมด 5 บิต เพิ่มคีย์ F: signature(“F”) = “00110” คีย์ “F” มีบิตที่ แตกต่างจากคีย์ “E” ที่บิตที่ 4 ไม่มี คีย์ไหนที่ต้องใช้บิตที่สี่ร่วมกันดังนั้น แทรกคีย์ “F” ในบิตที่ 4

17 17 Compressed Tries ตัวอย่างที่ 9.4 โค้ดรหัสเทียมการเพิ่มคีย์ใน Compressed Tries insertCompTries(in trieTree:TriesTree,in key:keyType,in value:valueType):TriesTree if (trieTree is empty){ root = create empty internal node; extendBrance(root,key,value,0); retrun root } //Start with level 0 insertNodeCompTries(root,key,value,0) +insertNodeCompTries(in Node:TriesTree, in key:keyType,in value:valueType, in bitNum:integer):TriesTree if (Node contains a key){ //Need to create a path to sidtinguish key and Node.key extendSmallesBranch(Node,Node.key,Node.value,key,value,bitNum) return Node } //Otherwise,Node is an empty interior node for navigation only. if (key.getBit(bitNum) = 0){ //Check left. if (Node.left is null) Node.left = new node containing key and value else insertNodeCompTries(Node.left,key,value,bitNum+1) }else{ //Check right. if (Node.right is null) Node.right = new node containing key and value else insertNodeCompTries(Node.right,key,value,bitNum+1) } +extendSmallestBranch(Node,key1,value1,key2,value2,bitNum) //Examine bits from bitNum to maxBits. //As long as the bits are equal in the two keys, extend branch. //When the bits differ, stop and create children with key1 and key2.

18 18 สรุปเนื้อหาบทที่ 9 ไทร์หรือเรียกว่า profix tree เป็นโครงสร้างที่เก็บข้อมูลที่ เป็นข้อความ ในการสร้างความสัมพันธ์ของคีย์ ใช้หลักการเปลี่ยนรหัสแอสกรีของตัวอักษรมาเป็นการ สร้างความสัมพันธ์


ดาวน์โหลด ppt บทที่ 9 ไทร์ (Tries) 1. Simple Tries Full Tries Compressed Tries สรุปเนื้อหาบทที่ 9 2 กล่าวนำไทร์

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


Ads by Google