Liệt kê từ điển

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

M ăĐ U

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

2.2.1.1. Liệt kê từ điển

Liệt kê từ điển là phương pháp vét c n theo th tự từng cấu hình theo 1 quy luật

nào đó có tính tăng dần. Tương tự như th tự chữ cái trong từđiển, th tự số nguyên

tăng dần,…Ta định nghĩa liệt kê từđiển như sau:

Cho  = s1 s2…sp và  = t1 t2…tq là các dãy số hoặc ký tự. Ta nói rằng  nhỏhơn

 (theo kiểu từđiển), ký hiệu  < , nếu hoặc

 (i) p < q và si= ti với mọi i = 1, 2,..., p hoặc

 (ii) T n t i k  min{p, q} sao cho si= ti với mọi i = 1, 2, ..., k1 và sk<tk Ví d : CHERRY < COCONUT

AN < BINH

“432” < “4324” “23257” < “2342” 2.2.1.2. Phương pháp sinh

ng dụng liệt kê theo th tự từđiển để có thể liệt kê tất c cấu hình, ngư i ta tìm cấu hình bắt đầu và cấu hình kết thúc c a dãy cần liệt kê, r i t o ra một cấu hình t hợp liền kề ngay sau một cấu hình đã có theo th tự từ diển. Ðó chính là ý tu ng

phương pháp sinh.

Thếnên để áp dụng phương pháp sinh cho các bài toán liệt kê ta cần những điều kiện như sau:

- Có thểxác định được một th tự trên các cấu hình cần liệt kê. Từđó ta có thể xác định được cấu hình đầu tiên, cấu hình cuối cùng trong th tựđã xác định.

- Có thểsuy ra được cấu hình chưa ph i là cuối cùng từ cấu hình trước đó.

Từđó trình bày thuật toán sinh t ng quát như sau:

Kí hiệu s là cấu hình hiện hành, s0 là cấu hình đầu tiên (theo th tự từđiển).

Bước 1. Khi to, gán s := s0

Bước 2. Kết xut s.

Bước 3. Kim tra tiêu chun kết thúc.

Nếu s là cu hình cui cùng thì kết thúc, nguc li sang buc 4.

Bước 4. Tìm cấu hình t đứng k sau s theo th t từđiển. Gán s:= t và quay lại bước 2.

Tuỳ theo bài toán cụ thể có thể gộp bước 3 và 4 để tăng hiệu qu thuật toán. Áp dụng thuật toán t ng quát cho các bài toán cụ thể, ta chỉ cần xác định cấu hình đầu tiên

s và phương pháp tìm cấu hình t kế tiếp sau cấu hình s.

2.2.2. Các bài toán liệt kê thường gặp

2.2.2.1. Dãy bị chặn

Ký hiệu Z là tập các số nguyên. Cho n là một số nguyên dương nào đó, gi sử p và q là 2 dãy số nguyên có độ dài n và ký hiệu như sau:

p=( p1 p2…pn), q=(q1 q2…qn)| pi, qi∈ Z, ∀i ∈1, …, n Ta có định nghĩa sau:

1. p ≤ q khi và chỉ khi pi≤ qi∀i∈(1 … n)

2. p < q khi và chỉ khi ∃ j∈(1 … n) : pj<qj và pi≤qi : ∀i∈(1 … n) và i≠j Bài toán dãy bị chặn được phát biểu như sau:

Cho hai dãy số nguyên s và g có độ dài n, sao cho s < g, hãy tìm tất c các dãy số t độ dài n sao cho s ≤ t ≤ g.

Gi sử s=(s1 s2… sn) và g=(g1 g2…gn), hai dãy này được gọi là các dãy biên. Các dãy cần tìm t=(t1 t2... tn) ph i thỏa mãn:

ti Z Si≤ăti≤ăgi i (1ăầăn) (1)

Ví dụ: Cho s=(3 2 1 4) và g= (4 2 2 6) là hai dãy biên, các dãy số nguyên t thỏa s≤t≤g và cho s’=(0 0 0) và g’=(0 1 2) là hai dãy biên và các dãy số nguyên t’ tho i mãn s’≤t’≤g’. Như vậy, t và t’ được sắp xếp theo th tự từ điển tăng đần như trong b ng sau:

Bảng 2.2. Ví dụ dãy bị chặn

STT Dãy bị chặn t STT Dãy bị chặn t STT Dãy bị chặn t’

1 3 2 1 4 7 4 2 1 4 1 0 0 0 2 3 2 1 5 8 4 2 1 5 2 0 0 1 3 3 2 1 6 9 4 2 1 6 3 0 0 2 4 3 2 2 4 10 4 2 2 4 4 0 1 0 5 3 2 2 5 11 4 2 2 5 5 0 1 1 6 3 2 2 6 12 4 2 2 6 6 0 1 2

Đ nh lý 1: Cho s=(s1 s2…sn) và g=(g1 g2…gn) là hai dãy biên. Các dãy t=(t1t2...tn) là dãy bị chặn. gọi C là sốlượng các dãy t. Khi đó ta có:

C=∏ (2) Chng minh:

Ta có: vị trí đầu tiên t1 có thể chọn một trong các giá trị s1, s1+1, s1+2, …, g1. Nên thành phần t1 có g1-s1+1 cách chọn.

Tương tự như vậy, thành phần t2 có g2-s2+1 cách chọn, thành phần n có gn-sn+1 cách chọn. Tương tự lập luận cho ti với i=1..n kết hợp với nguyên lý nhân ta có số lượng các dãy c a t là C=(g1-s1+1)x(g2-s2+1)x…x(gn-sn+1)= ∏

2.2.2.2. Bài toán tập con

Bài toán tập con là bài toán lựa chọn đối tượng phần tử có trong tập hợp đã cho mà không quan tâm đến th tự c a các phần tử ấy.

Với tập hợp X có n phần tử thì X có 2ntập con bao g m c phần tử rỗng và chính

nó.

Có các phương pháp cho bài toán tập con như:

- Phương pháp th tự từ điển: liệt kê tuần tự các tập con theo thư tự từ điển.

- Phương pháp mã Gray: theo th tự mã Gray, mỗi tập con sau được t o b i tập con đ ng trước nó bằng cách thêm hoặc bớt 1 phần tử.

- Phương pháp đếm nhị phân: sinh ra tập con S thông qua việc quan sát tập con S’ bằng một chuỗi nhị phân g m n bit. Sao cho bit th i bằng 1 nếu phần tử th i c a S thuộc S’

Ví dụ: tìm tất c tập con c a tập hợp A={1,2,3}

A có 23=8 tập con {},{1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}

Ta có thể biểu diễn các tập con c a dãy có 3 phần tử theo d ng dãy nhị phân, với giá trị 1 tương ng với phần tử đó xuất hiện trong tập con, giá trị 0 tương ng với việc phần tử đó không xuất hiện trong tập connhư b ng sau:

Bảng 2.3. Biểu diễn tập con theo dạng nhị phân

STT Phần tử 1 Phần tử 2 Phần tử 3 1 0 0 0 2 0 0 1 3 0 1 0 4 0 1 1 5 1 0 0 6 1 0 1 7 1 1 0 8 1 1 1

2.2.2.3. Hoán vị n phần tử

Hoán vị c a một tập đối tượng là sự liệt kê ra các đối tượng đó theo một trật tự nhất định. Hoán vị thư ng xuất hiện trong nhiều lĩnh vực toán học xem xét đến th tự c a các phần từ. Hoán vị xuất hiện nhiều trong các bài toán về sắp xếp trong ngành công nghệ thông tin.

Bài toán hoán vị:

Cho tập X g m n phần tử, mỗi hoán vị c a tập X là 1 cách liệt kê tất c các phần tử c a X theo 1 th tự nhất định. Với Sn là tập tất c các hoán vị c a tập X. Mỗi hoán vị trên tập X là một xong ánh f: XX nên có thể biểu diễn thành một dãy số nguyên độ dài n như sau

f= <f(1) f(2)…f(n)> với f(i) ∈X và f(i) ≠ f(j) nếu 1≤ i ≠ j ≤ n

Bài toán yêu cầu tìm ra tất c dãy số f này.

Ví dụ: Có 3 ký tự ABC tìm tất c các chuỗi có 3 ký tự t o từ 3 ký tự đã cho. Ta có 6 hoán vị c a nó để t o thành chuỗi có 3 ký tự {ABC}, {ACB}, {BAC},

{BCA}, {CAB}, {CBA}

Có nhiều phương pháp như là: phương pháp từ điển, từ điển ngược, thêm bớt một phần tử, đ i chỗ, sinh hoán vị nh vector nghịch thế,… chương 3 ta sẽ nghiên c u về phương pháp tìm hoán vị từ vector nghịch thế và tính toán song song hóa.

2.2.2.4. Bài toán phân hoạch

Phân ho ch tập hợp là phân chia các phần tử c a một tập hữu h n thành các tập con khác rỗng và không có phần tử chung.

Cho X là tập hợp g m có n phần tử

Một phân ho ch c a X là một họ các tập con π = {A1, A2,…Ak} thỏa các tính chất sau:

 Ai≠ ϕ, 1≤ i ≤ k

 Ai∩ Aj= ϕ;1≤ i < j ≤ k  A1 U A2 U … U Ak = X

Các tập con A1, A2,…Akđược gọi là các khối c a phân ho ch π Bài toán được đặt ra là tìm tất c các phân ho ch c a tập X

Ví dụ: phân ho ch c a tập 4 phần tử là: {{1234}}, {{123},{4}},

{{124},{3}}, {{12},{34}}, {{12},{3},{4}}, {{134},{2}}, {{13},{24}}, {{13},{2},{4}}, {{14},{23}}, {{1},{234}} {{1},{23},{4}}, {{14},{2},{3}}, {{1},{24},{3}}, {{1},{2},{34}}, {{1},{2},{3},{4}}

CH NGă3

NGăD NGăTệNHăTOỄNăSONGăSONGăVĨOăBĨIăTOỄNăT ăH P

Chương 2 đã trình bày lý thuyết về toán t hợp cũng như các bài toán liệt kê có độ ph c t p lớn. chương này tập trung trình bày các ý tư ng và thuật toán để gi i quyết các bài toán đã nêu. Từ các thuật toán tính toán tuần tự đơn gi n ta vận dụng các phương pháp phân rã bài toán các dữ liệu đầu vào, đầu ra và phân cho các bộ xử lý thực hiện đ ng th i. Từ đó đềxuất các thuật toánxử lý song song.

3.1. BƠiătoánăsinhădưyăb ăchặn

Theo chương 2 trình bày việc sinh dãy bị chặn có thể liệt kê bằng cách liệt kê từ điển thông thư ng, ta xây dựng thuật toán tuần tự cho bài toán sinh dãy bị chặn:

3.1.1. Xây dựng thuật toán tuần tự

Thu tătoánă1: sinhăt tăc ădưyăb ăchặn

1. BEGIN

2. Nhập n, s[i], g[i], i=1,…,n //s, g là hai biên nhỏ nhất và lớn nhất

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

4. Repeat

5. Print t[i], i=1,…,n

6. i:=n;

7. While t[i] =g[i] do 8. Begin

9. t[i]:=s[i]; 10. i:=i-1; 11. End;

12. If i>=1 then t[i]:=t[i]+1; 13.Untill i=0

14.END

Trong thuật toán này, ta thấy trong vòng lặp bước 12, giá trị c a t[i] sẽ ch y tăng dần từ s[i] đến g[i] có g[i]-s[i]+1 giá trị. Mà i ch y từ n về 1 bước 10 nên có n

giá trị. Vậy độ ph c t p c a thuật toán sinh tất c dãy bị chặn này xấp xỉ bằng O(n*an)

với a = max {(g1-s1+1),(g2-s2+1),…,(gn-sn+1)}.

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

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