You are on page 1of 3

Bài tập chương 2

Thuật toán chia để trị

Bài tập 2a: Tìm phần tử lớn nhất của mảng


Bài toán: Cho mảng A[1…n]. Hãy tìm phần tử lớn nhất của mảng.

1. Xây dựng thuật toán cơ bản (tìm kiếm tuần tự) để giải bài toán trên và đánh
giá độ phức tạp.

2. Áp dụng thuật toán chia để trị cho bài toán trên và đánh giá độ phức tạp.

Bài tập 2b: Tìm phần tử nhỏ nhất của mảng


Bài toán: Cho mảng A[1…n]. Hãy tìm phần tử nhỏ nhất của mảng.

3. Xây dựng thuật toán cơ bản (tìm kiếm tuần tự) để giải bài toán trên và đánh
giá độ phức tạp.

4. Áp dụng thuật toán chia để trị cho bài toán trên và đánh giá độ phức tạp.

Bài tập 3: Bài toán luỹ thừa


Bài toán: Tính luỹ thừa a n với n là một số nguyên dương.

1. Xây dựng thuật toán cơ bản để giải bài toán trên và đánh giá độ phức tạp.

2. Áp dụng thuật toán chia để trị cho bài toán trên và đánh giá độ phức tạp.

Bài tập 4: Bài toán nhân hai ma trận


Bài toán: Cho hai ma trận A, B với kích thước n*n, ma trận C là ma trận tích của hai
ma trận A và B. Công thức để nhân 2 ma trận như sau: nếu A = (aij )n*n ;
B = (bij )n*n thì C = A . B = (cij )n*n, trong đó
n


cij = aik bkj
k=1

1. Xây dựng thuật toán cơ bản để giải bài toán trên và đánh giá độ phức tạp.

2. Áp dụng thuật toán chia để trị cho bài toán trên và đánh giá độ phức tạp.

Bài tập 5: Bài toán dãy con lớn nhất


Bài toán: Cho mảng A[1…n]. Mảng A[p…q] (với 1 ≤ p ≤ q ≤ n) được gọi là mảng
con của A. Trọng lượng mảng bằng tổng các phần tử. Tìm mảng con có trọng
lượng lớn nhất.

1. Xây dựng thuật toán cơ bản để giải bài toán trên và đánh giá độ phức tạp.

2. Áp dụng thuật toán chia để trị cho bài toán trên và đánh giá độ phức tạp.

Bài tập 6
Cho mảng A = [a0, a1, …, an−1] là một dãy các số tự nhiên đôi một khác nhau được
sắp xếp theo thứ tự tăng dần. Hãy thiết kế thuật toán tìm số tự nhiên nhỏ nhất còn thiếu
trong mảng A và tính độ phức tạp của nó.

- Ví dụ 1:

Input: A =[0, 1, 2, 6, 9, 11, 15]

Output: Số tự nhiên nhỏ nhất còn thiếu trong mảng A là 3

- Ví dụ 2 :

Input: A =[1, 2, 3, 4, 6, 9, 11, 15]

Output: Số tự nhiên nhỏ nhất còn thiếu trong mảng A là 0

- Ví dụ 3:

Input: A =[0, 1, 2, 3, 4, 5, 6]

Output: Số tự nhiên nhỏ nhất còn thiếu trong mảng A là 7

Gợi ý: Số tự nhiên nhỏ nhất bị thiếu trong A là số i nhỏ nhất với A[i] > i, với i = 0, 1, …,
n-1. Nếu A[i] = i, với mọi i = 0, 1, …, n-1 thì ouput là n.

Cách 1: Duyệt tuần tự thì độ phức tạp là O(n).

Cách 2: Tìm kiếm nhị phân (phương pháp chia để trị): so sánh giá trị ở giữa A[mid] với mid
(trong đó mid là vị trí ở giữa).

Bài tập 7:
Cho mảng A = [a0, a1, …, an−1] là một dãy các số nguyên. Hãy áp dụng phương
pháp chia để trị để thiết kế thuật toán tìm tổng lớn nhất của dãy con ap, ap+1, …, aq trong số

tất cả các dãy con của A.

Ví dụ: Input A =[2, - 4, 1, 9, -6, 7, -3 ]

Output: tổng lớn nhất của dãy con là 11 (tương ứng với dãy con 1, 9, -6, 7)

Gợi ý: Ý tưởng của phương pháp chia để trị để giải bài toán như sau

- Chia mảng thành hai mảng con bằng nhau.

- Tính toán đệ quy tìm tổng dãy con lớn nhất cho nửa mảng trái.

- Tính toán đệ quy tìm tổng dãy con lớn nhất cho nửa mảng phải.

- Tìm tổng dãy con lớn nhất trong các dãy con chứa phần tử ở giữa (bằng tổng lớn nhất của
dãy con ở bên trái chứa phần tử ở giữa cộng với tổng lớn nhất của dãy con ở bên phải
không chứa phần tử ở giữa).

- Kết quả bài toán là lấy max của tổng 3 dãy con ở trên.

You might also like