Tải bản đầy đủ (.pdf) (10 trang)

Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 8: Các thuật toán tìm kiếm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (478.86 KB, 10 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>C</b>

<b>ấu trúc dữ liệu và giải thuật</b>



<b>Bài 8: Các thu</b>

<b>ật tốn tìm kiếm</b>



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

<b>N</b>

<b>ội dung:</b>



8.1. Khái ni

ệm về tìm kiếm (3)



8.2. Phương pháp tìm kiếm tuần tự (7)


8.3. Phương pháp tìm kiếm nhị phân (8)


8.4. Phương pháp tìm kiếm nội suy (7)



<b>Tham khảo:</b>


1. Data structures and Algorithms Searching.htm


2. Kyle Loudon Mastering Algorithms, Chapter 12 Sorting and Searching
3. Lecture 19 Sequential and Binary Search.htm


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

<b>8.1. Khái ni</b>

<b>ệm về tìm kiếm (1/3)</b>



 Trong thực tế, việc xác định vị trí của một phần tử nào đó
trong một danh sách ( đã sắp xếp hoặc chưa sắp xếp) có
ý nghĩa quan trọng và được dùng trong nhiều ứng dụng.


 Ví dụ 1: một chương trình tra cứu từ điển, chương trình
cần trả lời ngay nghĩa của một từ nào đó.


 Ví dụ 2: trong một danh sách thí sinh, chương trình cần
đưa ra tất cả thơng tin của thí sinh thỏa mãn một số tiêu
chí nào đó.



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

Trong th

ực tế, với các ý tưởng khác nhau dẫn


đến các phương pháp tìm kiếm khác nhau.



Phương pháp tìm kiếm thơng dụng nhất trong



th

ực tế là

<b>tìm ki</b>

<b>ếm tuần tự</b>

. Đây là phương pháp



</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

<b>8.1. Khái ni</b>

<b>ệm về tìm kiếm (3/3)</b>



 <b>Phương pháp tìm kiếm nhị phân</b>: chia danh sách thành


các danh sách con và tìm kiếm trên đó. Với bộ dữ liệu lớn,
phương pháp này cho tốc độ tìm kiếm tốt hơn phương


pháp tuần tự.


 <b>Phương pháp tìm kiếm nội suy</b>: cũng giống như


phương pháp tìm kiếm nhị phân, phương pháp này cũng
chia danh sách thành các danh sách con và tìm kiếm trên
đó.


 Phương pháp tìm kiếm nội suy nhanh hơn phương pháp


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

Đây là phương pháp tìm kiếm đơn giản nhất.


Ý t

ưởng chung của tìm kiếm tuần tự:



 Sử dụng vịng lặp để có thể duyệt cả danh sách, xuất
phát từ phần tử đầu tiên trong danh sách.



</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

<b>8.1. Tìm ki</b>

<b>ếm tuần tự (2/7)</b>



Sub LinearSearch(x:int, a[]: Int, loc: Int)


i:=1



While (i<=n) And (x<>a[i])


i:=i+1



End While



If i<=n Then loc = i Else loc = 0


End Sub



</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

 Giả sử cho danh sách số nguyên gồm:


 Ví dụ: tìm vị trí phần tử có giá trị bằng <b>11</b>, việc tìm kiếm
bắt đầu từ phần tử có giá trị <b>17</b>, đến <b>23</b>, đến <b>5</b>, đến <b>11: </b>
đưa ra thơng báo đã tìm thấy, trả về <b>vị trí thứ 4 trong </b>
<b>danh sách.</b>


 Ví dụ: tìm vị trí phần tử có giá trị bằng <b>7</b>, việc tìm kiếm bắt
đầu từ phần tử có giá trị 17, qua cả danh sách, nhưng


ấy, trả về thông tin: <b>ấy</b>


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

<b>8.1. Tìm ki</b>

<b>ếm tuần tự (4/7)</b>



 <b>Một số ưu điểm của thuật tốn tìm kiếm tuần tự</b>:



 Rất đơn giản để nắm bắt.


 Đơn giản trong việc thực hiện.


 Danh sách ban đầu không cần thiết phải được sắp theo


một thứ tự nào đó.


 <b>Nhược điểm của phương pháp tìm kiếm tuần tự</b>:


 Hiệu quả của phương pháp rất kém.


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

<b>Use a Sentinel to Improve the Performance</b>



Sub LinearSearch2(x:int, a[]: Int, loc: Int)


a[n+1] = x: n = n + 1: i = 1



While (x<>

a[i])



i = i+1


End While



</div>

<!--links-->

×