Asst.Prof. Dr.Surasak Mungsing E-mail: Surasak.mu@spu.ac.th CSC201 Anaysis and Design of Algorithmss Analysis of Searching Algorithms Asst.Prof. Dr.Surasak Mungsing E-mail: Surasak.mu@spu.ac.th Apr-17
Graph Search Methods ปัญหากราฟจำนวนมากแก้โดยวิธีการค้นหา (Many graph problems solved using a search method) การหาเส้นทางจากโหนดหนึ่งไปยังอีกโหนดหนึ่ง (Path from one vertex to another) กราฟเชื่อมต่อกันหรือไม่ (Is the graph connected?) การหาต้นไม้แผ่ของกราฟ (Find a spanning tree) Etc. วิธีการค้นหาที่รู้จักกันทั่วไป (Commonly used search methods): Breadth-first search. Depth-first search. Apr-17
Breadth-First Search CSE221 การวิเคราะห์และออกแบบขั้นตอนวิธี 4/4/2017
Breadth-First Search Example ถ้าให้โหนดแทนเมืองต่างๆ กราฟก็เหมือนถนนที่เชื่อมเมืองซึ่งสามารถที่พาไปยังเมืองต่างๆได้ 4/4/2017
Breadth-First Search Example จากเมือง Chicago, สามารถท่องไปยังเมืองต่างๆได้โดยวิธี breadth-first search ได้ดังนี้ เริ่มด้วยการเดินทางไปยังเมืองที่อยู่ใกล้ที่สุดก่อน ได้แก่เมือง Saint Louis, Milwaulkee, Detroit และ Indianapolis 4/4/2017
Breadth-First Search Example จากนั้น ก็เดินทางต่อไปยังเมืองที่ใกล้ที่สุดของเมืองต่างๆที่ยังไม่ได้ จากเมือง Milwaulkee ไปยังเมือง Minneapolis และเมือง Omaha 4/4/2017
Breadth-First Search Example จากเมือง St. Louis ไปเมือง Kansas City, Tulsa, Nashville และ Lexington 4/4/2017
Breadth-First Search Example จากเมือง Indianapolis ไปเมือง Cincinnati และเมือง Columbus 4/4/2017
Data structures for BFS algorithm 1. สร้าง array ของโหนดจากกราฟ G. แต่ละโหนดจะกำหนด สี(color), ระยะทาง(distance) และโหนดก่อนหน้า(predecessor): - color: (White, Grey, Black). White: ถ้ายังไม่เคยตรวจสอบมาก่อน ดังนั้นในกาเริ่มต้นทุกโหนดเป็นสี WHITE Grey: ถ้าถูกตรวจแล้วแต่โหนดประชิดของโหนดนี้ยังไม่ถูกตรวจ Black: ถ้าโหนดถูกตรวจสอบแล้วและโหนดประชิดก็ถูกตรวจแล้วด้วย - distance: จำนวน edges ที่จะต้องเดินทางนับจากจุดเริ่มต้น มีค่าเป็น INFINITY เมื่อเริ่มต้น - predecessor: โหนดก่อนหน้าก่อนที่จะถึงโหนดนี้ 2. สร้างคิว Q ของโหนดสี GREY ทั้งหมด (โหนดที่ไปถึงแล้วแต่ยังไม่ได้ไปต่อ) 3. ให้การแทนข้อมูลกราฟ G เป็นแบบ adjacency list 4/4/2017
Time Complexity Each visited vertex is put on (and so removed from) the queue exactly once. When a vertex is removed from the queue, we examine its adjacent vertices. O(n) if adjacency matrix used O(vertex degree) if adjacency lists used Total time O(mn), where m is number of edges in the component that is searched (adjacency matrix) O(n + sum of component vertex degrees) (adj. lists) = O(n + number of edges in component)
4/4/2017
Depth-First Search 4/4/2017
Depth-First Search ลองนึกภาพคนเดินหาทางออกจากเขาวงกต เขาจะเดินไปข้างหน้าเรื่อยๆ จนกระทั่งถึงทางตันหรือพบเส้นทางที่เคยเดินผ่านมาก่อน จากนั้นจะเลี้ยวไปทางแยกที่ยังไม่เคยไปมาก่อนเพื่อเดินหน้าค้นหาทางออกจากเขาวงกตต่อไป สำหรับกราฟแผนที่เมือง Chicago เหตุการณ์จะเป็นดังนี้ 4/4/2017
Depth-First Search จากเมือง Chicago ไปยังเมือง Milwaukee 4/4/2017
Depth-First Search จากเมือง Milwaukee ไปยังเมือง Minneapolis 4/4/2017
Depth-First Search จากเมือง Minneapolis ไปยังเมือง Omaha 4/4/2017
Depth-First Search จากเมือง Omaha ไปยังเมือง Kansas City 4/4/2017
Depth-First Search จากเมือง Kansas City ไปยังเมือง St. Louis 4/4/2017
Depth-First Search จากเมือง St. Louis ไปยังเมือง Tulsa 4/4/2017
Depth-First Search จากเมือง St. Louis ไปยังเมือง Nashville 4/4/2017
Depth-First Search จากเมือง Nashville ไปยังเมือง Lexington 4/4/2017
Depth-First Search จากเมือง Lexington ไปยังเมือง Cincinnati Cincinnati 4/4/2017
Depth-First Search จากเมือง Cincinnati ไปยังเมือง Columbus 4/4/2017
Depth-First Search จากเมือง Columbus ไปยังเมือง Detroit Detroit 4/4/2017
Depth-First Search จากเมือง Columbus ไปยังเมือง Indianapolis 4/4/2017
Data structures for DFS algorithm 1. สร้าง array ของโหนดจากกราฟ G. แต่ละโหนดจะกำหนด color, predecessor, start_time และ end_time: - color: (White, Grey, Black). White: ถ้ายังไม่เคยตรวจสอบมาก่อน ดังนั้นในกาเริ่มต้นทุกโหนดเป็นสี WHITE Grey: ถ้าถูกตรวจแล้วแต่โหนดประชิดของโหนดนี้ยังไม่ถูกตรวจ Black: ถ้าโหนดถูกตรวจสอบแล้วและโหนดประชิดก็ถูกตรวจแล้วด้วย - start_time: เวลาในขั้นตอนวิธีเมื่อโหนดถูกมาเยือนเป็นครั้งแรก - end_time: เวลาในขั้นตอนวิธีเมื่อโหนดประชิดถูกตรวจสอบแล้ว (เมื่อโหนดนี้เป็น black) - predecessor: โหนดก่อนหน้าก่อนที่จะถึงโหนดนี้เป็นครั้งแรก 2. ให้การแทนข้อมูลกราฟ G เป็นแบบ adjacency list 4/4/2017
Depth-First Search Properties Time complexity เหมือนกับของ BFS. คุณสมบัติที่เกี่ยวกับการหาเส้นทาง การหาการเชื่อมต่อกันขององค์ประกอบและ spanning tree ของ BFS และ DFS เหมือนกัน มีหลายปัญหาที่วิธีของ BFS ดีกว่า DFS และก็มีหลายปัญหาที่วิธีของ DFS ดีกว่า BFS
Breadth-first search VS Depth-first search trees 4/4/2017
Breadth-first search VS Depth-first search trees 4/4/2017
4/4/2017
Hashing 4/4/2017
แนวคิดของเทคนิค Hashing แต่ละค่าคีย์จะ map ไปยังตัวเลขที่มีค่าระหว่าง 0 ถึง TableSize -1 และเก็บอยู่ในตำแหน่งที่เหมาะสม การ map ค่าคีย์ทำโดย hash function ซึ่งในทางทฤษฎีจะเป็นฟังก์ชันง่ายๆซึ่งสามารถให้ผลลัพทธ์ที่แตกต่างกันสำหรับค่าคีย์หนึ่งๆ มีประเด็นที่จะต้องพิจารณาคือการเลือก hash function และการแก้ปัญหาเมื่อค่าคีย์ 2 ค่าประมวลผลโดย hash function แล้วได้ผลลัพทธ์เดียวกัน 4/4/2017
Hash function hash function อย่างง่าย hash(key) = key MOD TableSize TableSize ควรเป็นตัวเลขจำเพาะ (prime number) การได้ผลลัพธ์เหมือนกันจากค่าคีย์ที่แตกต่างกันเรียกว่า Collision การแก้ปัญหา Collision ทำโดยการเก็บค่าคีย์ใน Hash table แบบ Separate Chaining Open Addressing 4/4/2017
Separate chaining Key={0, 81, 64, 25, 36, 49, 4, 1, 9, 16} H(x) = x % 10 4/4/2017
Open addressing with Linear Probing Key {89, 18, 49, 58, 69} Hash function: hash(x)=x MOD 10 Collision resolution strategy: f(i)=i 4/4/2017
Open addressing with Quadratic Probing Key {89, 18, 49, 58, 69} Hash function: hash(x)=x MOD 10 Collision resolution strategy: f(i)=i2 4/4/2017
Open addressing with Double Hashing Key {89, 18, 49, 58, 69} Hash functions: hash(x)=x MOD 10 hash2(x)=7-(x MOD 7) Collision resolution strategy: f(i)=i*hash2(x) 4/4/2017
Theorem ถ้าใช้การแก้ปัญหา Collision แบบ Quadratic probing และ table size เป็นเลข prime แล้ว ข้อมูลใหม่จะมีที่ลงในตารางเสมอหากว่า table ยังอย่างน้อยครึ่งหนึ่งของตารางยังว่าง If quadratic probing is used, and the table size is prime, then a new element can always be inserted if the table is at least half empty. 4/4/2017
Rehashing Open addressing hash table Open addressing hash table with linear probing with input 13, 15, 6, 24 Open addressing hash table with linear probing after 23 is inserted Open addressing hash table after rehashing 4/4/2017
เทคนิคการออกแบบขั้นตอนวิธีตอนวิธี Greedy, Divide and Conquer Next Lecture: เทคนิคการออกแบบขั้นตอนวิธีตอนวิธี Greedy, Divide and Conquer 4-Apr-17