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

Một phần của tài liệu 28011_1712202001859520HuynhLeDaiNgoc.compressed (Trang 33)

M ăĐ U

5. Ý nghĩa khoa học và thực tiễn ca đề 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ácbộ xử lý khác Begin

//tìm dãy bị chặn theo thu tătoánă1và 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đếntấ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 kbộ 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.

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ặnt thỏa s ≤ t ≤ g

6. Thu tătoánă4 chuy 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ưyb ă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à gita 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ă1và 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 sjbằ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 gjbằ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.

3.2.3. Ví dụ minh họa tìm tất cả tập con con của tập có 4 phần tử

Với n=4, ta có thể chọn p=2 lúc đó có 1 bộ xử lý chính và 4 bộ xử lý phụ. Ta có 2 dãy chặn s=(0 0 0 0) g=(1 1 1 0)

Với p=2 ta có các dãy nhị phân 00, 01, 10, 11 từ các dãy này ta thêm 0 để cho đ n phần tử. Ta được dãy 0000, 0100, 1000, 1100 là các dãy biên con để truyền vào các bộ xử lý tương ng.

Bảng 3.1. Bộ xử lý phụ sinh dãy nhị phân bị chặn với tập 4 phần tử

Bộ xử lý 1 Dãy bị chặn Bộ xử lý 2 Dãy bị chặn Bộ xử lý 3 Dãy bị chặn Bộ xử lý 4 Dãy bị chặn 0000 0100 1000 1100 0001 0101 1001 1101 0010 0110 1010 1110 0011 0111 1011 1111

Từ đó theo các thuật toán 4 sẽ sinh rađược các tập con tương ng.

3.2.4. Phân tích

Tương tự như bài toán tìm dãy bị chặn n phần tử, bài toán tìm tập con c a tập có n phần tử là trư ng hợp đặt biệt với dãy chặn min s=(0…0) (có n số 0) và max

g=(1…1) (có n số 1).

Với cách chọn số bộ xử lý k=2p (1<p<n)

Vì các dãy bị chặn con cho từng bộ xử lý t o ra bằng cách lấy p phần tử đầu trong dãy nhị phân ban đầu và thêm 0 vào cho đ n phần tử nên các dãy chặn con điều nằm trong kho n từ s=(0…0) và g=(1…1) (n phần tử).

Số dãy bị chặn t i mỗi bộ xử lý phụ là 2n-pdãy. Đ ng th i số bộ xử lý là k=2p nên

ta có t ng số dãy con t o ra là 2p

* 2n-p =2n dãy.

Vậy độ ph c t p c a thuật toán 5 song song tìm tập con c a tập có n phần tử xấp xỉ 2n-p +T với T là th i gian truyển thông giữa các bộ xử lý. T phụ thuộc vào từng hệ thống vật lý thực tế.

3.3. Bài toán li tăkêăhoánăv 3.3.1. Phép thế, nghịch thế

Theo lý thuyết về đ i số tuyến [5], phép thế và nghịch thế được định nghĩa như

sau:

Một phép thế σ trên tập Xn được gọi là một chuyển trí hai phần tử i, j thuộc Xn nếu σ(i) = j, σ(j) = i và σ(k) = k, với mọi k ∈ Xn, k ≠ i, k ≠ i.

Gi i sử tập hợp Xn = {1,2,3,..,n}, (n>1) Một song ánh σ: Xn→Xn được gọi là phép thế trên tâp Xn. Tập tất c các phép thế ký hiệu là Sn.

Phép thế σ: Xn→ Xn được biểu diễn như sau:

( )

Trong đó, σ(i) là nh c a phần tử i ∈ Xn được viết dòng dưới, trong cùng một cột với i.

Ví dụ:

Là phép thế trên tập X4 = {1,2,3,4} xác định b i: σ(1) = 3, σ(2) = 2, σ(3) = 4, σ(4) = 1.

Như vậy, nh c a các phần tử c a tập Xn qua mỗi phép thế cho ta một hoán vị trên tập Xn. Nguợc l i, mỗi hoán vị l i xác định một phép thế, chẳng h n, hoán vị (3, 4, 1, 2) xác định phép thế trên tập X4. Vì vậy, số các phép thế trên tập Xn bằng số các hoán vị trên tập Xn, nghĩa là bằng n!. Như vậy, tập Sncó n! phần tử.

Ví dụ: S3có 3! = 1.2.3 = 6 phần tử. Có những phép thế sau:

Phép nghịch thế được hiểu như sau:

Gi sử một phép thế trên tập Xn. Với i, j ∈ Xn, i ≠ j, ta nói cặp (σ(i), σ(j)) là một nghịch thế c a σ nếu i <j nhưng σ(i) > σ(j).

Ví dụ. Trên X3, phép thế có 1 nghịch thế là: (2, 1).

Phép thế có 3 nghịch thế: (3, 2), (3, 1), (2, 1).

Vậy trên tâp Xn có n phần tử và có n! phép thế, ng với mỗi phép thế ta có số nghịch thế khác nhau. Ta gọi dãy nghịch thế như sau: Dãy nghịch thế là dãy g m số nghịch thế t i t i từng phần tử trong phép thế nhất định.

Bảng 3.2. Hoán vị, dãy nghịch thế, dãy nghịch thế ngược 3 phần tử

STT Hoán vị

( nh phép thế) Dãy nghịch thế Dãy nghịch thế ngược

1 1 2 3 0 0 0 0 0 0 2 2 1 3 1 0 0 0 0 1 3 3 1 2 2 0 0 0 0 2 4 1 3 2 0 1 0 0 1 0 5 2 3 1 1 1 0 0 1 1 6 3 2 1 2 1 0 0 1 2

Ta thấy ng với mỗi hoán vị ta có một dãy nghịch thế ngược và mỗi dãy nghịch thế ngược xác định một hoán vị. Hơn nữa, kết hợp với phần lý thuyết phần 2.1 về dãy bị chặn ta có thể xem dãy nghịch thế ngược là dãy bị chặn b i 2 dãy biên là s=(0, 0, 0)

và g=(0, 1, 2) . Từ đó ta có thể phát triển thuật toán tìm hoán vị c a n phần tử bằng dãy nghịch thế ngược được sinh ra từ dãy bị chặn. Kết hợp với việc phân rã dãy nghịch thế ngược theo từng đo n nghiệm con để có thể tiến hành tính toán song song nhằm gia tăng hiệu năng tính toán.

3.3.2. Xây dựng thuật toántuần tự

Như phần 3 c a chương3 đã trình bày ta xây dựng thuật toán cho bài toán liệt kê hoán vị, nhưng trước hếtcần ch ng mình một số định lýđể đ m b o tính đúng đắn:

Đ nhălýă2: Cho hai dãy biên s=(0 …0) (có n phần tử0) và g=(0 1 2 …n-1). Các

dãy số bị chặn t thỏa là dãy nghịch thế ngược c a tập Xn= {1, 2, 3,..., n}, (

). và số dãy t bằng n! và nghịch thếngược s=(0 …0) tương ng với hoán vị (1 2

…n) và nghịch thế ngược g=(0 1 2 …n-1) tương ng với hoánvị (n n-1 … 1). Chng minh:

Cho Xn= {1, 2, 3,..., n}, ( ). Hoán vịđầu tiên là (1 2 3 …n).

Ta thấy trước 1 không có gặp ngịch thế nào nên số nghịch thế c a 1 bằng 0, trước 2 không có gặp ngịch thế nào nên số nghịch thế c a 2 bằng 0, tương tự như vậy số

nghịch thế c a 3, 4,…,n đều bằng 0. Suy ra, dãy nghịch thếngược ng với hoán vị đầu

tiên là (0…0) (có n phần tử 0).

Hoán vị cuối cùng c a Xn theo th tự từ điển tăng dần là (n n-1….1). Ta nhận thấy rằng trước n không có gặp ngịch thế nào nên số nghịch thế c a n bằng 0, trước n- 1 có 1 gặp ngịch thế nên số nghịch thế c a n-1 bằng 1, tương tự như vậy ta có số

nghịch thế c a (n-2 n-3 … 1) tăng dần lên một đơn vị (2 3 … n-1). Suy ra, dãy nghịch thế ng với hoán vị (n n-1 …1) là (n-1…0). Từ đó ta tiếp tục suy ra dãy nghịch thế ngược ng với hoán vị (n n-1 … 1) là 0 1 …n-1.

Từ hoán vị (1 2 …n) đến (n n-1 … 1) có n! hoán vị nên từ dãy nghịch thếngược

(0…0) đến (0 1 … n-1) cũng có n! dãy bị chặn t.

Từ định lý 1 c a dãy bị chặn và định lý 2 ta xây dựng thuật toántính toán tuần tự thực hiện việcliệt kê hoán vị dùng các dãy nghịch thế ngược như sau:

Thu tătoánă6: li tăkêăhoánăv

1. Begin

2. Nhập n

3. s[i]:=0, i = 1, … , n

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

5. Thu tătoán 1 sinh t tăc các dưyăs ăb ăchặn t là dãy nghịch thế ngược

c a tâp Xn(thỏa s ≤ t ≤ g)

6. Thu tă toánă7 chuy nă cácă dưyă s ă b ă chặnă tă (dưyă ngh ch th ă ng c)ă thành các dãy hoánăv

7. End

bước 5 ta sử dụng l i thuật toán 1 t i phần trên. bước 6ta có thuật toán riêng để chuyển dãy bị chặn thành dãy hoán vịnhư sau:

Thu tătoán 7: chuy nădưyăb ăchặnăthƠnhădưyăhoánăv

1. Begin

2. t:=(t1t2…tn) // t dãy nghịch thế ngược

3. Kh i t o danh sách L có một phần tử có giá trị n

4. For i=2 to n do

5. If ti=0 then chèn phần tử có giá trị n+1-i vào trước L

6. Else if ti=len(L) then chèn n+1-i vào sau L

7. Else chèn phần tử có giá trị n+1-i vào vị trí ti+1 trong L

8. s:=L //s là dãy hoán vị

9. End.

Trong thuật toán 7 chuyển dãy bị chặn thành hoán vị ta thấy việc chuyển dãy bị chặn chỉ là duyệt từng phần tử trong dãy t nên có độ ph c t p xấp xỉ bằng O(n).

Vậy độ ph c t p c a Thu tătoánă6:ăli tăkêăhoánăv ălƠăO(n*an) với a = max {(g1- s1+1),(g2-s2+1),…,(gn-sn+1)}.

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

Từ thuật toán tuần tự ta áp dụng các phép phân rã để xây dựng thuật toán song

song. Áp dụng các phương pháp phân rã như đã nêu các phần trên, ta thấy việc tìm tất c các dãy bị chặn từ hai dãy đầu cuối có thể phân tách ra thành các công việc tương tự nhau. Ta có thể tìm các dãy nằm giữa 2 dãy chặn để có thể chia bài toán

hình thành nên ý tư ng tính song song cho bài toán. Bộ xử lý chính nhận hai dãy biên s[i] và g[i] sau đó sẽ tìm những dãy con biên để phân phối cho các bộ xử lý phụ để thực hiện tìm dãy con bị chặn.

Tuy nhiên, thuật toán không thể cho số bộ xử lý là tùy ý, vì các đo n con phân

cho các bộ xử lý phụ là ph i tìm đ số lượng các dãy bị chặn. Gi sử chúng ta có k+1

bộ xử lýg m 1 bộ xử lý chính và k bộ xử lý phụ.Xét thấy dãy bị chặn là dãy g m có n chữ số và số lượng dãy con c a dãy bị chặn là n! thế nên việc lựa chọn k như sau k = p! với 1<p<n (vì tính toán song song cần ít nhất 2 bộ xử lý).

Ví dụ:

V i s ăph năt n=3 ta có thể chọn p=2 lúc đó ta có k=3 bộ xử lý với 1 bộ xử lý chính và 2 bộ xử lý phụ xử lý trên 2 phân đo n:

- Đo n 1: bị chặn b i 2 dãy s1=000 và g1=002 - Đo n 2: bị chặn b i 2 dãy là s2=010 và g2=012.

V is ăph năt n=4 ta có thể chọn p=2 hoặc p=3.

 Chọn p=2 thì lúc đó ta có k=3 bộ xử lý với 1 bộ xử lý chính và 2 bộ xử lý phụ xử lý trên 2 phân đo n:

- Đo n 1 có s1=0000 và g1=0023

- Đo n 2 có s2=0100 và g2 =0123

 Nếu chọn p=3, thì ta có k=7 bộ xử lý với 1 bộ xử lý chính và 6 bộ xử lý phụ xử lý trên 6 phân đo n.

- Đo n 1 có s1=0000 và g1=0003. - Đo n 2 có s2=0010 và g2=0013. - Đo n 3 có s3=0020 và g3=0023. - Đo n 4 có s4=0100 và g4=0103. - Đo n 5 có s5=0110 và g5=0113. - Đo n 6 có s6=0120 và g3=0123.

T ng quát hóa ng với k được chọn thì:

- Dãy biên c a đo n đầu tiên:

o dãy nhỏ nhất: s1 = 0…0 (có n số 0)

o Dãy biên lớn nhất là: (5)

- Dãy biên đo n 2:

o Dãy biên nhỏ nhất: (6)

g1=(0 … 0 p … n-1)

p số 0

s2=(0 … 0 1 0…0)

o Dãy biên lớn nhất:

Từ các lập luận trên ta có thể xây dựng thuật toán trên k bộ xử lý song song.

Một phần của tài liệu 28011_1712202001859520HuynhLeDaiNgoc.compressed (Trang 33)