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

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

บทที่ 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 1000001B 1000010B 1000011B 1000100B 1000101B 1000110B

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

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

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

9 9 ตัวอย่างที่ 9.1 โค้ดรหัสเทียมการเพิ่มคีย์ใน Simple Tries Simple Tries 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 +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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 +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” ซึ่งมี บิตสตริงคือ “1000101” ใน Full Tries

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

13 13 ตัวอย่างที่ 9.3 โค้ดรหัสเทียมการเพิ่มคีย์ใน Full Tries Full Tries 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 //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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 +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