Phép thế, nghịch thế

Một phần của tài liệu Tính toán song song và ứng dụng vào bài toán tổ hợp (Trang 38 - 42)

5. Ý nghĩa khoa học và thực tiễn của đề tài

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 Sn có n! phần tử.

Ví dụ: S3 có 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án tuần tự

Như phần 3 của chương 3 đã 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ết cầ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án vị (n n-1 … 1).

Chứng 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án tính toán tuần tự thực hiện việc liệ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 6 ta 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 thành nhiều phần nhỏ. Từ đó có thể tính toán đồng thời trên các phân đoạn đã chia

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ới số 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) p-1 số 0 n-p số 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.

Thuật toán 8: song song liệt kê hoán vị

1. Begin

2. Nhập n, p (p∈ {2,3, … , n − 1}) 3. s[i]:=0, i = 1, … , n

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

5. k:=p!; 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 1 và 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-1) 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 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ụ

7.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ụ

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 các dãy bị chặn tj[i] thành các dãy hoán vị theo thuật toán 7

7.6.In kết quả

7.7.Gửi thông tin về bộ xử lý chính. End;

8. End.

Một phần của tài liệu Tính toán song song và ứng dụng vào bài toán tổ hợp (Trang 38 - 42)

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

(71 trang)