BÀI TẬP PTTKGT (Giải các bài trên bằng giấy và viết tay) Chương 1: Bài 1: Cho chương trình bài toán tháp Hà Nội. a. Tình độ phức tạp của bài toán tháp Hà Nội b. Khử đệ quy đuôi c. Khử đệ quy lời gọi hàm đệ quy còn lại. Bài 2: Cho số Fibonaci được định nghĩa như sau: F n = F n-1 + F n-2 a. Hãy viết hàm đệ quy để tính F n b. Dùng phương pháp tổng quát để khử đệ quy. Bài 3: Giả sử thời gian thực thi modun A là hằng M. Hãy phân tích độ phức tạp C(n) của giải thuật sau đây với n là kích thước của dữ liêu nhập a. For i:=1 to n do For j:=1 to I do For k:=1 to j do Modun A b. for (i = 0; i < n-2; i++) { for (j = 0; j < n; j=j*2) { for (k = 1; k < 5000; k=k*5) { modun A; } } for (j = 0; j < 1000*n; j=j+1) { modun A; } for (j = 0; j < n/5; j=j+5) { modun A; } } Bài 4: Giải công thức truy hồi sau: a. C N = 4C N/2 + N; với N ≥ 2, C 1 =1. b. C N = 4C N-1 + 2; với N ≥ 2, C 1 =1. Bài 5: Cho thủ tục tính giá trị lớn nhất và nhỏ nhất như sau: procedure MAXMIN(A, n, max, min) /* Set max to the maximum and min to the minimum of A(1:n) */ begin integer i, n; max := A[1]; min:= A[1]; for i:= 2 to n do if A[i] > max then max := A[i] else if A[i] < min then min := A[i]; end Tính độ phức tạp C(n) trong trường hợp: a. Xấu nhất b. Tốt nhất c. Trung bình Chương 2: Bài 1: Cho dãy số : 66 33 40 22 55 88 60 11 80 a. Hãy chạy tay giải thuật insertion sort, selection sort, bubble sort. b. Hãy cho biết trường hợp tốt nhất và xấu nhất của các giải thuật trên. Bài 2: Cho danh sách các số nguyên: 28, 3, 93, 10, 54, 65, 30, 90, 10, 69, 8, 22, 31, 5, 96, 40, 85, 9, 39, 13, 8, 77, 10. a. Hãy chạy bằng tay giải thuật QuickSort dùng phần tử trái nhất làm phần tử cầm canh. b. Hãy chạy tay giải thuật merge sort c. Nếu mỗi số là 1 record, mỗi block chỉ chứa 1 record, bộ nhớ của buffer chỉ ch ứa tối đa 3 page frames. Trong quá trình merge, 2 page frames dùng để nhập dữ liệu, còn 1 page frame dùng để xuất dữ liệu. Hãy chạy bằng tay, dùng giải thật external sort để sắp xếp file dữ liệu trên. Bài 3: Hãy cho biết trường hợp xấu nhất, tốt nhất và độ phức tạp tương ứng của các giải thuật: a. insertion sort b. selection sort c. bubble sort d. quick sort e. radix sort f. merge sort g. external sort h. tìm kiếm nhị phân Bài 4: Giả sử 1 dãy các số được lưu trữ bằng danh sách liên kết. Các anh chị hãy cho biết giải thuật sắp xếp nào là phù hợp nhất để sắp xế p dữ liệu? giải thích? Chương 3: Bài 1: Chạy bằng tay giải thuật heap sort cho các khóa: 66 33 40 22 55 88 60 11 80 Phát biểu độ phức tạp của giải thuật heap sort. Bài 2 : Vẽ cây tìm kiếm nhị phân sau khi thêm các khóa sau từ cây rỗng ban đầu: 5, 10, 30, 22, 15, 20, 31. Sau đó xóa khóa 10. Trong trường hợp xấu nhất, cần bao nhiêu phép so sánh để tìm kiếm trong cây nhị phân tìm kiếm có N khóa. Giải thích. Bài 3: Cho các trị khóa sau lần lượt đưa vào bảng băm : C,O,M,P,U,T,E,R,S,C,I,E,N,C,E Giả sử bảng băm có kích thước 13 và hàm băm là h(k)= k mod 13 a. Hãy cho biết nên sử dụ ng phương pháp giải quyết đụng độ là đầu dò tuyến tính hay xâu chuỗi riêng. Sau đó, vẽ quá trình đưa các khóa vào bảng băm. b. Nếu kích thước bảng băm là 19 và hàm băm là h(k) = k mod 19 và sử dụng phương pháp đầu dò tuyến tính. Hãy vẽ quá trình đưa các khóa vào bảng băm. Chương 4 Bài 1: Cho đồ thị biểu diễn bằng danh sách liên kết như sau: a. Hãy vẽ đồ thị b. Biểu diễn đồ thị bằng ma trận c. Chạy bằng tay trạng thái của stack trong giải thuật depth first search (bắt đầu từ đỉnh a). Sau đó, chỉ ra thứ tự duyệt các đỉnh d. Phát biểu độ phức tạp của giải thuật depth first search e. Chạy bằng tay trạng thái của stack trong giải thuật breadth first search (bắt đầu từ đỉnh a). Sau đó, chỉ ra thứ tự duyệt các đỉnh Bài 2: a. Hãy chỉnh sửa giải thuật dfs để kiểm tra đồ thị G có vòng không ? b. Hãy chỉnh sửa giải thuật dfs để kiểm tra đồ thị G có bao nhiêu thành phần liên thông ? Bài 3: Cho đồ thị có trọng lượng. Hãy dùng giải thuật Prim để tìm cây phủ tối tiểu. Sau đó hãy cho biết độ phức tạp của giải thuật Prim trong trường hợp hàng đợi Q ta sử d ụng cấu trúc dữ liệu: a. heap b. array c ac a d b a f e c b a Bài 4: Cho đồ thị có hướng sau: a. Hãy biểu diễn đồ thị trên bằng danh sách liên kết b. Dùng phương pháp 1 để tìm 2 dãy topological sort khác nhau. c. Dùng phương pháp 2 để tìm 2 dãy topological sort khác nhau. Bài 5: Cho ma trận biểu diễn đồ thị có hướng như sau: 0 0 0 1 1 0 1 1 1 0 0 1 0 0 1 0 a g f b ce d d c e a b f w(d,c) = 4 w(d,e) = 4 w(d,a) = 3 w(a,c) = 3 w(a,b) = 3 w(a,f) = 3 w(a,e) = 3 w(b,f) = 2 w(b,c) = 2 w(f,e) = 1 w(c,e) = 2 a. Biểu diễn đồ thị trên bằng danh sách liên kết b. Dùng giải thuật Warshall để tìm bao đóng truyền. Bài 6: Cho đồ thị có trọng lượng được biểu diễn như sau: 7 5 0 0 7 0 0 2 0 3 0 0 4 0 1 0 Hãy dùng giải thuật Floyd’s để tìm đường đi ngắn nhất giữa các đỉnh trong đồ thị có hướng và có trọng lượng trên. Bài 7: a. Chỉnh sửa giải thuật Floyd’s để có thể lưu vết được đường đi ngắn nhất giữa các đỉnh. b. Phát triển thủ tục path để in tất cả các lối đi ngắn nhất từ một đỉnh đế n các đỉnh còn lại. Bài 8: Cho đồ thị có trọng lượng. Hãy dùng giải thuật Dijkstra để tìm cây phủ tối tiểu. Sau đó hãy cho biết độ phức tạp của giải thuật Dijkstra trong trường hợp hàng đợi Q ta sử dụng cấu trúc dữ liệu: a. heap b. array a g f b ce d 5 2 1 3 2 4 6 5 2 3 8 1 1 5 Chương 5 Bài 1: Chỉnh sửa giải thuật quy hoạch động bài toán knapsack 0-1, để giải quyết bài toán knapsack trong đó có mảng a[1 n] chứa số lượng các loại hàng. Bài 2: Cho công thức truy hồi của hàm C(m,n) ( n ≥1 và 0≤m≤n) như sau: C(m,n) = 1 nếu m=0 hoặc m=n C(m,n) = C(m,n-1) + C(m-1,n-1) nếu 0<m<n a. Viết hàm đệ quy để tính C(m,n). b. Nêu lý do tại sao không nên xây dựng hàm đệ quy để tính C(m,n). Dùng quy hoạch động để tính C(m,n). Sau đó cho biết giá trị C(1,5) và C(2,5). Bài 3: Cho một danh sách ghi lại chỉ số chứng khoán VNIndex từ khi khai trương đến nay. Dựa vào danh sách này hãy cho biết, giai đoạn nào chỉ số VNIndex ổn định kéo dài nhất. Giai đoạn ổn định là giai đoạn mà chỉ số VNIndex cao nhất so với chỉ số VNIndex thấp nhất trong giai đoạn này không vượt quá 3%. Bài 4: Cho các giải thuật sau: Thap Ha Noi, Prim,Dijkstra, : quicksort, mergesort, exchange radix sort, externel sort, Floy, Warshall, heap sort Anh/chị hãy cho biết giải thuật nào thuộc loại: chia để trị, biến thể để trị, quy hoạch động, tham lam, quay lui (backtracking). . BÀI TẬP PTTKGT (Giải các bài trên bằng giấy và viết tay) Chương 1: Bài 1: Cho chương trình bài toán tháp Hà Nội. a. Tình độ phức tạp của bài toán tháp Hà Nội b nhị phân Bài 4: Giả sử 1 dãy các số được lưu trữ bằng danh sách liên kết. Các anh chị hãy cho biết giải thuật sắp xếp nào là phù hợp nhất để sắp xế p dữ liệu? giải thích? Chương 3: Bài. 1 3 2 4 6 5 2 3 8 1 1 5 Chương 5 Bài 1: Chỉnh sửa giải thuật quy hoạch động bài toán knapsack 0-1, để giải quyết bài toán knapsack trong đó có mảng a[1 n] chứa số lượng các loại hàng. Bài 2: Cho công thức