Bài 5: Thực Hành Thiết Kế Thuật Toán Theo Kĩ Thuật Đệ Quy | Chuyên đề học tập Tin học 11 (Định hướng khoa học máy tính) | Chuyên Đề 1: Thực Hành Thiết Kế Thuật Toán Theo Kĩ Thuật Đệ Quy - Lớp 11 - Kết Nối Tri Thức Với Cuộc Sống

Chuyên đề học tập Tin học 11 - Bài 5: Thực Hành Thiết Kế Thuật Toán Theo Kĩ Thuật Đệ Quy - Thực hành thiết kế thuật toán sắp xếp chèn và chuyển đổi số thập phân sang nhị phân bằng kĩ thuật đệ quy.

Nội Dung Chính

  1. NHIỆM VỤ 1
  2. NHIỆM VỤ 2

(Trang 25)

Sau bài này em sẽ:

  • Thực hành thiết kế một số bài toán sử dụng kĩ thuật đệ quy.

hinh-anh-bai-5-thuc-hanh-thiet-ke-thuat-toan-theo-ki-thuat-de-quy-13821-0

Hãy phân tích một số ưu nhược điểm của việc áp dụng kĩ thuật đệ quy trong lập trình.

hinh-anh-bai-5-thuc-hanh-thiet-ke-thuat-toan-theo-ki-thuat-de-quy-13821-1

NHIỆM VỤ 1

Thuật toán sắp xếp chèn.

Viết chương trình mô tả thuật toán sắp xếp chèn theo kĩ thuật đệ quy.

Hướng dẫn:

Chúng ta sẽ phân tích lại một lần nữa thuật toán sắp xếp chèn để tìm ra quy luật cho việc thiết lập đệ quy. Thuật toán sắp xếp chèn được mô tả ngắn gọn như sau:

1 for i in range(1,n):

2              chèn phần tử A[i] vào vị trí đúng của các phần tử A[0], A[1],..., A[i-1]

Chú ý rằng thao tác tại dòng 2 mô tả trên chỉ phụ thuộc vào các chỉ số từ 0 đến i và không phụ thuộc vào phần còn lại của dãy. Từ nhận xét này sẽ dẫn đến ý tưởng của việc thiết kế đệ quy như sau:

Giả sử gọi insertionSortRec(A,i) là thao tác tương ứng với dòng 2 của mô tả trên, khi đó chương trình trên có thể viết lại dưới dạng sau:

1 def insertionSortRec(A,i):

2         if i > 0:

3              insertionSortRec(A,i-1)

4              chèn phần tử A[i] vào vị trí đúng của các phần tử A[0], A[1],..., A[i-1]

Lệnh gọi đệ quy tại dòng 3 với điều kiện i > 0 trên sẽ đảm bảo các phần tử A[0], A[1],..., A[i-1] đã được sắp xếp đúng. Do đó việc chèn tại dòng 4 sẽ thực hiện chính xác thao tác chèn của thuật toán.

Như vậy thuật toán sắp xếp chèn có thể viết lại bằng kĩ thuật đệ quy theo hàm insertionSortRec(A,i) như sau. Chú ý các lệnh tại dòng từ 4 đến 9 chính là thao tác lỗi "chèn" của thuật toán này.

(Trang 26)

 def insertionSortRec(A,i):

2          if i > 0:

3                insertionSortRec(A,i-1)

4                value = A[i]

5                j = i-1

6               while j >= 0 and A[j] > value:

7                        A[j+1] = A[j]

8                         j = j - 1

9                A[j+1] = value

Lời gọi đệ quy của hàm là:

insertionSortRec(A, len(A) - 1)

NHIỆM VỤ 2

Chuyển số thập phân sang hệ nhị phân.

Cho trước số tự nhiên n (n ≥ 0), cần đưa ra biểu diễn nhị phân của số n. Ví dụ nếu n = 11 thì kết quả phải là chuỗi nhị phân "1011".

Hướng dẫn:

Để thiết kế được chương trình này, chúng ta quan sát Bảng 5.1 mô tả các bước tính được khai triển nhị phân của một số tự nhiên n = 11.

Bảng 5.1. Các bước triển khai nhị phân n = 11

STT n n//2 n%2
1 11 5 1
2 5 2 1
3 2 1 0
4 1 0 1
5 0   Số nhị phân cần tìm là 1011, dãy các số dư theo thứ tự ngược lại, từ dưới lên trên. 

Quá trình thực hiện như sau: Lần lượt biến đổi n = n//2, mỗi lần như vậy cần ghi nhớ lại số dư n%2. Quá trình kết thúc khi n = 0. Kết quả là dãy các số dư được ghép lại theo thứ tự ngược từ dưới lên.

Theo bảng trên, biểu diễn số 11 trong hệ nhị phân là "1011", trong đó kí tự cuối cùng là "1" chính là số dư 11%2, phần đầu của xâu là "101" chính là biểu diễn nhị phân của số 11//2. Gọi binary(n) là xâu biểu diễn nhị phân của số tự nhiên n. Khi đó theo cách phân tích trên chúng ta có công thức truy hồi sau:

binary(n) = binary(n//2) + str(n%2)

(Trang 27)

Lưu ý: Theo Bảng 5.1, quá trình tính số dư sẽ dừng lại khi n = 0 và có thể đặt trường hợp cơ sở là: nếu n = 0 thì hàm trả về xâu rỗng. Nhưng nếu giá trị ban đầu n = 0 thì kết quả phải là "0" nên để hoàn thiện chương trình đệ quy, chúng ta thiết lập hai trường hợp cơ sở với n = 0 và n = 1 như sau: nếu n = 1, hàm trả lại "1"; nếu n = 0, hàm trả lại "0".

Chương trình cuối cùng có thể viết như sau:

1   def binary(n):

2            if n == 0:

3                     return "0"

4            elif n == 1:

5                    return "1"

6             else:

7                   return binary(n//2) + str(n%2)

hinh-anh-bai-5-thuc-hanh-thiet-ke-thuat-toan-theo-ki-thuat-de-quy-13821-2

LUYỆN TẬP

1. Viết chương trình để giải quyết nhiệm vụ 2 nhưng với yêu cầu đầu ra là hàm là một dãy (list) các số 0 và 1.

2. Viết hàm decimal(s) chuyển đổi xâu nhị phân s sang số thập phân tương ứng. Ví dụ nếu đầu vào là "10" thì kết quả 2, nếu đầu vào "1011" thì kết quả là 11. Yêu cầu viết theo kĩ thuật đệ quy.

hinh-anh-bai-5-thuc-hanh-thiet-ke-thuat-toan-theo-ki-thuat-de-quy-13821-3

VẬN DỤNG

1. Cho trước dãy số A =A[0], A[1].... A[n - 1].Cặp phần tử (A[i], A[j]) được gọi là nghịch đảo nếu i < j nhưng A[i] > A[j]. Viết chương trình đếm số các cặp phần tử nghịch đảo của dãy A.

a) Viết chương trình không đệ quy.

b) Viết chương trình theo kĩ thuật đệ quy.

2. Thiết kế thuật toán cho bài toán tính giá trị của đa thức dạng:

F(x) = an xn + an-1 xn-1 + ... + a1 x + a0

hinh-anh-bai-5-thuc-hanh-thiet-ke-thuat-toan-theo-ki-thuat-de-quy-13821-4

Ở đây, đầu vào là các giá trị x, a0, a1...., an

Gọi A = [a0, a1,..., an] là dãy các hệ số của đa thức (1).

Công thức (1) có thể viết lại với định nghĩa hàm F(A, x, n) như sau:

F(A, x, n) = an xn + an-1 xn-1 + ... + a1 x + a0

Tin tức mới


Đánh giá

Bài 5: Thực Hành Thiết Kế Thuật Toán Theo Kĩ Thuật Đệ Quy | Chuyên đề học tập Tin học 11 (Định hướng khoa học máy tính) | Chuyên Đề 1: Thực Hành Thiết Kế Thuật Toán Theo Kĩ Thuật Đệ Quy - Lớp 11 - Kết Nối Tri Thức Với Cuộc Sống

Tổng số sao của bài viết là: 5 trong 1 đánh giá
Xếp hạng: 5 / 5 sao

Bình Luận

Để Lại Bình Luận Của Bạn

Tin tức mới

Môn Học Lớp 11 - Kết Nối Tri Thức Với Cuộc Sống

Chuyên đề học tập Mĩ thuật 11

Chuyên đề học tập Toán 11

Chuyên đề học tập Ngữ văn 11

Chuyên đề học tập Vật lí 11

Chuyên đề học tập Hóa học 11

Chuyên đề học tập Sinh học 11

Chuyên đề học tập Giáo dục Kinh tế và Pháp luật 11

Chuyên đề học tập Lịch Sử 11

Chuyên đề học tập Địa lí 11

Chuyên đề học tập Âm nhạc 11

Toán tập 1

Chuyên đề học tập Công nghệ 11 (Công nghệ Cơ khí)

Chuyên đề học tập Công nghệ 11 (Công nghệ chăn nuôi)

Chuyên đề học tập Tin học 11 (Định hướng tin học ứng dụng)

Chuyên đề học tập Tin học 11 (Định hướng khoa học máy tính)

Toán tập 2

Vật lí

Hoá Học

Sinh Học

Ngữ Văn Tập 1

Ngữ Văn Tập 2

Lịch sử

Địa Lý

Công Nghệ

Công Nghệ Công Nghệ Cơ Khí

Giáo Dục Quốc Phòng Và An Ninh 11

Giáo dục Kinh Tế và Pháp Luật

GDTC_Cầu Lông

Giáo dục Thể Chất Bóng Chuyền

GDTC Bóng Đá

Âm Nhạc

Hoạt động trải nghiệm hướng nghiệp

GDTC_Bóng Rổ

Mỹ Thuật Điêu Khắc

Mỹ Thuật Đồ Hoạ_Tranh in

Mỹ Thuật Hội Hoạ

Mỹ Thuật Kiến Trúc

Mỹ Thuật Thiết Kế Công Nghiệp

Tin Học

Mỹ Thuật Thiết Kế Đa Phương Tiện

Tin học 11 - Định hướng khoa học máy tính

Mỹ Thuật Thiết Kế Đồ Hoạ

Mỹ Thuật Thiết Kế Sân Khấu Điện Ảnh

Mỹ Thuật Thiết Kế Thời Trang

Mỹ Thuật_Lý Luận Và Lịch Sử Mỹ Thuật

Giải bài tập Toán 11 Tập 1

Giải bài tập Toán 11 Tập 2

Giải bài tập Vật lý 11

Giải bài tập Hóa học 11

Giải bài tập Sinh học 11

Bộ Sách Lớp 11

Giáo Dục Việt Nam

Bộ Sách Giáo Khoa của Nhà Xuất Bản Giáo Dục Việt Nam

Tài liệu học tập

Đây là tài liệu tham khảo hỗ trợ trong quá trình học tập

Global Success & Bộ Giáo Dục - Đào Tạo

Bộ sách Global Success & Bộ Giáo Dục - Đào Tạo là sự kết hợp giữa ngôn ngữ Tiếng Anh theo lối giảng dạy truyền thống và cập nhật những phương thức quốc tế

Cánh Diều

Bộ sách giáo khoa của Nhà xuất bản Cánh Diều

Kết Nối Tri Thức Với Cuộc Sống

Sách giáo khoa của nhà xuất bản Kết Nối Tri Thức Với Cuộc Sống

Sách Kết Nối Tri Thức Với Cuộc Sống

Lớp 1

Sách giáo khoa dành cho lớp 1

Lớp 6

Sách giáo khoa dành cho lớp 6

Lớp 5

Sách giáo khoa dành cho lớp 5

Lớp 4

Sách giáo khoa dành cho lớp 4

Lớp 2

Sách giáo khoa dành cho lớp 2

Lớp 3

Sách giáo khoa dành cho lớp 3

Lớp 7

Sách giáo khoa dành cho lớp 7

Lớp 8

Sách giáo khoa dành cho lớp 8

Lớp 9

Sách giáo khoa dành cho lớp 9

Lớp 10

Sách giáo khoa dành cho lớp 10

Lớp 11

Sách giáo khoa dành cho lớp 11

Lớp 12

Sách giáo khoa dành cho lớp 12

Liên Kết Chia Sẻ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.