5. Ý nghĩa khoa học và thực tiễn của đề tài
3.1.2. Xây dựng thuật toán song song
Ý tưởng thuật toán bắt đầu từ việc xét thấy bài toán yêu cầu tìm tất cả các dãy bị chặn T nằm trong 2 dãy biên S và G có số lượng phần tử là n. Áp dụng phương pháp phân rã dữ liệu đầu vào ta thấy việc tìm các dãy bị chặn T có thể chia thành các đoạn
nhỏ để tìm. Có nghĩa là trong khoảng giữa S và G ta chọn ra một số dãy bị chặn để có thể trở thành các dãy biên con trong đoạn con mới.
Ta có thể chia dãy n phần tử thành 2 phần, phần 1 với p phần tử đầu và phần 2 với n-p phần tử còn lại. Ta tìm các dãy t’ là dãy bị chặn nằm trong khoản S’ và G’ có p phần tử đầu tiên của dãy S, G ban đầu.
Gọi các dãy S1, S2,… là các dãy chặn con min và các dãy G1, G2,… là các dãy chặn con max. Việc tìm các dãy chặn con min ta có thể thêm vào bên phải dãy chặn con t’ (có p phần tử) các phần từ của S từ phần tử thứ p+1, tương tự việc tìm các dãy chặn con max ta có thể thêm từ dãy t’ (có p phần tử) các phần từ của G từ phần tử thứ p+1. Như minh họa dưới đây:
S: S1: G1: S2: G2: … G:
Ta xây dựng thuật toán tính toán song song tìm tất cả các dãy bị chặn n phần tử với cách chọn k=(g1-s1+1)*(g2-s2+1),…,(gp-sp+1) là tổng số bộ xử lý của chương trình (1<p<n) như sau:
Thuật toán 2: song song sinh tất cả dãy bị chặn
1. Begin
2. Nhập n, p (p∈ {2,3, … , n − 1}) 3. Nhập s[i] và g[i], i = 1, … , n
4. k=(g1-s1+1)*(g2-s2+1)*…*(gp-sp+1); p=(2, 3,…,n-1) //k là số bộ xử lý 5. //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ý 5.1. s’[i]=s[i], i=1,…,p
5.2. g’[i]=g[i], i=1,…,p
5.4. Gửi s[i], g[i] ở bước 3 đến tất cả các bộ xử lý phụ 5.5. Gửi (cj đến pj (j=1,…,k) End; 6. // k bộ xử lý phụ thực hiện đồng thời, Begin 6.1.Nhận dữ liệu
6.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ụ
6.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ụ
6.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.
6.5.In kết quả
6.6.Gửi thông tin về bộ xử lý chính. End;
7. End.