Bạn hỏi - Chuyên gia trả lời
Bạn cần hỏi gì?
1. Hãy trình bày cách giải bài toán tìm bi giả với 5 viên bi.
2. Trường hợp tổng quát có n viên bi cách làm như thế nào?
3. Ý tưởng chia để trị để giải bài toán tìm bi giả được thể hiện như thế nào?
Trò chơi tìm bi giả
Có 5 viên bi giống hệt nhau, biết rằng trong các viên bi này có một viên bi giả và viên bi giả này nặng hơn các viên bi còn lại.
Chỉ với một cái cân thăng bằng, em hãy tìm ra viên bi giả đó. Cần ít nhất bao nhiêu lần cân để tìm ra viên bi giả?
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)=anxn+an−1xn−1+...+a1x+a0=∑i=0naixi (1)
Ở đâ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)=anxn+an−1xn−1+...+a1x+a0 (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.
Viết chương trình đệ quy giải quyết nhiệm vụ 2 nhưng với yêu cầu đầu ra của hàm là một dãy (list) các số 0 và 1.
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.
Giả sử cần lưu dãy các bước chuyển của bài toán Tháp Hà Nội vào một danh sách để có thể sử dụng lại về sau. Mỗi bước chuyển dạng k: i → j sẽ được lưu trong một bộ ba số (k, i, j). Viết chương trình giải bài toán Tháp Hà Nội tổng quát Hanoi(n, i, j, k) chuyển n đĩa từ cọc i sang cọc j lấy cọc k làm trung gian với yêu cầu lưu tất cả các bước chuyển vào một danh sách (list). Như vậy, hàm Hanoi(n, i, j, k) sẽ trả về một danh sách bao gồm các bộ ba số dạng như đã mô tả ở trên.
Hãy chứng minh công thức Hn = 2n−1 bằng quy nạp toán học. Hãy tính H(64) và so sánh với con số các bước đã được đưa ra trong tờ quảng cáo của trò chơi vào năm 1883.
Viết chương trình rút gọn của hàm Hanoi(n, i, j, k) như sau và kiểm tra kết quả.
Viết chương trình giải bài toán Tháp Hà Nội nhưng với tên các cọc là A, B, C.
Viết chương trình đệ quy để tính giá trị H(n) của bài toán Tháp Hà Nội.
Tính các giá trị H(2), H(3), H(4), H(5) của bài toán Tháp Hà Nội.
Gọi Hanoi(n, i, j, k) là bài toán yêu cầu chuyển n đĩa đang xếp ở cọc i sang cọc j lấy cọc k làm trung gian. Các đĩa được đánh số từ 1 đến n và xếp theo thứ tự từ trên xuống. Các điều kiện của việc chuyển như sau:
1. Các đĩa đánh số từ 1 đến n và có kích thước tăng dần.
2. Mỗi lần chỉ được phép chuyển một đĩa.
3. Không được phép xếp đĩa to lên trên đĩa nhỏ.
Em hãy thiết kế thuật toán đệ quy tổng quát cho bài toán trên. Yêu cầu phải mô tả chi tiết từng bước chuyển.
Viết sơ đồ chi tiết giải bài toán Tháp Hà Nội cho trường hợp n = 4. Tính H(4).
Đọc, trao đổi để hiểu được ý tưởng thiết kế đệ quy cho lời giải bài toán Tháp Hà Nội.
Mô tả lời giải bài toán với n = 1, 2, 3 nếu yêu cầu là di chuyển các đĩa từ cọc 1 sang cọc 2 (cọc 3 là cọc trung gian).
Mô tả lời giải bài toán với trường hợp n = 1, 2, 3 ở trên (không dùng hình vẽ mô tả)
Đọc, tìm hiểu bài toán Tháp Hà Nội và thực hiện giải trò chơi này với số lượng đĩa nhỏ (1, 2, 3). Em có nhận xét gì về lời giải bài toán với n = 1, 2, 3?
Năm 1883, tại một số tỉnh thành của Việt Nam và tại Pháp xuất hiện một trò chơi được quảng cáo với tên “Tháp Hà Nội” (La tour d’Hanoi). Trò chơi này được bán rộng rãi và theo một tờ quảng cáo vào thời gian đó là sẽ trao giải hàng triệu francs cho ai có thể giải được tất cả các mức từ thấp đến cao nhất là 64 đĩa. Trong tờ rơi đó cũng đưa ra con số 18446744073709551615 bước chuyển cho trường hợp 64 đĩa và khuyến cáo rằng sẽ cần hàng tỉ năm để giải được trò chơi này. Trò chơi như sau: có ba cái cọc (ví dụ cọc 1, 2, 3) và n cái đĩa được xếp tại cọc 1 theo thứ tự to dần từ trên xuống. Yêu cầu chuyển n đĩa này sang cọc 3 với điều kiện là được dùng cọc 2 làm trung gian, mỗi lần chỉ được phép chuyển 1 đĩa và không cho phép đặt đĩa to chồng lên đĩa nhỏ.
Em hãy suy nghĩ và thử giải trò chơi trên với n = 1,
Lớp An tiến hành đo chiều cao của cả lớp, kết quả lưu vào một tệp có tên chieucao.inp, trong tệp ghi lần lượt họ tên của các bạn trong lớp và chiều cao tương ứng. Thầy hiệu trưởng yêu cầu tổng kết và gửi cho Ban giám hiệu tên và chiều cao của bạn thấp nhất và cao nhất trong lớp. Viết chương trình giải quyết yêu cầu này theo kĩ thuật đệ quy. Ví dụ thông tin đầu vào và đầu ra của bài toán sẽ như sau:
Thiết lập chương trình tính hàm gcd(a,b) - ƯCLN của các số nguyên không âm a, b theo thuật toán Euclid nhưng không đệ quy.
Bài toán tính ƯCLN của hai số nguyên dương a, b có một cách tính khác nhau sau:
Hãy viết lại chương trình trên theo kĩ thuật đệ quy.
Viết chương trình chuyển đổi số nhị phân sang hệ thập phân (tương tự nhiệm vụ 1) nhưng dãy nhị phân đầu vào được cho dưới dạng một dãy (list) các số 0 và 1. Ví dự nếu dãy đầu vào là A=[1, 1, 1, 1, 1, 1, 1] thì kết quả đầu ra là 127.
Áp dụng kĩ thuật giải đệ quy để giải các bài toán, theo em cần phải đặc biệt lưu ý đến điều gì?
Bạn An đã nghĩ ra thuật toán tìm kiếm nhị phân bằng đệ quy theo cách khác như sau:
a) Chương trình của bạn An có đúng không?
b) Trong chương trình trên, phần cơ sở là những lệnh nào?
Chúng ta đã biết thuật toán sắp xếp chèn trên dãy A cho trước theo hàm sau
Hãy thiết kế lại chương trình trên sử dụng kĩ thuật đệ quy
Viết chương trình tổng S=1!+2!+...+n! theo hai cách:
a) Không sử dụng đệ quy
b) Có sử dụng kĩ thuật đệ quy
Cho trước dãy A. Viết chương trình đệ quy để in dãy A theo thứ tự ngược lại.
Viết chương trình theo kĩ thuật đệ quy để tính hàm SL(n) là tổng các số tự nhiên lẻ nhỏ hơn hoặc bằng n
Giả sử A = [1, 3, 7, 9] và K = 10. Nếu áp dụng chương trình trên thì cần mấy lần gọi hàm đệ quy?
Trong chương trình trên lệnh nào đóng vai trò là phần cơ sở của đệ quy?
Chúng ta đã biết thuật toán tìm kiếm nhị phân trên các dãy phần tử đã sắp xếp. Hãy tìm tới thiết kế mới của thuật toán này theo kĩ thuật đệ quy. Trao đổi, thảo luận và trả lời các câu hỏi sau:
1. Nêu ý tưởng chính của giải thuật tìm kiếm nhị phân sử dụng đệ quy
2. Vị trí nào trong thuật toán có thể gợi ý cho kĩ thuật đệ quy?
3. Phần cơ sở của thiết kế đệ quy nằm ở bước nào?
Vì sao trong ý tưởng thiết kế đệ quy trên, yêu cầu từ bài toán với kích thước lớn cần phải đưa về cùng bài toán đó với kích thước nhỏ hơn?
Hãy chỉ ra phần cơ sở và phần đệ quy của các chương trình trên.
Trao đổi, thảo luận và tìm hiểu ý tưởng thực hiện các tính toán sau bằng kĩ thuật đệ quy.
1. Tính tổng S(n)=1+2+3+...+n
2. Tính lũy thừa an=a×a×...×a (n lan)
3. Tính n giai thừa n!=1×2×3×...×n
An được giao tìm một thiết kế mới cho bài toán tính tổng S(n) có thể được viết lại như sau: S(n)=1+2+3+...+n=1+2+...+n−1+n=S(n−1)+n . Do đó, việc tính S(n) có thể được tính từ S(n-1), tương tự S(n-1) lại có thể được tính từ S(n-2). Cứ như vậy, cuối cùng sẽ dẫn đến cần tính S(0), nhưng S(0)=0. Em có thể giúp n hoàn thiện ý tưởng trên thành một chương trình hay không?
Viết chương trình tính số Peil thứ n
Viết chương trình nhập số n từ bàn phím và in ra n số hạng đầu tiên của dãy số Peil
Viết chương trình tính số Lucas thứ n