1 / 27

Searching

Searching. สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธิ์. อัลกอริทึมการค้นหาข้อมูล. Linear Searching ข้อมูลไม่มีการเรียงลำดับ Sequential Search ข้อมูลมีการเรียงลำดับ Indexed Sequential Search Binary Search Array หรือ Linked list Binary Search Tree Hash Searching.

Download Presentation

Searching

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Searching สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธิ์

  2. อัลกอริทึมการค้นหาข้อมูลอัลกอริทึมการค้นหาข้อมูล • Linear Searching • ข้อมูลไม่มีการเรียงลำดับ • Sequential Search • ข้อมูลมีการเรียงลำดับ • Indexed Sequential Search • Binary Search • Array หรือ Linked list • Binary Search Tree • Hash Searching

  3. Sequential Searching • เหมาะสำหรับใช้กับโครงสร้างข้อมูลที่เก็บข้อมูลแบบไม่เรียงลำดับ • ใช้กับโครงสร้างข้อมูลที่มีปริมาณข้อมูลน้อย • มักใช้กับโครงสร้างข้อมูล array และ linked list • มีประสิทธิภาพเป็น O(n) • กรณีดีที่สุด (best case) เป็น O(1)

  4. Example Sequential Search • การค้นหาแบบเรียงลำดับ กรณีที่พบข้อมูล Key = 54 25 32 48 3 3 7 7 12 12 25 32 48 54 78 k 5 6 7 0 1 2 3 4 i = i + 1 i = i + 1 i = i + 1 i = 0 i = i + 1 i = i + 1 i = i + 1 found not found not found not found not found not found not found i = 6 Comparison time(s) 7

  5. Example Sequential Search • การค้นหาแบบเรียงลำดับ กรณีที่ไม่พบข้อมูลที่ต้องการ 3 7 12 25 32 48 54 78 3 7 12 25 32 48 54 78 Key = 94 k 5 6 7 0 1 2 3 4 i = i + 1 i = i + 1 i = i + 1 i = i + 1 i = 0 i = i + 1 i = i + 1 i = i + 1 not found not found not found not found not found not found not found not found NOT FOUND…!!! Comparison time(s) 8

  6. การค้นหาแบบลำดับ (Sequential Search) • ข้อสังเกต • ขั้นตอนวิธีข้างต้นของการค้นหาแบบเรียงลำดับจะเหมาะกับการค้นหาค่าในชุดข้อมูลที่ไม่ได้เรียง • แต่ถ้าข้อมูลเรียงเรียบร้อยแล้ว จะมีข้อเสียบางประการคือ กรณีที่ค้นหาไม่พบ แม้ว่าเมื่อค้น target ในชุดข้อมูลจนถึงตัวที่มีค่ามากกว่า target แล้ว การค้นหายังไม่ยุติการค้น ยังคงวนรอบเพื่อเปรียบเทียบข้อมูลจนถึงตัวสุดท้ายในชุดข้อมูล ทำให้เสียเวลา

  7. Indexed Sequential Searching • เหมาะสำหรับใช้กับโครงสร้างข้อมูลที่เก็บข้อมูลแบบเรียงลำดับ • ใช้งานได้ดีกับโครงสร้างข้อมูลที่มีปริมาณข้อมูลเก็บอยู่มาก • การค้นหาข้อมูลโดยวิธีนี้ มีการทำงานเช่นเดียวกับวิธีการ Sequential Search แต่มีการปรับปรุงขั้นตอนวิธีให้มีดัชนี เพื่อทำการค้นหาอย่างเรียงลำดับกับช่วงหนึ่งๆ ของข้อมูลทั้งหมดเท่านั้น

  8. Example Index Sequential Search Key = 101

  9. ขั้นตอนวิธีในการค้นหาข้อมูลแบบดัชนีเรียงลำดับขั้นตอนวิธีในการค้นหาข้อมูลแบบดัชนีเรียงลำดับ • สร้างตารางตารางดัชนี (เป็นอาร์เรย์ 2 มิติ) โดยกำหนดช่วงของข้อมูลที่ต้องการ ( r ) แล้วนำไปหาจำนวนข้อมูล ( n ) แล้วเก็บค่าสูงสุด (หรือตํ่าสุด) และพอยน์เตอร์ของแต่ละช่วงไว้ในตารางดัชนี • ค้นหาข้อมูล โดยค้นหาแบบเรียงลำดับในตารางดัชนี • เปรียบเทียบข้อมูลที่ต้องการ กับข้อมูลในตารางดัชนี โดยตรวจสอบว่าข้อมูลอยู่ในช่วงนั้นหรือไม่ (ข้อมูลน้อยกว่าหรือเท่ากับค่าดัชนี) • ถ้าใช่ ให้ไปอ่านค่าพอยน์เตอร์จากตารางดัชนี และค้นหาข้อมูลโดยเริ่มจากช่วงข้อมูลของข้อมูลนั้น ๆ ในแบบเรียงลำดับ • ถ้าไม่ใช่ แสดงว่าไม่มีข้อมูล

  10. การค้นหาแบบทวิภาค (Binary Search) • เป็นการค้นหากับข้อมูลที่ถูกเรียงลำดับแล้ว • ปัญหากรณีที่ข้อมูลจำนวนมากจะต้องเสียเวลาในการเรียง

  11. การค้นหาแบบทวิภาค (Binary Search) • ขั้นตอนในการค้นหาข้อมูลมีดังนี้ • กำหนด หรือรับข้อมูลที่ต้องการค้นหา • แบ่งครึ่งแฟ้มข้อมูลหรือแถวลำดับข้อมูล • ทำการเปรียบเทียบข้อมูลในแฟ้มข้อมูลหรือแถวลำดับข้อมูล โดยแบ่งครึ่งลงไปเรื่อยๆ จนกว่าจะพบหรือไม่สามารถแบ่งได้อีกต่อไป นั้นหมายความว่าไม่พบข้อมูลนั้นแน่นอน

  12. 2 4 5 9 12 20 27 0 1 2 3 4 5 6 low upper 2 4 5 9 12 20 27 0 1 2 3 4 5 6 Example Binary Search Key = 20 ครั้งที่ 1 เปรียบเทียบค่า key = 20 กับข้อมูลที่อยู่กึ่งกลางของ list พบว่า ค่า key มีค่ามากกว่าค่ากึ่งกลางของข้อมูล ดังนั้นไปค้นหาข้อมูลต่อในส่วนที่ 2 9 ข้อมูลส่วนที่ 2 ข้อมูลส่วนที่ 1 mid = (low+upper)/2 = (0+6)/2 = 3

  13. low upper ข้อมูลส่วนที่ 2 ข้อมูลส่วนที่ 1 2 4 5 9 12 20 27 0 1 2 3 4 5 6 Example Binary Search ครั้งที่ 2 เปรียบเทียบค่า key = 20 กับข้อมูลที่อยู่กึ่งกลางของข้อมูลส่วนที่ 2 20 mid = (low+upper)/2 = (4+6)/2 = 5 FOUND…!! ค่า key = 20 ที่ต้องการค้นหามีค่าตรงกับข้อมูลที่อยู่กึ่งกลางของข้อมูลส่วนที่ 2 หมายความว่าพบข้อมูลที่ต้องการ

  14. 2 4 5 9 12 20 27 0 1 2 3 4 5 6 low high 2 4 5 9 12 20 27 0 1 2 3 4 5 6 Example Binary Search Key = 7 ครั้งที่ 1 เปรียบเทียบค่า key = 20 กับข้อมูลที่อยู่กึ่งกลางของ list พบว่า ค่า key มีค่าน้อยกว่าค่ากึ่งกลางของข้อมูล ดังนั้นไปค้นหาข้อมูลต่อในส่วนที่ 1 9 ข้อมูลส่วนที่ 2 ข้อมูลส่วนที่ 1 mid = (low+high)/2 = (0+6)/2 = 3

  15. low high ข้อมูลส่วนที่ 2 ข้อมูลส่วนที่ 1 2 4 5 9 12 20 27 0 1 2 3 4 5 6 Example Binary Search ครั้งที่ 2 เปรียบเทียบค่า key = 7 กับข้อมูลที่อยู่กึ่งกลางของข้อมูลส่วนที่ 1 พบว่าค่า Key มีค่ามากกว่าค่ากึ่งกลางของข้อมูลส่วนที่ 1นี้ ดังนั้นไปค้นหาต่อที่ข้อมูลส่วนที่ 2 ที่แบ่งครึ่งจากข้อมูลส่วนที่ 1 นี้ 4 mid = (low+high)/2 = (0+2)/2 = 1

  16. ข้อมูลส่วนที่ 2 ข้อมูลส่วนที่ 1 2 4 5 9 12 20 27 0 1 2 3 4 5 6 Example Binary Search ครั้งที่ 3 เปรียบเทียบค่า key = 7 กับข้อมูลที่อยู่กึ่งกลางของข้อมูล NOT FOUND…!! เปรียบเทียบค่า 5 กับค่า 7 เนื่องจาก key = 7 ไม่เท่ากับ 5 แต่มีค่ามากกว่าจึงต้องค้นหนต่อไป แต่ปรากฏว่าไม่มีค่าระหว่าง 5 กับ 7 อีกแล้วเพราะฉะนั้นสรุปได้ว่า ไม่พบข้อมูล 7 ในข้อมูลชุดนี้

  17. ประสิทธิภาพของการค้นหาแบบBinary Search • กระบวนการทำงานแบบ Binary Search จะพบว่าเมื่อมีการเปรียบเทียบแต่ละครั้งจะมีการตัดข้อมูลในตารางออกไปได้ทีละครึ่งหนึ่งเสมอ ดังนั้นถ้าเริ่มต้นมีจำนวนข้อมูล n ตัว • จำนวนข้อมูลที่นำมาเพื่อค้นหาค่าที่ต้องการหลังการเปรียบเทียบแต่ละครั้งจะเป็นดังนี้ ครั้งที่ 2 = n/2 (หรือ n/21) ครั้งที่ 3 = n/4 (หรือ n/22) ครั้งที่ 4 = n/8 (หรือ n/23)

  18. ประสิทธิภาพของการค้นหาแบบBinary Search • ดังนั้น ถ้าให้ k เป็นจำนวนครั้งที่มากที่สุดที่ใช้ในการเปรียบเทียบจะได้ว่า n/2k < 1 หรือ n < 2k จะได้ log2 n < k • จำนวนการเปรียบเทียบของ Binary Search คือ O(log2 n )

  19. Binary Search Algorithm found = false low =0hi = size-1while (low <= hi) and (not found) mid = (low+hi) / 2if key = k[mid] then found = true round=round+1else if key < k(mid) then hi = mid – 1 round = round +1else low = mid + 1 round =round +1if found then index= mid else index= -1 end

  20. Hash Searching • เป็นวิธีการค้นหาข้อมูลที่ใช้การแปลงคีย์ (Key) ให้เป็นตำแหน่ง(Address) ที่อยู่ในพื้นที่เก็บข้อมูล โดยใช้เทคนิคการสร้างตารางมาเพื่อเก็บคีย์ดังกล่าว • การแปลงคีย์ให้เป็นแอดเดรส คือ การแปลงข้อมูลให้ไปอยู่ในตารางแอดเดรสที่เตรียมไว้ซึ่งตารางนี้เรียกว่า ตารางแฮช (Hash Table) • การแปลงค่านี้ต้องอาศัยฟังชัน H(k) เป็นตัวช่วยในการหาแอดเดรสของค่าคีย์ k (ค่า H(k) คือ แอดเดรสของคีย์ K นั้นเอง)

  21. Hash function • hash function อย่างง่าย hash(key) = key MOD TableSize • TableSizeควรเป็นตัวเลขจำเพาะ(prime number) • การได้ผลลัพธ์เหมือนกันจากค่าคีย์ที่แตกต่างกันเรียกว่าCollision • การแก้ปัญหาCollision ทำโดยการเก็บค่าคีย์ในHash tableแบบ • Separate Chaining • Open Addressing

  22. Separate chaining Key={0, 81, 64, 25, 36, 49, 4, 1, 9, 16} H(x) = x MOD 10

  23. Open addressing with Linear Probing • Key {89, 18, 49, 58, 69} • Hash function: hash(x)=x MOD 10 • Collision resolution strategy: f(i)=i

  24. Open addressing with Quadratic Probing • Key {89, 18, 49, 58, 69} • Hash function: hash(x)=x MOD 10 • Collision resolution strategy: f(i)=i2

  25. 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)

  26. 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.

  27. Rehashing 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

More Related