Thuật toán sắp xếp so sánh và đổi chổ

Một phần của tài liệu Parallel processing (Trang 51 - 52)

V. ĐÁNH GIÁ CHƢƠNG TRÌNH SONG SONG

2. Thuật toán sắp xếp so sánh và đổi chổ

Bài toán: cho mảng a[n] các số nguyên. Hãy sắp xếp tăng

dần các phần tử của mảng.

Ý tƣởng thuật toán: so sánh hai phần tử liền kề nhau. Nếu

chưa theo thứ tự thì đổi chổ nhau. Quá trình lặp lại cho đến khi nào không còn cặp nào không thỏa mãn thì dừng.

Thuật toán tuần tự:

5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG

for(i=n-1; i > 0; i--){ for(j=0; j < i; i++){ k = j + 1; if(a[j] > a[k]){ temp = a[j]; a[j] = a[k]; a[k] = temp; } } } 306

2. Thuật toán sắp xếp so sánh và đổi chổ

Thuật toán song song: Ý tƣởng thuật toán

• Dùng n tiến trình kết hợp theo nguyên lý hình ống để sắp xếp mảng a[n]

• Hệ thống được chia thành 2 pha: pha chẵn và pha lẻ -Pha chẵn: gồm các tiến trình được đánh số chẵn so sánh

với những tiến trình tiếp theo (số lẻ), nếu nó giữ phần tử lớp hơn thì trao đổi dữ liệu với tiến trình đó.

-Pha lẻ: các tiến trình được đánh số lẻ hoạt động tương tự

như trên

307

Ví dụ: n=8 và a = (4 , 2 , 7 , 8 , 5 , 1 , 3 , 6)

5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG

Pha/TT P0 P1 P2 P3 P4 P5 P6 P7 0 4 2 7 8 5 1 3 6 1 2 4 7 8 1 5 3 6 2 2 4 7 1 8 3 5 6 3 2 4 1 7 3 8 5 6 4 2 1 4 3 7 5 8 6 5 1 2 3 4 5 7 6 8 6 1 2 3 4 5 6 7 8 7 1 2 3 4 5 6 7 8

Sắp xếp theo nguyên lý hình ống Đổi chổ

Không đổi chổ 308

Thuật toán song song:

Giả sử A lưu dữ liệu ở tiến trình lẻ và B lưu dữ liệu ở tiến trình chẵn Thuật toán song song theo hình ống được mô tả theo MPI như sau:

5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG

Pha chẵn

Pi, i = 0, 2, ..., n-2 Pi, i = 1, 3, ..., n-3 recv(&A, Pi+1); send(&A, Pi-1); send(&B, Pi+1); recv(&B, Pi-1);

if (A>B) B=A ; if (A>B) A=B ;

Pha lẻ

Pi, i = 1, 3, ..., n-3 Pi, i = 0, 2, ..., n-2 send (&A, Pi+1); recv (&A, Pi-1); recv (&B, Pi+1); send(&B, Pi-1);

if (A>B) A=B ; if (A>B) B=A ;

309

Kết hợp 2 pha ta đƣợc thuật toán song song: 5.6 CÁC THUẬT TOÁN SẮP XẾP SONG SONG

Pi, i = 1, 3, ..., n-3 Pi, i = 0, 2, ..., n-2

send(&A,Pi-1); recv(&A,Pi+1); recv(&B,Pi-1); send(&B,Pi-1); if (A>B) A=B ; if (A>B) B=A ; if (i<=n-3){ if (i=>2){

send(&A,Pi+1); recv(&A,Pi-1); recv(&B,Pi+1); send(&B,Pi-1); if (A>B) A=B; if (A>B) B=A;

} }

Nhận xét: thuật toán cóđộ phức tạp là O(n).

310

Một phần của tài liệu Parallel processing (Trang 51 - 52)

Tải bản đầy đủ (PDF)

(54 trang)