Chia để trị

Một phần của tài liệu Ứng dụng kỹ thuật phân hoạch và chia để trị trong thuật toán song song (Trang 33)

Cách tiếp cận chia để trị(divide-and-conquer) được đặc trưng bằng việc chia một bài toán thành các bài toán nhỏ hơn có cùng dạng với bài toán lớn sử dụng phương pháp đệ quy. Phương pháp đệ quy sẽ tiếp tục chia bài toán thành các tác vụ nhỏ hơn cho tới khi các tác vụ không thể nhỏ hơn được nữa. Sau đó các tác vụ đơn giản nhất được thực hiện và nối các kết quả với nhau để thực các tác vụ lớn hơn, cho

đến khi thu được kết quả cuối cùng.

JaJa(1992) đã phân biệt giữa phương pháp chia để trị và phân hoạch dựa vào công việc chính của mỗi phương pháp. Ông gọi là phương pháp chia để trị khi công việc chính là việc tổng hợp các kết quả, và gọi là phân hoạch khi công việc chính là chia nhỏ bài toán. Ở đây, chúng ta sẽ sử dụng thuật ngữ chia để trị bất cứ khi nào việc chia nhỏ còn được tiếp tục trên các bài toán nhỏ hơn.

Ví dụ

Tính tổngScủa dãy gồmnsố:S=∑in=−01xi.

Một định nghĩa đệ quy để cộng danh sách số(s) gồm nphần tử được thể hiện như sau: Int add(int∗s) { if (number(s)=<2) return (n1+n2); else { divide(s, s1, s2); /∗Chia s thành 2 phần s1, s2∗/

part_sum1 = add(s1); /∗Các lời gọi đệ quy để cộng các danh sách con∗/

part_sum2=add(s2);

return (part_sum1+part_sum2); }

}

Trong tất cả các định nghĩa đệ quy, một phương thức phải kết thúc được lời gọi đệ quy khi việc chia nhỏ không thể thực hiện được nữa. Trong mã lệnh trên, number(s) trả lại số các số trong danh sách s. Nếu có 2 số trong danh sách, hai số đó được gọi là n1 và n2. Nếu có 1 số trong danh sách thì số đó được gọi là n1, n2=0. Nếu không có số nào trong danh sách, thì n1=n2=0. Lời gọi đệ quy trong mã lệnh trên sẽ kết thúc trong các trường hợp có 0, 1 hoặc 2 số trong danh sách.

Khi mỗi phép chia tạo thành 2 phần, thì kĩ thuật chia để trị đệ quy sẽ có dạng một cây nhi phân hoàn chỉnh. Với các thể hiện tuần tự, tại mỗi thời điểm ta chỉ thăm được một node của cây. Nhưng với thể hiện song song, tại một thời điểm ta có thể thăm nhiều node của cây một cách đồng thời bằng cách thực hiện như sau:

• Thực hiện việc chia dữ liệu trong bài toán tính tổng dãy sốx0,x1, . . . ,xn−1, và sử dụng 8 bộ xử lý P0,P1, . . . ,P8. Tại mỗi giai đoạn, mỗi bộ xử lý sẽ giữ một nửa danh sách và gửi nửa còn lại cho bộ xử lý khác. Đầu tiên,P0 giao tiếp với P4, gửi một nửa dữ liệu tới P4. Sau đó, P0 và P4 lại gửi một nửa dữ liệu của mình choP2 vàP6 một cách tương tự. Cuối cùng,P0,P2,P4 vàP6 gửi một nửa dữ liệu của mình choP1,P3,P5 vàP7 một cách tương tự. Mỗi danh sách trong giai đoạn cuối sẽ có n/8số hoặcn/psố trong trường hợp sử dụng pbộ xử lý.

Hình 2.5:Chia nhỏ một danh sách thành các phần

hình...Khi các tổng thành phần đã được tính, mỗi tiến trình được đánh số lẻ sẽ gửi kết quả của mình cho các tiến trình được đánh số chẵn liền kề nó. Đó là,P1gửi kết quả của mình tớiP0,P3 gửi tớiP2,P5 gửi tớiP4, vàP7 gửi tớiP6. Các bộ xử lý được đánh số chẵn sau đó sẽ cộng kết quả nhận được với tổng thành phần của mình và gửi kết quả lên trên. Quá trình tiếp tục cho tới khiP0 có được kết quả cuối cùng.

Phân tích thuật toán

Giả thiếtn là lũy thừa của 2, và sử dụng p bộ xử lý. Thời gian thiết lập truyền thôngtstartup không được tính trong các bước.

• Thời gian truyền thông

Trong giai đoạn chia nhỏ, ta phải thực hiện logpbước chia. Thời gian truyền thông của giai đoạn này là

tcomm1= n 2tdata+ n 4tdata+· · ·+ n ptdata = n(p−1) p tdata

trong đó,tdata là thời gian để chuyển một từ dữ liệu.

Trong giai đoạn hợp kết quả, thời gian truyền thông được tính tương tự nhưng mỗi thông điệp chỉ chứa một dữ liệu.

tcomm2=tdatalogp Vậy tổng thời gian truyền thông của thuật toán là:

tcomm=tcomm1+tcomm1 = n(n−p)

n tdata+tdatalogp hay độ phức tạp thời gian làO(n)với plà hằng số.

• Thời gian tính toán

Khi kết thúc giai đoạn chia nhỏ, việc tính tổng của n/psố được thực hiện ở mỗi bộ xử lý. Và trong giai đoạn hợp kết quả mỗi bước chỉ thực hiện một phép cộng. Thời gian tính toán của thuật toán:

tcomp = n

p+logp

hay độ phức tạp thời gian là O(n)khi plà hằng số. Với nlớn và plà biến thì ta sẽ lấy độ phức tạp thời gian làO(n/p).

Tổng thời gian thực hiện song song của thuật toán là (adsbygoogle = window.adsbygoogle || []).push({});

tp = n(n−p)

p tdata+tdatalogp+ n

p+logp

Một phần của tài liệu Ứng dụng kỹ thuật phân hoạch và chia để trị trong thuật toán song song (Trang 33)