Thuật toán Sardinas-Patterson cải tiến

Một phần của tài liệu THUẬT TOÁN mới KIỂM ĐỊNH và mã mở RỘNG (Trang 27)

Trong phần tiếp theo, ta cải biên phương pháp tổ hợp của thuật toán Sardinas-Patterson được trình bày ở trên (có độ phức tạp cỡ (2k). Trong phần này, tác giả trình bày thuật toán ESPC (the Extension of Sardinas Patterson for Codes) để kiểm tra một ngôn ngữ chính quy X

cho trước có là mã hay không. Nhờ sử dụng phương pháp đại số, cho phép đánh giá tính hiệu quả của thuật toán ESPC, có độ phức tạp cỡ (k3).

Bằng phương pháp tổ hợp mới để tính toán các tập thương Vn,

n = 1, 2, ... Các bước thực hiện của thuật toán ESPC được biểu diễn dưới dạng công thức đệ quy như sau:

V1 = X–1X  {},

Vn+1 = (Vn–1XX–1Vn)  Vn, n  1.

Để chứng minh tính đúng đắn của thuật toán ESPC, ta chứng minh Bổ đề 2.2.1 và Tính chất 2.2.2 sau:

Bổ đề 2.2.1. Cho XA+ (Un)n1 được xác định theo công thức (2.1).

Với mọi n1, k=1,…,n,  Un khi và chỉ khi tồn tại từ zUk và d, l0

sao cho

z x1x2 ... xd = x1x2 ... xl, k = ndl, xi, xj X (2.3) (2.2)

- 28 -

Chứng minh. Ta chứng minh quy nạp theo k như sau:

() Xét k = n. Nếu  Un, ta có z = , d = l = 0, thỏa biểu thức (2.3). Ngược lại, nếu thỏa (2.3), thì d = l = 0. Suy ra z =  và do đó Un.

Giả sử n>k  1. Giả sử biểu thức (2.3) thỏa với n, n1, ..., k. Nếu  Un, khi đó theo giả thiết quy nạp, tồn tại từ z Ukd, l  0 sao cho

zx1x2 ... xd = x1x2 ... xl , k = ndl

zUk , ta có hai trường hợp: zUk–1–1X hoặc z X–1Uk–1 .

 Nếu z Uk–1–1X, tồn tạitừ z Uk–1 sao cho x = zz X. Khi đó

x x1x2 ... xd = z zx1x2 ... xd = z x1x2 ... xl

hay z x1x2 ... xl = x x1x2 ... xd , k1 = nl(d+1). Do đó, thỏa biểu thức (2.3), với k1.

 Nếu z X–1Uk–1,tồn tạitừ xX sao cho z = xzUk–1. Khi đó

z x1x2 ... xd = x zx1 x2 ... xd = x x1x2 ... xl

hay z x1x2 ... xd = x x1x2 ... xl, k 1 = nd(l+1). Do đó, thỏa biểu thức (2.3), với k1.

() Giả sử có từ zUk và d, l  0, z x1x2 ... xd = x1x2 ... xl, k = ndl, với xi , xj X. Ta chứng minh Un.

Nếu l = 0, thì d = 0 và k = n. Ta có z. = , suy ra z = . Bởi k = n, ta có  Uk = Un. Do đó l  1. Vì zUk, ta có các trường hợp: z Uk–1–1X

hoặc zX–1 Uk–1.

 Nếu zUk–1–1X ,tồn tạitừ zUk–1 sao cho x = zzX. Khi đó

x x1x2 ... xd = zz x1x2 ... xd = zx1x2 ... xl

Suy ra zx1x2 ... xl = x x1x2 ... xd. Từ z Uk–1, k 1 = nl(d+1) và theo giả thiết quy nạp, ta có Un.

- 29 -

 Nếu zX–1Uk–1, tồn tạitừ xX sao cho z = xz Uk–1. Khi đó

zx1x2 ... xd = x z x1x2 ... xd = x x1x2 ... xl Suy ra zx1x2 ... xd= x x1x2 ... xl. Từ z Uk–1, k1 = nd(l+1) và

theo giả thiết quy nạp, ta có Un. 

Tính chất 2.2.2. Cho XA+

và Un, Vn (n1) được định nghĩa bởi công thức (2.1), (2.2) tương ứng. Khi đó,

Vn = n

i1Ui (2.4)

Chứng minh. Chứng minh quy nạp theo n.

+ Với n = 1, ta có V1 = U1 = X–1X  {}. Vì vậy, biểu thức (2.4) thỏa với n = 1.

+ Giả sử khẳng định đúng với mọi nk, k  1, ta sẽ chứng minh khẳng định đó cũng đúng với n = k+1.

Thật vậy, từ định nghĩa ta có Vk+1 = (Vk–1XX–1Vk) Vk. Theo giả thiết quy nạp, biểu thức (2.4) thỏa với n = k. Nghĩa là Vk = k

i1 Ui. Khi đó, ta có: Vk+1 = ((k i1 Ui)–1XX–1( k i1 Ui))  k i1 Ui Theo Tính chất 3.1.4, suy ra:

Vk+1 = (k i1 (Ui–1X)  k i1 (X–1Ui))  k i1 Ui Vk+1 = k i1 (Ui–1XX–1Ui)  k i1 Ui Vk+1 = k i1 Ui+1  k i1 Ui

- 30 -  Vk+1 = k i1 (Ui+1  Ui)  Vk+1 = 1 1   k i Ui. Do đó, thỏa biểu thức (2.4).

Vậy, khẳng định đúng với mọi n 1. 

Từ Bổ đề 2.2.1 và Tính chất 2.2.2, ta có các kết quả sau:

Hệ quả 2.2.3. Cho X A+ (Vn)n1 được xác định theo công thức (2.2). Khi đó, X LC khi và chỉ khi, với mọi n  1, Vn .

Chứng minh. () Ta chứng minh, nếu X LC thì Vn với mọi n 1. Phản chứng, giả sử tồn tại n  1 sao cho  Vn, theo Tính chất 2.2.2, suy ra Ui nào đó, i =1,...,n. Khi đó, theo Bổ đề 2.2.1, tồn tại

d, l 0, x1, x2, …,xd, x1, x2, ..., xl X sao cho x1x2 ... xd = x1x2 ... xl, x1x1

Hay ta có thể viết x1x2 ... xd = x1x2 ... xl, x1  x1, đây là hai phân tích khác nhau của một từ trong X. Suy ra XLC, mâu thuẫn.

() Ta chứng minh, nếu  Vn với mọi n 1 thì X LC.

Phản chứng, giả sử X  LC. Khi đó, tồn tại w A* có hai phân tích khác nhau trong X:

w = x1x2 ... xd = x1 x2 ... xl, x1x1, xi, xjX

Hay ta có thể viết x1x2 ... xd = x1x2 ... xl, x1  x1, xi, xj X. Vì |xj|>|e|, j=1,...,l, suy ra tồn tại i 1 sao cho  Ui (theo Bổ đề 2.2.1). Từ Tính chất 2.2.2, suy ra  Vn, ni 1, mâu thuẫn. 

Hệ quả 2.2.4. Cho X A+ (Vn)n1 được xác định theo công thức (2.2). Nếu V1= thì XLC.

- 31 -

Chứng minh. Ta chứng minh, nếu V1 =  thì X  LC. Thật vậy, theo cách xác định các tập (Vn)n1 bởi công thức (2.2), nếu có V1 =  

V2 =   . . .  Vn =  hay Vn = , với mọi n 1. Do đó, ta có  Vn, với mọi n1. Theo Hệ quả 2.2.3, suy ra XLC. 

Hệ quả 2.2.5. Cho X A+

(Vn)n1 được xác định theo công thức (2.2). Nếu tồn tại n1 sao cho Vn+1 =Vn và Vi , với mọi ni1 thì X LC. Chứng minh. Thật vậy, theo định nghĩa ta có:

Vn+2 = (Vn+11XX1Vn+1)  Vn+1 (2.5) Nếu Vn+1 = Vn thì thay Vn+1 bởi Vn vào biểu thức (2.5), ta có:

Vn+2 = (Vn1XX1Vn) Vn = Vn+1 = Vn

Tương tự, ta có Vn+i = Vn, với mọi n, j 1. Vì  Vi, theo định nghĩa của các tập Vn+1 bởi công thức (2.2), suy ra Vn+1, với mọi n i 1.

Theo Hệ quả 2.2.3, suy ra XLC.

Nếu X là ngôn ngữ chính quy thì số các tập (Vn)n1 là hữu hạn. Từ Hệ quả 2.2.3, Hệ quả 2.2.4, Hệ quả 2.2.5, ta có thuật toán sau:

* Thuật toán ESPC kiểm tra mã

Input: Cho X A+ làngôn ngữ chính quy. Output: Kết luận X là mã hoặc không.

B1. V1 = X–1X  {}, n = 1 , If (V1 = ) Then gotoB4 , B2. (Loop) Vn+1 = (Vn–1X X–1Vn )  Vn , B3. If ( Vn+1) Then goto B5 , If (Vn+1 = Vn) Then gotoB4 , Else n = n +1, goto B2 ,

- 32 -

B4. Thông báo "X là mã" và Kết thúc.

B5. Thông báo " X không là mã" và Kết thúc.

Nhận xét 2.2.6. Cho X là ngôn ngữ chính quy và ngôn ngữ Y = {}. Theo Hệ quả 1.1.4, ta có thể xây dựng một toàn cấu vị nhóm : A* P, với P là vị nhóm hữu hạn. Đặt k = |P|. Khi đó, thuật toán SPC sẽ cho câu trả lời khẳng định sau tối đa 2k bước thực hiện (xem Hệ quả 2.2.7), trong khi thuật toán mở rộng ESPC đưa ra câu trả lời với số bước tối đa chỉ là k bước thực hiện.

Thật vậy, ta xem xét thuật toán ESPC thực hiện tính toán các tập (Vn)n1 theo công thức (2.2). Vì các tập (Vn)n1 thỏa bởi , do đó ta có

V1 = –1(K1), V2 = –1(K2), . . . , Vn = –1(Kn), với KnP.

V1 V2  . . .  VnA* nên ta có khẳng định sau: nếu các tập

Vn rời nhau, với mọi n 1, khi đó: K1 K2 . . . Ki P. Số tập Kn là

hữu hạn và không vượt quá |P| tập (bởi tính chất bao hàm), suy ra số các tập Vn không vượt quá |P| tập. Ngược lại, nếu có sự lặp lại của các tập Vn

thì số tập Kn khác nhau là không vượt quá |P| tập. Do đó, số các bước thực hiện để tính toán các tập Vn là hữu hạn và không vượt quá k bước.

Như vậy, ta có thể kết luận: nếu ta chỉ quan tâm đến số các tập Vn

khác nhau như trong thuật toán SPC thì thuật toán ESPC có độ phức tạp cỡ (k).

Mặt khác, độ phức tạp của mỗi bước tính Vn+1 từ Vn kể đến từng

phép tính trên vị nhóm P, thì có cỡ (|P|.|P| + |P|.|P|)  2.|P|2 và xây dựng vị nhóm P đòi hỏi tối đa |P|3 phép tính trên vị nhóm P nhờ thuật toán loang dần. Vì vậy, độ phức tạp của thuật toán kiểm định mã ESPC

trong trường hợp xấu nhất là cỡ (|P|3)  (k3).

Ví dụ 2.2.7. Cho A = {a, b} và X = {aa, aab, baa, baab}. Theo thuật toán trên ta có V1 = {b}, V2 = {b, aa, aab}, V3 = {ε, b, aa, aab}. Vì  ∈ V3, suy ra XLC.

- 33 -

Ví dụ 2.2.8. Cho A = {a, b, c} và X = {ba, bac, cb}. Theo thuật toán trên ta có V1 = {c}, V2 = {c, b}, V3 = {c, b, a, ac}, V4 = {c, b, a, ac}, Ta có V4 = V3, suy ra XLC.

Ví dụ 2.2.9 sau đây minh họa một trường hợp đặc biệt, do tính chất bao hàm của các tập Vi, thuật toán ESPC dừng sau khi tính V3, còn thuật toán Sardinas-Patterson phải tiếp tục tính U4 vì các tập Ui khác

nhau, 3 ≥ i ≥ 1.

Ví dụ 2.2.9. Cho A = {a, b, c, d} và X = {a, ab, bc, cb, abd}. Theo thuật toán SardinasPatterson phải tiếp tục tính, ta có U1 = {b, bd, d}, U2 = {c}, U3 = {b}, U4 = {c}. Vì U4 = U2, suy ra XLC.

Theo thuật toán ESPC, ta có: V1 = {b, bd, d}, V2 = V3 = {b, c, bd,

d}. Vì V3 = V2, suy ra XLC.

2.3 Độ trễ giải mã

Khái niệm độ trễ giải mã xuất hiện từ năm 1959 bởi E.N.Gilbert và E.F.Moore [12]. Đây là một hướng mở rộng mã prefix, trong đó mã prefix là mã có độ trễ 0. Định lý cơ bản của mã có độ trễ hữu hạn được M.P.Schützenberger chứng minh đầy đủ [26], theo đó, mọi mã hữu hạn cực đại hoặc là mã prefix (có độ trễ 0) hoặc có độ trễ giải mã vô hạn.

Trong phần này, chúng tôi sẽ đưa ra khái niệm độ trễ giải mã của mã, mối quan hệ giữa ngôn ngữ có độ trễ giải mã hữu hạn với mã và đề xuất thuật toán cho phép xác định chính xác độ trễ giải mã cho mã và cho mã luân phiên.

Định nghĩa 2.3.1. Cho X A+ là ngôn ngữ. Ta nói răng, X có độ trễ giải mã hữu hạn d (với d là một số nguyên dương) nếu x0, x1,..., xd, x X,

z A*,

- 34 -

Dễ thấy rằng nếu hệ thức (2.6) thoả mãn với d nào đó thì nó cũng đúng với mọi d d. Nếu X có độ trễ giải mã hữu hạn thì số nguyên nhỏ nhất thoả hệ thức (2.6) được gọi là độ trễ giải mã của X (xem Hình 2.1).

Hình 2.1. Ngôn ngữ có độ trễ giải mã hữu hạn d.

Tương tự như trong mã thông thường, kết quả sau cho ta mối liên hệ giữa ngôn ngữ có độ trễ giải mã hữu hạn với tính chất mã.

Mệnh đề 2.3.2. Nếu X A+ có độ trễ giải mã hữu hạn thì X cũng là mã.

Ngược lại không đúng.

Chứng minh. Giả sử X có độ trễ giải mã hữu hạn là dX không là mã. Khi đó, theo Định nghĩa 2.1.1, sẽ tồn tại một từ xX* có hai phân tích khác nhau:

x = x1x2 ... xn = x1x2... xm (x1x1)

với m, n  1, x1, x2, ..., xn, x1, x2, ..., xm  X. Đặt yX, ta có x yd = x1x2

... xnyd = x1x2... xmydx1.X*. Theo Định nghĩa 2.3.1, suy ra x1 = x1, mâu thuẫn. Vậy X là mã.

Ngược lại, ta xét ví dụ sau: Cho X = { aa, ba, bb, baa, bba } là mã nhưng không có độ trễ giải mã hữu hạn. Bởi vì, d  0, x = bb, x = bba,

y = aad thì xyXd +1 là từ prefix thực sự của xy Xd+1 . 

Từ Định nghĩa 2.3.1 và Mệnh đề 2.3.2, ta có các tính chất sau:

Tính chất 2.3.3. Nếu X A+ là mã có độ trễ giải mã hữu hạn d thì mọi tập con khác rỗng của X sẽ có độ trễ giải mã hữu hạn bé hơn hoặc bằng d.

. . . . . .

x0 x1 xd

x’

- 35 -

Tính chất 2.3.4. Nếu X A+ là mã và các từ x, x0, x1,..., xd X sao cho x0  x và x0x1 ... xd <p xz, với zX* thì X có độ trễ giải mã bé nhất là d+1.

* Thuật toán xác định độ trễ giải mã cho mã:

Input: ChoX A+ là mã , X là ngôn ngữ chính quy. Output: Độ trễ giải mã của X.

Các bước thực hiện của thuật toán:

B0. U = {}, V0 = X+. B1. V1 = X–1V0  X+  U .

If V1 =  Then n = 0 goto B4.

Else n = 1.

B2. (Lặp) Biết Vnxác địnhVn+1như sau Vn+1 = X–1VnX+.

B3. If Vn+1 =  Then goto B4.

Else If (Vk = Vn+1) (some k n) Then goto B5 .

Else n = n +1, goto B2.

B4. Thông báo “Xlà mã có độ trễ giải mã hữu hạn d=n” và Kết thúc.

B5. Thông báo “Xlà mã có độ trễ giải mã vô hạn” và Kết thúc.

Tính đúng đắn của thuật toán được dựa trên các bổ đề và mệnh đề sau:

Bổ đề 2.3.5. Cho X A+ và U,Vd+1 được xác định như trên. Với d  0,

z A+: z Vd+1 khi và chỉ khi tồn tại m  0, x0,...,xd, y0,...,ymX sao cho:

x0 ... xdz = y0 ... ym , với x0y0. (2.7)

Chứng minh. () Ta chứng minh khẳng định: nếu zVd+1 thìtồn tại

- 36 - Ta chứng minh quy nạp theo d.

- Với d = 0, lấy zV1 tùy ý, khi đó z  (X–1X+ X+U). Nghĩa là sẽ tồn tại từ x0X sao cho

x0z = y0 ... ymX+.

Trường hợp m=0: ta có x0z = y0.Theo giả thiết z U= {}, suy ra

x0y0.

Trường hợp m >0: nếu x0 = y0, thì z = y1 ... ym X+, mâu thuẫn với giả thiết z V1. Suy ra x0y0. Vậy, khẳng định đúng với d = 0.

- Giả sử khẳng định đã đúng với mọi d<k, k >0. Ta sẽ chứng minh khẳng định đó cũng đúng với d = k.

Thật vậy, lấy zVd+1, nghĩa là zX–1Vd. Khi đó sẽ tồn tại từ x

X, sao cho:

z = xzVd

z Vd, theo giả thiết quy nạp thì z thỏa biểu thức (2.7). Nghĩa là, tồn tại m  0, x0,..., xd-1, y0,..., ymX sao cho

x0 ... xd-1z = y0 ... ym , với x0y0. Thay z = xz vào trên ta có:

x0 ...xd-1x z = y0 ...ym , với x0y0.

Vậy, khẳng định đúng với d = k. Từ đó, theo quy nạp ta suy ra khẳng định đúng với mọi d  0.

() Ngược lại, ta chứng minh khẳng định: nếu x0 ... xdz = y0 ... ym

x0y0, với m  0, x0, ..., xd, y0, ..., ym X thì zVd +1. Ta chứng minh quy nạp theo d.

- Với d = 0, ta có x0z = y0 ... ym, với x0  y0, x0, y0,..., ym X, suy ra

zX–1X+. Mặt khác, với X là mã, suy ra zX+ và zU. Do đó

- 37 -

- Tiếp theo, giả sử khẳng định đã đúng với d<k, k  0. Ta chứng minh khẳng định đó cũng đúng với d = k. Nghĩa là, với mọi từ z A+, m  0,

Một phần của tài liệu THUẬT TOÁN mới KIỂM ĐỊNH và mã mở RỘNG (Trang 27)

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

(63 trang)