You are on page 1of 12

10/15/18

Tính toán song song và phân tán 7. Mẫu phân chia (Paradigm)
PGS.TS. Trần Văn Lăng 1. Mô hình cây nhị phân (Binary
langtv@vast.vn
Tree Paradigm)
lang@lhu.edu.vn
2. Chia để trị (Devide and
Conquer)
3. Phân hoạch (Partitioning)

1 2

7.1. Binary Tree Paradigm Khảo sát việc tính tổng


• Xét cây nhị phân đầy đủ với n lá có độ cao là log2n • Thuật giải tuần tự mất O(n)
(hoặc ký hiệu logn) • Xét với n = 2k để có được cây nhị phân đầy đủ
• Dữ liệu đặt ở n nút lá. • Tứ đây chia dữ liệu thành 2 nhóm
• Quá trình đi từ ngọn đến gốc mất logn thời gian. • Số process cần thiết là n/2

1
10/15/18

Minh họa
A1
• Với n= 8 = 23,mỗi nhóm có 4 phần tử
– Nhóm 1: A(1), A(3), A(5), A(7)
– Nhóm 2: A(2), A(4), A(6), A(8) A1 A2
• Cần 4 task
• Với dãy gồm 8 phần tử, mô hình như
A1 A2 A3 A4
hình vẽ bên dưới

A1 A2 A3 A4 A5 A6 A7 A8

• Bốn process đồng thời tính các giá trị tổng của nó • Giai đoạn tiếp theo chỉ còn lại 4 phần tử. Các phần
theo yêu cầu tử lưu trong 2 nhóm
• Rồi lưu vào các biến tương ứng – Nhóm 1: A(1), A(3)
– A(1) <— A(1) + A(2) – Nhóm 2: A(2), A(4)
– A(2) <— A(3) + A(4)
– A(3) <— A(5) + A(6)
– A(4) <— A(7) + A(8)

2
10/15/18

Thuật giải
• Khi đó 2 process đồng thời cộng
– A(1) <— A(1) + A(2)
– A(2) <— A(3) + A(4)
• Các kết quả được lưu vào A(1),
A(2)

Độ phức tạp
• Số process ban đầu là p = n/2 • Trong câu lệnh 4, chi phí
thời gian là O(1) cho 1
• Trong mỗi lần thực hiện số task chỉ còn 1/2.
task, nên với log2n bước,
• Nên số task cần thiết là chi phí thời gian O(logn).
P = n/2 = O(n)

3
10/15/18

7.2 Chia để trị


• Chia bài toán thành các bài toán con để dễ tìm ra • Theo cách thực hiện của mô hình cây nhị phân
lời giải cho tứng bài toán con riêng lẽ. • Thuật giải song song chưa tối ưu, bởi:
• Hợp nhất các lời giải này lại để được lời giải của – Thuật giải tuần tự cần O(n)
bài toán. – Song song cần O(logn) thời gian với O(n) task

• Nên hiệu suất Ep(n) (Efficiency) quá nhỏ khi n khá • Với thuật giải tính tổng như trên,
lớn:

• Chúng ta phải khảo sát bài toán sao cho Ep(n) có • Suy ra
giá trị là 1

15 16

4
10/15/18

Minh họa
• Chia mảng A(1:n) thành r = n/logn nhóm, để huy • A(1), A(2), A(3), ..., A(k)
động r task • A(k+1), A(k+2), ..., A(2k)
• Mỗi nhóm có logn phần tử.
..............
• Ở đây vẫn giả thiết n = 2k và n/logn là số nguyên (k
= logn) • A((i-1)k+1), A((i-1)k+2), ..., A(ik)
• Các nhóm được phân bố như sau: ..............
• A((r-1)k+1), A((r-1)k+2), ..., A(rk)

b) Thuật giải
• Mỗi process cộng logn phần tử.
• Lưu kết quả lại trong mảng B(1:r)
• Sử dụng thuật giải song song (như phần 1) để tính
tổng r phần tử của B.
• Thuật giải song song trên B này cần O(logr) thời
gian và O(r) process.

5
10/15/18

Độ phức tạp
• Các câu lệnh 2, 3, 4 cần O(logn) bước thời gian.
• Khi đó, các bước tứ 1 đến 5 dùng song song mất
O(logn) thời gian O(n/logn) process.

6.3 Mô hình phân hoạch


• Các bước còn lại dùng thuật giải song song dạng • Theo cách tiếp cận chia để trị, thuật giải phải bao
cây nhị phân, chi phí O(log(n/logn)) = O(logn- gồm 2 bước, trong đó có bước quan trọng là việc
log(logn)) = O(logn) thời gian. hợp nhất các bài toán con đã chia ra để được lời
• Dùng O(n/logn) process. giải của bài toán xuất phát.
• Như vậy, thuật giải cần O(logn) thời gian với • Đôi khi việc thực hiện này làm ảnh hưởng đến kết
O(n/logn) process quả của ban đầu.

6
10/15/18

• Trong mô hình phân hoạch, người ta không quan • Giả sử có 2 mảng A(1:n), B(1;n) đã được sắp xếp
tâm đến quá trình hợp nhất. tăng, cần phải hợp nhất thành 1 mảng C(1:2n)
• Tiến trình phân hoạch bảo đảm sao cho khi phân cũng tăng.
chia xong, việc giải các bài toán con cho kết quả là • Ở đây giả thiết n = 2k, và r = n/logn là số nguyên (k
lời giải của bài toán đặt ra. = logn)

Thuật giải tuần tự Minh họa thuật giải


• Phân hoạch A thành r = n/logn nhóm gồm k phần
tử như sau:
– A(1), A(2), ..., A(k)
– A(k+1), A(k+2), ..., A(2k)
.......................................
– A((i-1)k+1), A((i-1)k+2), ..., A(ik)
...................................................
– A((r-1)k+1), A((r-1)k+2), ..., A(rk)

7
10/15/18

• Tiếp theo cần tìm r số nguyên j(1), j(2), ..., j(r) sao • Từ đây, phân B thành r nhóm như sau:
cho – B(1), B(2), ..., B(j(1))
– j(1) là chỉ số lớn nhất mà A(k) > B(j(1)) – B(j(1)+1), B(j(1)+2), ..., B(j(2))
– j(2) là chỉ số lớn nhất mà A(2k) > B(j(2)) ...............................................
................................................... – B(j(i-1)+1), B(j(i-1)+2), ..., B(j(i))
– j(i) là chỉ số lớn nhất mà A(ik) > B(j(i)) ...............................................
................................................... – B(j(r-1)+1), B(j(r-1)+2), ..., B(j(r))
– j(r) là chỉ số lớn nhất mà A(rk) > B(j(r))

• Các phần tử trong nhóm 1 của A đều nhỏ hơn hay


bằng các phần tử trong nhóm 2, 3, ... của B.
• Có thể đồng thời hợp nhất các phần tử trong hai
nhóm thứ i của A và B.

8
10/15/18

• Ở bước thứ 2, dùng thuật giải tìm kiếm nhị phân, • Còn khi kích thước này nhỏ hơn hay bằng k, thuật
chi phí O(logn). giải cần chi phí O(logn).
• Bước 3, tùy theo kích thước của B(j(i-1)+1:j(i)), • Như vậy, thuật giản cần O(logn) thời gian,
O(n/logn) process.
• Nếu lớn hơn k, chúng ta dùng thuật giải song song
này để hợp nhất hai phần tương ứng của A và B.

Minh họa
• A = {1,5,15,18,19,21,23,24,27,29,30, • A được phân thành 4 nhóm
31,32,37,42,49} – 1,5,15,18
• B = {2,3,4,13,15,19,20,22,28,29,38, – 19,21,23,24
41,42,43,48,49} – 27,29,30,31
• n = 16 = 24, k =4, r = n/logn = 4 – 32,37,42,49

9
10/15/18

• Khi đó, j = {5,8,10} • Đồng thời hợp nhất các nhóm con của A và B.
• B được phân thành 4 nhóm
– 2,3,4,13,15 Nhóm 1 2 3 4
A 1, 5, 15, 18 19, 21, 23, 24 27,29, 30,31 32,37,
– 19,20,22
42,49
– 28,29 B 2, 3, 4, 13, 15 19,20, 22 28,29 38,41,42, 43,48,49
– 38,41,42,43,48,49

38

Ứng dụng: thuật giải Merge-Sort


• C(1:9) = {1,2,3,4,5,13,15,15,18} • Minh họa,
• C(10:16) = {19,19,20,21,22,23,24} với dãy 8 số
• C(17:22) = {27,28,29,29,30,31} nguyên,
thuật giải
• C(23:32) = {32,37,38,41,42,42,43,48,49,49}
trộn và sắp
xếp như sau:

40

10
10/15/18

Bài tập lớn


• Các tiến trình đồng thời sắp xếp tuần tự phần dữ 4. Phân tích thuật toán song song tính số π từ tích
liệu liên quan. phân như sau:
• Sau khi hoàn tất, trộn (merge) hai dãy đã sắp xếp
thành một dãy sắp xếp
• Các tiến trình tiếp tục cho đến hết dữ liệu

bằng cách xấp xỉ

41 42

#include <stdio.h>
• Trong đó #define N 10000000
int main(int argc, const char * argv[]){
double delta, x, sum = 0.0, pi;
delta = 1.0/N;
for ( int i = 0; i < N; i++ ){
x = i*delta;
sum += 4.0/(1.0 + x*x);
}
pi = sum*delta;
printf( "Pi = %20.18f\n", pi );
return 0;
}

43 44

11
10/15/18

#include <stdio.h>
5. Phân tích thuật toán tính số π dùng Phương pháp #include <stdlib.h>
#include <time.h>
Monte Carlo: #define npoints 10000000
int main(int argc, const char * argv[]){
– Đường tròn nội tiếp trong một hình vuông int count = 0;
double x, y, pi;
srand( (unsigned int)time(NULL) );
– Nếu đặt số chấm ngẫu nhiên lên hình vuông for ( int i = 1; i < npoints; i++ ){
x = (double)rand()/RAND_MAX;
– Thì tỷ lệ giữa số chấm nằm trong hình tròn và số chấm y = (double)rand()/RAND_MAX;
if ( x*x + y*y <= 1 )
nằm trong hình vuông là: count += 1;
}
pi = 4.0*count/npoints;
printf( "Pi = %20.18f\n", pi );
return 0;
}

45 46

12

You might also like