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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Microsoft Access อ.เล็กฤทัย ขันทองชัย Microsoft Access.
Advertisements

โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
วิชา องค์ประกอบศิลป์สำหรับคอมพิวเตอร์ รหัส
Lists Data Structure LAUKHWAN NGAMPRASIT LAUKHWAN NGAMPRASIT.
สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธิ์
การทำงานแบบเลือกทำ (Selection)
[][Data][] [][1][]<->[][5][]<->[][3][]<->[][8][null]
ต้นไม้และนิยามที่เกี่ยวข้อง
Chapter 1 โครงสร้างข้อมูลและอัลกอริธึมส์
Stack.
การเรียงลำดับและการค้นหาแบบง่าย
Decision Tree.
AVL Tree.
Data Transmission Encoding Techniques and Transmission mode
Week 6 ประกาศค่าตัวแปร.
NUMBER SYSTEM เลขฐานสิบ (Decimal Number) เลขฐานสอง (Binary Number)
Seree Chinodom Recordset Object Seree Chinodom Computer Science, BUU.
SCC : Suthida Chaichomchuen
การออกแบบโปรแกรมอย่างมีโครงสร้าง Structured Design
Computer Architecture and Assembly Language
MAT 231: คณิตศาสตร์ไม่ต่อเนื่อง (6) ทรี-ต้นไม้(Trees)
บทที่ 3 ตัวดำเนินการ และ นิพจน์
โปรแกรม Microsoft Access
จำนวนทั้งหมด ( Whole Numbers )
วิทยาการคอมพิวเตอร์ 1 เรื่องคัดเฉพาะทาง
ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages)
ฐานข้อมูลเชิงสัมพันธ์
Chapter 6 Decision Statement
โครงสร้างข้อมูลแบบคิว
หลักการวิเคราะห์และออกแบบระบบฐานข้อมูล
รายวิชา ระบบฐานข้อมูล 1 หลักการวิเคราะห์และออกแบบระบบฐานข้อมูล
ง30212 การเขียนโปรแกรมภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
บทที่ 3 การวิเคราะห์ Analysis.
สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา
Microsoft Word MailMerge
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
บทที่ 5 Link List Link List.
บทที่ 3 การทำงานกับฟอร์ม (Form)
โปรแกรม Microsoft Access
บทที่ 3 การทำงานกับฟอร์ม (Form)
ลิงค์ลิสต์ (Linked List)
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
CHAPTER 4 Control Statements
Classification Data mining การทำเหมืองข้อมูลแบบจำแนก
การทำผลงานวิชาการ สงวนลิขสิทธิ์.....โดย ดร.สุรชาติ สังข์รุ่ง.
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
วิวัฒน์ ชินนาทศิริกุล
School of Information Communication Technology,
ต้นไม้ Tree (2) ผู้สอน อาจารย์ ยืนยง กันทะเนตร
School of Information Communication Technology,
Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ
โมเดลเชิงสัมพันธ์ The relational model.
การจำแนกข้อมูล(Classification) CART-Classification and regression Tree
ค่าความจริงของประโยคที่มีตัวบ่งปริมาณ 2 ตัว
บทที่ 7 เงื่อนไขในภาษาซี
การจัดเรียงข้อมูล (sorting)
1 Functions กนกวรรธน์ เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศ และการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การรับและแสดงผลข้อมูล (Input/Output)
ต้นไม้ Tree [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Week 13 Basic Algorithm 2 (Searching)
1 สตริง (String) การประกาศค่าตัวแปรสตริง การกำหนดค่าสตริง การอ้างอิงตัวอักษรแต่ละตัวในสตริง ฟังก์ชั่นที่ใช้ในการจัดการสตริง ฟังก์ชั่นในการเปลี่ยนรูปแบบของสตริง.
การแบ่งแยกและเอาชนะ Divide & Conquer
CHAPTER 2 Operators.
รายการ (Lis t) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.
ต้นไม้ Tree [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
ค32213 คณิตศาสตร์สำหรับคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
Tree 2.
4.7. B-Trees โครงสร้าง tree ที่กล่าวถึงมาแล้วนั้น อยู่บนสมมติฐานที่ว่าโครงสร้างทั้งหมดสามารถจัดเก็บอยู่ในหน่วยความจำของเครื่องคอมพิวเตอร์ได้ ถ้า จำนวนข้อมูลมีปริมาณมากเกินกว่าที่จะเก็บไว้ใน.
ใบสำเนางานนำเสนอ:

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

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

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

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

Simple Tries Simple Ties ในบ้างครั้งเรียกว่า “ทรีในการค้นหาแบบดิจิตอล” (Digital Search Tees) Simple Tires จะใช้คุณสมบัติของบิตในการค้นหาตำแหน่งที่เหมาะสมในการเพิ่มโหนดในไทร์ ตัวอย่างของ Simple Tries ในการเพิ่มข้อมูล โดยกำหนดคุณสมบัติ (Signature) “เปลี่ยนอักษรตัวแรกของข้อความเป็นรหัสแอสกรี” ซึ่งกำหนดให้มีอักษรตัวแรกของข้อความดังนี้ Key Signature A B C D E F 1000001B 1000010B 1000011B 1000100B 1000101B 1000110B

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

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

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

Simple Tries ตัวอย่างที่ 9.1 โค้ดรหัสเทียมการเพิ่มคีย์ใน Simple Tries 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) if (Node.right is null) Node.right = new trie node with key and value else insertKeyTries(Node.right,key,value,bitNum+1)

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) else searchKeyTries(Node.right,key,bitNum+1) }

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

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

Full Tries ตัวอย่างที่ 9.3 โค้ดรหัสเทียมการเพิ่มคีย์ใน Full Tries 1 2   1 2 3 4 5 6 7 8 9 10 11 12 13 1415 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) else insertNodeFullTries(Node.right,key,value,bitNum+1)

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

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

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

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.

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