Bài 19: Bài toán tìm kiếm

Câu hỏi 2 (SGK Kết nối tri thức với cuộc sống - Trang 93)

Hướng dẫn giải

Để tìm phần tử có giá trị bằng 34 trong dãy A = {0, 4, 9, 10, 12, 14, 17, 18, 20, 31, 34, 67} bằng thuật toán tìm kiếm tuần tự, ta sẽ duyệt qua từng phần tử của dãy cho đến khi tìm thấy phần tử cần tìm.

Vì phần tử 34 nằm ở vị trí thứ 11 trong dãy, nên số lần duyệt cần thực hiện để tìm ra phần tử này là 11 lần, bao gồm cả phần tử 34.

Vậy, cần duyệt qua 11 phần tử để tìm ra phần tử có giá trị bằng 34 trong dãy A

(Trả lời bởi Thanh An)
Thảo luận (1)

Câu hỏi 3 (SGK Kết nối tri thức với cuộc sống - Trang 93)

Hướng dẫn giải

Để tìm số lần lật thẻ nhiều nhất để tìm ra thẻ in số K trong dãy A = {0, 4, 9, 10, 12, 14, 17, 18, 20, 31, 34, 67} với phương pháp lật thẻ từ đầu đến cuối và quyết định lật tiếp theo dựa trên số ghi trên thẻ so với số K, ta có thể giả sử trường hợp xấu nhất là K nằm ở đầu dãy hoặc ở cuối dãy.

Nếu K nằm ở đầu dãy, ta sẽ cần lật tất cả các thẻ từ đầu đến khi lật thẻ in số K (lật tối đa 11 lần), sau đó lật thẻ in số K (1 lần), tổng cộng là 12 lần.

Nếu K nằm ở cuối dãy, ta sẽ cần lật tất cả các thẻ từ đầu đến cuối dãy trước khi lật thẻ in số K (lật tối đa 11 lần), sau đó lật thẻ in số K (1 lần), tổng cộng là 12 lần.

Vậy số lần nhiều nhất mà Minh phải lật để tìm ra thẻ in số K là 12 lần.

(Trả lời bởi Thanh An)
Thảo luận (1)

Luyện tập 1 (SGK Kết nối tri thức với cuộc sống - Trang 93)

Hướng dẫn giải

def timTatCaGiaTri(a, x):

    danhSach = [] # Khởi tạo danh sách rỗng để lưu trữ các phần tử tìm thấy

    for i in range(len(a)):

        if a[i] == x:

            danhSach.append(i) # Nếu phần tử được duyệt là phần tử cần tìm, thêm chỉ số của nó vào danh sách

    return danhSach # Trả về danh sách chứa các chỉ số của các phần tử bằng giá trị cần tìm

(Trả lời bởi Thanh An)
Thảo luận (1)

Luyện tập 2 (SGK Kết nối tri thức với cuộc sống - Trang 93)

Hướng dẫn giải

def binary_search(arr, x):
   left = 0
   right = len(arr) - 1

   while left <= right:
       mid = (left + right) // 2

       if arr[mid] == x:
           return mid
       elif arr[mid] < x:
           right = mid - 1
       else:
           left = mid + 1

   return -1

# Sử dụng hàm để tìm kiếm giá trị 5 trong dãy sắp xếp giảm dần [9, 8, 6, 5, 3, 1]
arr = [9, 8, 6, 5, 3, 1]
x = 5
result = binary_search(arr, x)

if result != -1:
   print("Element is present at index", str(result))
else:
   print("Element is not present in array")

(Trả lời bởi Thanh An)
Thảo luận (1)

Vận dụng 1 (SGK Kết nối tri thức với cuộc sống - Trang 93)

Hướng dẫn giải

def sequential_search(names, target):

    found = []

    for name in names:

        if name == target:

            found.append(name)

    return found

# Danh sách tên học sinh trong lớp

class_names = ["An", "Bình", "Cường", "Đạt", "Hoàn", "Minh", "Nam", "Thảo", "Hoàn", "Trung"]

# Tên học sinh cần tìm

target_name = "Hoàn"

# Danh sách tên học sinh trong lớp

class_names = ["An", "Bình", "Cường", "Đạt", "Hoàn", "Minh", "Nam", "Thảo", "Hoàn", "Trung"]

# Tên học sinh cần tìm

target_name = "Hoàn"

# Gọi hàm tìm kiếm tuần tự

found_names = sequential_search(class_names, target_name)

if len(found_names) > 0:

    print("Các học sinh có tên là", target_name, "là:", found_names)

else:

    print("Không tìm thấy học sinh nào có tên là", target_name)

(Trả lời bởi Thanh An)
Thảo luận (1)

Vận dụng 2 (SGK Kết nối tri thức với cuộc sống - Trang 93)

Hướng dẫn giải

def binary_search(names, target):

 low = 0

 high = len(names) - 1

 while low <= high:

  mid = (low + high) // 2

  mid_name = names[mid]

  if mid_name == target:

   return mid

  elif mid_name < target:

   low = mid + 1

  else:

   high = mid - 1

return -1

# Danh sách tên học sinh trong lớp (đã được sắp xếp theo thứ tự bảng chữ cái)

class_names = ["An", "Bình", "Cường", "Đạt", "Hoàn", "Minh", "Nam", "Thảo", "Trung"]

# Tên học sinh cần tìm

target_name = "Minh"

# Gọi hàm tìm kiếm nhị phân

result = binary_search(class_names, target_name)

if result != -1:

 print("Học sinh có tên là", target_name, "được tìm thấy tại vị trí", result)

else:

 print("Học sinh có tên là", target_name, "không tồn tại trong danh sách.")

(Trả lời bởi Thanh An)
Thảo luận (1)