Bài toán tìm tập con

Một phần của tài liệu 28011_1712202001859504LUANVAN (Trang 35 - 37)

5. Ý nghĩa khoa học và thực tiễn của đề tài

3.2.Bài toán tìm tập con

3.2.1. Xây dựng thuật toán tuần tự

Như chương 2 của luận văn có trình bày, các kết quả tập con của tập cho trước có thể biểu diễn dưới dạng dãy nhị phân có độ dài n phần tử được xác định. Nhận thấy các dãy nhị phân trong bảng biểu diễn đều là dãy (a1 a2 … an) có n phần tử thoải điều kiện 0 ≤ ai ≤ 1, i ∈ (1 … n). Nên bài toán tìm tất cả các tập con của một tập hợp ta có thể suy ra từ bài toán tìm dãy bị chặn với s=(0 0…0) và g=(1 1…1)

Thuật toán 3: tìm tập con

1. Begin

2. Nhập n và tập hợp X ={x1 x2 … xn} 3. s[i]:=0, i = 1, … , n

4. g[i]:=1, i = 0, … , n

5. Thuật toán 1sinh tất cả các dãy số bị chặn t thỏa s ≤ t ≤ g

6. Thuật toán 4chuyển các dãy số bị chặn t thành các tập hợp con của X

7. End

Ở bước 6 ta có thuật toán riêng để xử lý như sau:

Thuật toán 4: chuyển các dãy bị chặn t thành các tập con X

1. Begin

3. Khởi tạo danh sách L = ϕ 4. For i=0 to n do

5. If ti=1 then chèn phần tử xi vào dãy L 6. X1:=L //s là 1 tập con của X

7. End.

Áp dụng công thức (2) của định lý 1 cho 2 dãy biên si và gi ta có độ phức tạp của thuật toán xấp xỉ ∏ = 2n.

3.2.2. Xây dựng thuật toán song song

Tương tự bài toán song song trên, ta áp dụng phương pháp phân rã dữ liệu đầu vào, đầu ra để hình thành các luồng dữ liệu có thể chạy song song. Để ý rằng với trong hệ nhị phân giá trị chỉ có thể là 0 hoặc 1 nên việc phân rã xem như tách p phần tử đầu ra và thêm 0 vào cho đủ độ dài n sẽ trở thành các dãy bị chặn con để phân chia đến những bọ xử lý phụ. Số bộ xử lý có thể chọn sẽ là k=2p với 1<p<n. Với k bộ xử lý thuật toán song song tìm tất cả tập con của tập có n phần tử như sau:

Thuật toán 5: song song tìm tập con của tập có n phần tử

1. Begin

2. Nhập n, p (p∈ {2,3, … , n − 1}) 3. s[i]:=0, i = 1, … , n

4. g[i]:=1, i = 1, … , n

5. k:=2p; p=(2, 3,…,n-1) // k là số bộ xử lý

6. //Bộ xử lý đầu tiên tìm k đoạn con, rồi phân cho các bộ xử lý khác Begin

//tìm dãy bị chặn theo thuật toán 1 và gửi dữ liệu đến các bộ xử lý 6.1.s’[i]=s[i], i=1,…,p

6.2.g’[i]=g[i], i=1,…,p

6.3.cj:=Sinh dãy bị chặn(s’(i), g’(i)), j=1,…,k //theo thuật toán 1. 6.4.Gửi s[i], g[i] ở bước 3 đến tất cả các bộ xử lý phụ

6.5.Gửi (cj đến pj (j=1,…,k) End;

7. //k bộ xử lý phụ thực hiện đồng thời, Begin

7.1.Nhận dữ liệu

7.2.Tạo sj bằng cách chèn các phần tử s[i] vào bên phải của cj (j=1,…,k) //j là chỉ số của k bộ xử lý phụ

7.3.Tạo gj bằng cách chèn các phần tử g[i] vào bên phải của cj (j=1,…,k) //j là chỉ số của k bộ xử lý phụ

7.4.tj[i]:=Sinh dãy bị chặn (sj(i), gj(i)), j=1,…,k, i=1,…,n //theo thuật toán 1.

7.5.Chuyển tất cả các dãy bị chặn tj[i] thành các tập con theo thuật toán 4. 7.6.In kết quả

7.7.Gửi thông tin về bộ xử lý chính. End;

8. End.

Một phần của tài liệu 28011_1712202001859504LUANVAN (Trang 35 - 37)