Slide bài giảng Khoa học máy tính 11 cánh diều Chủ đề F(CS) Bài 7: Lập trình giải bài toán tìm kiếm

Slide điện tử Chủ đề F(CS) Bài 7: Lập trình giải bài toán tìm kiếm. Trình bày với các hiệu ứng hiện đại, hấp dẫn. Giúp học sinh hứng thú học bài. Học nhanh, nhớ lâu. Có tài liệu này, hiệu quả học tập của học môn Khoa học máy tính 11 Cánh diều sẽ khác biệt

Bạn chưa đủ điều kiện để xem được slide bài này. => Xem slide bài mẫu

Tóm lược nội dung

BÀI 7. LẬP TRÌNH GIẢI BÀI TOÁN TÌM KIẾM

 

HOẠT ĐỘNG KHỞI ĐỘNG

GV đặt câu hỏi: Khi mới tạo một tài khoản người dùng, em được yêu cầu nhập tên người dùng “user name”. Có trường hợp em phải nhập lại tên khác vì tên vừa nhập đã được sử dụng. Theo em, máy tính sẽ làm gì ngay sau khi nhận được yêu cầu tạo tài khoản mới? Hãy diễn đạt điều này thành một bài toán.

NỘI DUNG BÀI HỌC GỒM

  • Bài toán tìm kiếm
    • Khái niệm bài toán tìm kiếm
    • Tìm kiếm tuần tự bằng hàm của Python
  • Thuật toán tìm kiếm tuần tự
  • Thuật toán tìm kiếm nhị phân
  • Thực hành lập trình giải bài toán tìm kiếm
  • Luyện tập
  • Vận dụng

HOẠT ĐỘNG HÌNH THÀNH KIẾN THỨC

Hoạt động 1: Bài toán tìm kiếm

a) Khái niệm bài toán tìm kiếm

GV yêu cầu học sinh trao đổi: Thế nào là Bài toán tìm kiếm ? 

Nội dung gợi ý:

Theo nghĩa chung nhất, bài toán tìm kiếm là: Cho một yêu cầu tìm kiếm và một tập hợp dữ liệu là phạm vi tìm kiếm. Hãy tìm mục (các mục) dữ liệu đáp ứng yêu cầu tìm kiếm đã cho hoặc khẳng định không có mục dữ liệu nào đáp ứng yêu cầu đó.

b) Tìm kiếm tuần tự bằng hàm của Python

Nêu phương thức tìm kiếm tuần tự hằng hàm của Python.

Nội dung gợi ý:

- Phương thức index thực hiện tìm kiếm theo cách tuần tự cho dãy xâu kí tự, mảng hoặc danh sách.

- Các trường hợp trả về khi dùng index

+ Nếu xuất hiện nhiều lần thì đưa ra chỉ số của lần xuất hiện đầu tiên.

Ví dụ: 

a = [1, 3, 3, 4, 3, 5, 6]

print(a.index(3))

+ Báo lỗi “valueError” nếu không tìm thấy.

Ví dụ:

a = [1, 2, 3, 4, 5, 6]

print(a.index(5, 1, 4))

+ Phương thức index có hai tham số tùy chọn: lohi để hạn chế thực hiện tìm kiếm chỉ trong đoạn con của dãy số, bắt đầu từ chỉ số lo (lowest) và kết thúc ở hi (highest).

Cú pháp:

dãy_số.index(giá_trị, lo, hi)

Hoạt động 2: Thuật toán tìm kiếm tuần tự

Thế nào là thực hiện thuật toán tìm kiếm tuần tự ?

Nội dung gợi ý:

- Thực hiện tìm kiếm tuần tự bằng phép lặp duyệt từ đầu dãy số với điều kiện dừng khi “tìm thấy” hoặc “đã xét hết dãy số”.

Hoạt động 3: Thuật toán tìm kiếm nhị phân

Dựa vào mô tả thuật toán tìm kiếm nhị phân trong Hình 3, em hãy tóm tắt ý tưởng của thuật toán này.

Nội dung gợi ý:

- Nếu dãy số đã sắp xếp theo thứ tự thì có thể áp dụng thuật toán tìm kiếm nhị phân.

NỘI DUNG BÀI HỌC GỒM

NỘI DUNG BÀI HỌC GỒM

- Phép lặp lại thực hiện tìm kiếm nhị phân chia đôi dãy số tại điểm “giữa” có chỉ số (lo + hi)//2, bỏ bớt nửa dãy cho đến khi “tìm thấy” hoặc hết dãy.

Hoạt động 4: Thực hành lập trình giải bài toán tìm kiếm

HS thảo luận trả lời câu hỏi: Em hãy thực hiện các yêu cầu sau:

a) Hãy viết mã giả cho thuật toán tìm kiếm nhị phân.

b) Hãy ước lượng số lần thực hiện vòng lặp trong thuật toán tìm kiếm nhị phân.

c) Hãy ước lượng độ phức tạp thời gian của thuật toán tìm kiếm nhị phân.

Nội dung gợi ý:

a) Mã giả cho thuật toán tìm kiếm nhị phân

def tkNhiPhan (x, a) #Phạm vi tìm kiếm là dãy ban đầu

lo ← 0

hi ← len(a) - 1

while (lo ≤ hi): #Vẫn còn trong phạm vi tìm kiếm

m = (lo + hi) //2  #Xác định phần tử ở giữa phạm vi tìm kiếm

if a == x:

return m #Thông báo tìm thấy x ở vị trí m và kết thúc

elif x < am:

hi ← m – 1 #Loại bỏ nữa dãy chắc chắn không chứa x

else: 

lo ← m + 1 #Phạm vi tìm kiếm là nửa dãy còn lại

return  - 1 #Thông báo không tìm thấy x và kết thúc

b) Ước lượng số lần thực hiện vòng lặp trong thuật toán tìm kiếm nhị phân: Kết thúc khi 2k ~ n tức là k ~ log2n.

c) Ước lượng độ phức tạp thời gian của thuật toán tìm kiếm nhị phân: Độ phwucs tạp thời gian logarit, O(log2n).

HOẠT ĐỘNG LUYỆN TẬP

Câu 1: Quá trình giải toán bằng lập trình trên máy tính có …bước:

A. 2

B. 3

C. 4

D. 5

Câu 2: Bước xác định bài toán là:

A. Lựa chọn cách tổ chức dữ liệu và sử dụng ngôn ngữ lập trình để điễn đạt đúng thuật toán.

B. Xác định những giá trị đã cho và mối quan hệ giữa chúng.

C. Tìm thuật toán dựa trên bước xác định bài toán, dựa trên mối quan hệ giữa các đại lượng đã cho với những giá trị cần tìm, đồng thời xác định cách tổ chức dữ liệu có thể sử dụng tương ứng với thuật toán đó.

D. Dùng các bộ dữ liệu khác nhau để kiểm thử và hiệu chỉnh chương trình.

Câu 3: Các bước giải bài toán trên máy tính:

A. Xác định bài toán → Tìm thuật toán của bài toán và cách tổ chức dữ liệu → Kiểm thử, chạy và hiệu chỉnh chương trình → Viết chương trình.

B. Viết chương trình → Xác định bài toán → Tìm thuật toán của bài toán và cách tổ chức dữ liệu → Kiểm thử, chạy và hiệu chỉnh chương trình.

C. Xác định bài toán → Kiểm thử, chạy và hiệu chỉnh chương trình → Viết chương trình → Tìm thuật toán của bài toán và cách tổ chức dữ liệu.

D. Xác định bài toán → Tìm thuật toán của bài toán và cách tổ chức dữ liệu → Viết chương trình  → Kiểm thử, chạy và hiệu chỉnh chương trình.

Câu 4: Bước tìm thuật toán của bài toán và cách tổ chức dữ liệu là:

A. Lựa chọn cách tổ chức dữ liệu và sử dụng ngôn ngữ lập trình để điễn đạt đúng thuật toán.

B. Xác định những giá trị đã cho và mối quan hệ giữa chúng.

C. Tìm thuật toán dựa trên bước xác định bài toán, dựa trên mối quan hệ giữa các đại lượng đã cho với những giá trị cần tìm, đồng thời xác định cách tổ chức dữ liệu có thể sử dụng tương ứng với thuật toán đó.

D. Dùng các bộ dữ liệu khác nhau để kiểm thử và hiệu chỉnh chương trình.

Câu 5: Bước viết chương trình là:

A. Lựa chọn cách tổ chức dữ liệu và sử dụng ngôn ngữ lập trình để điễn đạt đúng thuật toán.

B. Xác định những giá trị đã cho và mối quan hệ giữa chúng.

C. Tìm thuật toán dựa trên bước xác định bài toán, dựa trên mối quan hệ giữa các đại lượng đã cho với những giá trị cần tìm, đồng thời xác định cách tổ chức dữ liệu có thể sử dụng tương ứng với thuật toán đó.

D. Dùng các bộ dữ liệu khác nhau để kiểm thử và hiệu chỉnh chương trình.

Đáp án gợi ý:

Câu 1

Câu 2

Câu 3

Câu 4

Câu 5

C

B

D

C

A

HOẠT ĐỘNG VẬN DỤNG

GV yêu cầu HS hoàn thành Vận dụng SGK trang 120: 

Viết chương trình tìm kiếm vị trí tên của một người trong các danh sách sau:

a) Danh sách học sinh trong lớp em.

b) Danh sách tên các chủ tài khoản ngân hàng (không có dấu) và đã được sắp xếp theo thứ tự bảng chữ cái.