Tìm lần lượt từ đầu danh sách
**Tìm kiếm tuần tự** xét các phần tử lần lượt từ đầu danh sách. Đầu vào gồm danh sách và giá trị cần tìm. Đầu ra là thông báo tìm thấy cùng vị trí tìm được, hoặc thông báo không tìm thấy.
Danh sách không cần được sắp xếp trước. Với dãy 14, 5, 22, 9, 17, các vị trí được đánh số từ 1 đến 5. Muốn tìm 9, ta xét 14 rồi 5, 22, cuối cùng gặp 9 ở vị trí 4. Khi đó dừng; không cần xét 17.
Ở đây mỗi lần xét một phần tử được tính là một lần so sánh với giá trị cần tìm. Vị trí 4 khác với giá trị 9: vị trí cho biết phần tử nằm ở đâu, giá trị cho biết nội dung của phần tử.
Bài luyện
Trong dãy 14, 5, 22, 9, 17, đánh số vị trí từ 1. Tìm kiếm tuần tự giá trị 9 trả vị trí nào?
Vị trí 3 chứa 22.
9 là phần tử thứ tư của dãy.
9 là giá trị cần tìm, không phải vị trí trong dãy năm phần tử.
Vị trí 5 chứa 17.
Lời giải
Lần lượt xét 14 ở vị trí 1, 5 ở vị trí 2, 22 ở vị trí 3 rồi 9 ở vị trí 4. Vì gặp đúng giá trị cần tìm, thuật toán trả vị trí 4 và dừng.
Hai tình huống làm việc tìm kiếm kết thúc
Với một danh sách có ít nhất một phần tử, có thể mô tả cách làm như sau:
1. Xét phần tử đầu tiên.
2. Nếu bằng giá trị cần tìm, thông báo tìm thấy và vị trí, rồi kết thúc.
3. Nếu chưa bằng và còn phần tử phía sau, chuyển sang phần tử tiếp theo rồi lặp lại bước 2.
4. Nếu đã xét hết mà không gặp giá trị cần tìm, thông báo không tìm thấy và kết thúc.
Thuật toán còn tìm tiếp khi **chưa tìm thấy và chưa xét hết**. Nó dừng khi **tìm thấy hoặc đã xét hết**. Nếu danh sách ban đầu rỗng thì không có phần tử để xét và kết quả là không tìm thấy.
Khi có nhiều phần tử cùng giá trị, cách tìm từ đầu và dừng ngay này trả vị trí gặp đầu tiên. Không nhầm việc đã gặp một phần tử với việc đã liệt kê mọi vị trí trùng.
Bài luyện
Khi nào tìm kiếm tuần tự theo cách vừa học còn tiếp tục?
Đã tìm thấy thì kết thúc theo yêu cầu đang xét.
Xét hết mà chưa thấy thì kết luận không tìm thấy.
Hai điều kiện này cùng đúng thì còn tìm tiếp.
Tìm kiếm tuần tự không bắt buộc danh sách đã sắp xếp.
Lời giải
Chỉ tiếp tục khi chưa gặp giá trị cần tìm và còn phần tử chưa xét. Nếu một trong hai điều kiện không còn đúng, thuật toán dừng.
Thực hành mô phỏng bằng thẻ số
Viết 14, 5, 22, 9, 17 lên năm thẻ và đặt theo đúng thứ tự. Ghi vị trí 1–5 phía dưới, không sắp xếp lại trong quá trình tìm. Lập bảng để tìm 9:
| Lần xét | Vị trí | Giá trị | Có bằng 9? |
|---|---|---|---|
| 1 | 1 | 14 | Không |
| 2 | 2 | 5 | Không |
| 3 | 3 | 22 | Không |
| 4 | 4 | 9 | Có, dừng |
Đầu ra là tìm thấy 9 ở vị trí 4, sau bốn lần xét. Làm lượt mới để tìm 8: phải xét đủ năm thẻ rồi kết luận không tìm thấy. Kiểm bảng theo từng thẻ để phát hiện bỏ qua phần tử hoặc ghi nhầm vị trí.
Có thể thử thêm giá trị đầu và cuối dãy. Tìm 14 dừng sau một lần xét; tìm 17 cần năm lần. Số lần tìm phụ thuộc dữ liệu và vị trí cần tìm.
Bài luyện
Tìm 8 bằng tìm kiếm tuần tự trong đúng dãy năm số trên cần xét bao nhiêu phần tử trước khi kết luận không thấy?
Sau bốn phần tử vẫn chưa xét 17.
Chưa gặp ở đầu không có nghĩa cả dãy không có.
Dãy chỉ có năm phần tử, không xét thêm một phần tử ngoài dãy.
Phải xét hết năm phần tử vì không có 8.
Lời giải
Các giá trị 14, 5, 22, 9, 17 đều khác 8. Sau khi xét phần tử thứ năm mới hết dãy, nên kết luận không tìm thấy sau năm lần xét.
Bài luyện
Dãy 3, 1, 3 được tìm từ đầu và dừng ngay khi gặp giá trị 3. Đầu ra là gì?
Ngay phần tử đầu đã bằng 3 nên dừng.
Cách đang xét dừng ở lần gặp đầu, không tiếp tục liệt kê mọi vị trí.
Không bỏ qua giá trị 3 ở đầu dãy.
Giá trị trùng không ngăn tìm kiếm tuần tự.
Lời giải
Phần tử đầu tiên chứa 3. Thuật toán thông báo vị trí 1 và kết thúc, nên chưa xét tới giá trị 3 ở vị trí 3.
Đang học