Tin Học KHMT
Ôn tập Tin học THPT › Tin học 11 - Khoa học máy tính › Bài 21
Tin học 11 - Khoa học máy tính

Bài 21. Thuật toán tìm kiếm tuần tự

Bài học giới thiệu bài toán tìm kiếm trong một dãy dữ liệu, và thuật toán đơn giản nhất để giải quyết bài toán đó - tìm kiếm tuần tự - cùng cách cài đặt bằng Python.

Chủ đề F · Lập trình, Thuật toán & CTDL (KHMT) - đọc khoảng 11 phút · 26 câu luyện tập trong ứng dụng

Tương ứng sách giáo khoa
  • Cánh DiềuTin học 11 (Khoa học máy tính) - Chủ đề F(CS) · Bài 7. Lập trình giải bài toán tìm kiếmtr. 117
  • Kết nối tri thứcTin học 11 (Khoa học máy tính) - Bài 19. Bài toán tìm kiếmtr. 89–93
Xem bảng đối chiếu cả bộ →

Bắt đầu bằng một hình dung

Giả sử bạn được phân công đón tiếp khách tại một buổi hội thảo. Trên bàn có một tờ danh sách đăng ký, ghi tên hơn một trăm người theo đúng thứ tự họ đăng ký trực tuyến - hoàn toàn không được sắp xếp theo bảng chữ cái. Khi một người bước tới và đọc tên mình, bạn phải xác định xem tên đó có trong danh sách hay không, và nếu có thì ở dòng thứ mấy để đánh dấu.

Vì danh sách không hề được sắp xếp, cách duy nhất chắc chắn đúng là dò từng dòng một: đọc dòng 1, so tên; chưa khớp thì đọc dòng 2, so tên; cứ như vậy cho đến khi gặp đúng tên cần tìm (dừng lại, biết ngay vị trí), hoặc đọc hết toàn bộ danh sách mà vẫn không thấy (kết luận người này chưa đăng ký). Cách dò tuần tự từng dòng một như vậy - đơn giản nhưng có thể mất khá nhiều thời gian nếu danh sách dài và tên cần tìm nằm ở cuối - chính là ý tưởng của thuật toán mà ta sẽ tìm hiểu trong bài này.

Nội dung bài học

  1. Bài toán tìm kiếm
  2. Ý tưởng của tìm kiếm tuần tự

Tóm tắt lý thuyết cần nhớ

  • Tìm kiếm tuần tự duyệt lần lượt từng phần tử của dãy từ đầu đến cuối, so sánh với giá trị cần tìm.
  • Nếu gặp phần tử khớp, thuật toán trả về ngay vị trí (chỉ số) của phần tử đó và dừng lại, không xét tiếp.
  • Nếu duyệt hết dãy mà không gặp, thuật toán kết luận ‘không có’ (trong Python thường trả về -1).
  • Ưu điểm là đơn giản và dùng được cả với dãy chưa sắp xếp; nhược điểm là chậm khi dãy dài mà giá trị cần tìm ở gần cuối hoặc không tồn tại.

Thuật ngữ tiếng Anh trong bài

Tiếng AnhĐọc làNghĩa
searchXƠ-chờtìm kiếm
Đi tìm xem một phần tử có trong dãy hay không - giống tìm một cuốn sách trên giá sách đầy ắp.
algorithmAL-gô-rít-thầmthuật toán
Các bước làm một việc theo đúng thứ tự để ra kết quả - như công thức pha mì gói: đổ nước sôi, chờ 3 phút, rồi ăn.

Câu hỏi trắc nghiệm có đáp án

Mấy câu mẫu để bạn tự kiểm tra ngay. Trong ứng dụng, bài này có đủ 26 câu, chấm điểm tự động và giải thích từng câu sai.

Câu 1 · Nhận biết
Thuật toán tìm kiếm tuần tự hoạt động theo cách nào dưới đây?
  1. Chia đôi phạm vi tìm kiếm sau mỗi lần so sánh để loại bỏ bớt một nửa số phần tử
  2. Duyệt lần lượt từng phần tử của dãy theo đúng thứ tự, so sánh với giá trị cần tìm
  3. Sắp xếp lại dãy theo thứ tự tăng dần rồi mới bắt đầu tìm từ đầu đến cuối dãy
  4. Chỉ so sánh với phần tử đứng giữa dãy, nếu khác thì kết luận là dãy không có
Đáp án: B - Tìm kiếm tuần tự (tìm kiếm tuyến tính) xét lần lượt từng phần tử theo đúng thứ tự xuất hiện trong dãy, so sánh với giá trị cần tìm cho đến khi gặp hoặc hết dãy - không chia đôi phạm vi và cũng không yêu cầu sắp xếp trước.
Câu 2 · Nhận biết
Ngay khi tìm kiếm tuần tự gặp một phần tử bằng đúng giá trị cần tìm, thuật toán sẽ làm gì tiếp theo?
  1. Xoá phần tử đó khỏi dãy rồi tìm tiếp
  2. Tiếp tục so sánh hết các phần tử còn lại để chắc chắn
  3. Trả về vị trí của phần tử đó và dừng lại ngay
  4. Bắt đầu lại việc so sánh từ phần tử đầu tiên
Đáp án: C - Khi gặp phần tử trùng khớp, thuật toán dừng ngay và trả về vị trí (chỉ số) của phần tử đó; không cần so sánh tiếp các phần tử còn lại vì đã có câu trả lời.
Câu 3 · Thông hiểu
Cho dãy có chỉ số từ 0 đến 4 với các giá trị lần lượt là 4, 8, 2, 9, 5. Nếu tìm kiếm tuần tự giá trị 9, thuật toán sẽ trả về chỉ số nào?
  1. 3
  2. 1
  3. 2
  4. Không tìm thấy
Đáp án: A - Duyệt lần lượt từ chỉ số 0: các giá trị 4, 8, 2 đều chưa khớp; đến chỉ số 3 gặp đúng giá trị 9 nên thuật toán dừng lại và trả về chỉ số 3.
Câu Đúng/Sai (Phần II) · Thông hiểu
Cho biết mỗi phát biểu sau đúng hay sai:
  • a)Tìm kiếm tuần tự luôn bắt đầu so sánh từ phần tử đầu tiên của dãy trước khi xét đến các phần tử khác.Đúng
  • b)Tìm kiếm tuần tự chỉ cho kết quả đúng khi dãy dữ liệu đã được sắp xếp tăng dần từ trước.Sai
  • c)Trong trường hợp xấu nhất - giá trị cần tìm nằm ở cuối dãy hoặc không có trong dãy - tìm kiếm tuần tự phải so sánh với tất cả các phần tử.Đúng
  • d)Nếu phần tử đầu tiên của dãy đã khớp với giá trị cần tìm, tìm kiếm tuần tự vẫn phải tiếp tục so sánh với toàn bộ các phần tử còn lại.Sai
Vì sao:
  • (a) Đúng - thuật toán luôn xuất phát từ chỉ số 0, tức phần tử đầu tiên.
  • (b) Sai - tìm kiếm tuần tự vẫn cho kết quả đúng cả khi dãy chưa được sắp xếp, vì nó chỉ so sánh trực tiếp từng phần tử với giá trị cần tìm.
  • (c) Đúng - khi không tìm thấy hoặc giá trị ở cuối dãy, thuật toán phải duyệt qua toàn bộ phần tử.
  • (d) Sai - thuật toán dừng ngay khi gặp phần tử khớp đầu tiên, không cần so sánh tiếp.

Thử ngay: minh hoạ từng bước

Bấm từng bước để tự xem cơ chế hoạt động, hoặc bấm “Tự chạy” cho nó tiến mỗi giây một lần. Đổi được dữ liệu đầu vào - không cần đăng nhập.

Học trọn bài này trong ứng dụng

Bài giảng đầy đủ, 26 câu luyện tập chấm tự động, thi thử đúng cấu trúc đề tốt nghiệp (24 trắc nghiệm + 4 Đúng/Sai), bài thực hành máy tự chấm và gia sư AI giải thích chỗ sai.

Mở bài 21 trong ứng dụng

Phần học miễn phí, không cần tạo tài khoản.