Tin học 11 · Chung, Khoa học máy tính và Tin học ứng dụng
Tin họcLớp 11Phần 6. KHMT · Chủ đề 6. Kĩ thuật lập trình · Chọn định hướng, không bắt buộc THUD

Bài 20 · KHMT. Thực hành bài toán tìm kiếm

Mục tiêu bài học

  • Giải thích và vận dụng kiến thức về thực hành bài toán tìm kiếm.
  • Tạo hoặc đánh giá sản phẩm cụ thể, giải thích kết quả và kiểm tra điều kiện áp dụng.

Bài giảng

Hiểu cách hoạt động

Thực hành tìm nhị phân cần giữ bất biến: nếu mục tiêu có trong dãy thì nằm trong khoảng[l, r]chưa loại. Cập nhật l=m+1 hoặc r=m-1 để bỏ vị trí giữa đã kiểm tra và bảo đảm thu hẹp. Lập vết cả trường hợp không thấy. Không sắp xếp dãy mà vẫn báo vị trí như dãy gốc nếu yêu cầu giữ vị trí ban đầu.

Làm và tự kiểm tra

Chương trình mẫu đã kiểm tra bằng thực thi trong quá trình biên soạn:

def tim(a,x):
    l=0
    r=len(a)-1
    while l<=r:
        m=(l+r)//2
        if a[m]==x:
            return m
        if a[m]<x:
            l=m+1
        else:
            r=m-1
    return -1
print(tim([1,4,7,10,13,16],13))

Với đầu vào cố định như chương trình, kết quả in: 4. Mẫu vị trí4; quy ước đếm từ0.

Ghi nhớ

Thực hành tìm nhị phân cần giữ bất biến: nếu mục tiêu có trong dãy thì nằm trong khoảng[l, r]chưa loại.

Bài tập

Đã đúng 0/6 câu

  1. Đọc ngữ liệu

    Dãy tăng mẫu[1,4,7,10,13,16],tìm13; chỉ số từ0,không thấy trả−1.

  2. Câu 1Mức 2Trả lời ngắn

    Chương trình Python sau in ra số nào?

    def tim(a,x):
        l=0
        r=len(a)-1
        while l<=r:
            m=(l+r)//2
            if a[m]==x:
                return m
            if a[m]<x:
                l=m+1
            else:
                r=m-1
        return -1
    print(tim([],3))
    
  3. Câu 2Mức 2Trả lời ngắn

    Chương trình Python sau in ra số nào?

    def tim(a,x):
        l=0
        r=len(a)-1
        while l<=r:
            m=(l+r)//2
            if a[m]==x:
                return m
            if a[m]<x:
                l=m+1
            else:
                r=m-1
        return -1
    print(tim([2],2))
    
  4. Câu 3Mức 2Trả lời ngắn

    Chương trình Python sau in ra số nào?

    def tim(a,x):
        l=0
        r=len(a)-1
        while l<=r:
            m=(l+r)//2
            if a[m]==x:
                return m
            if a[m]<x:
                l=m+1
            else:
                r=m-1
        return -1
    print(tim([1,4,7,10],6))
    
  5. Câu 4Mức 2Trắc nghiệm 1 đáp án

    Cập nhật khi a[m]<x trong dãy tăng là gì?

  6. Câu 5Mức 2Đúng / Sai

    Tìm nhị phân không thấy phải có điều kiện kết thúc khoảng rỗng.

  7. Câu 6Mức 2Sắp xếp thứ tự

    Sắp xếp các bước theo phương pháp giải của nhiệm vụ này.

    Sắp xếp các mục theo thứ tự đúng (kéo thả hoặc dùng nút mũi tên).

    1. 1Thu hẹp bỏ phần không thể chứa
    2. 2Dừng khi thấy hoặc khoảng rỗng
    3. 3Chọn giữa và so sánh
    4. 4Đặt khoảng toàn dãy
  8. Câu 7Mức 3Tự luận

    Viết tìm nhị phân trong dãy mẫu, tìm13. Viết chương trình hoàn chỉnh và kiểm tra theo dữ liệu mẫu. Người dạy chấm mã và lập luận, không so khớp kí tự mã.

    0 từ

    0/10 ảnh

    Có thể chụp nhiều trang. Ảnh được lưu cùng bài làm và giáo viên sẽ chấm trên ảnh.

    Vẽ bài làm

    Ảnh bài làm

    Cuộn chuột hoặc chụm hai ngón để phóng to · kéo để di chuyển · phím R để xoay

  9. Câu 8Mức 4Tự luận

    Nếu dùng l=m thay l=m+1, có rủi ro gì? Cho ca.

    0 từ

    0/10 ảnh

    Có thể chụp nhiều trang. Ảnh được lưu cùng bài làm và giáo viên sẽ chấm trên ảnh.

    Vẽ bài làm

    Ảnh bài làm

    Cuộn chuột hoặc chụm hai ngón để phóng to · kéo để di chuyển · phím R để xoay