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–1X X–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 X A+ và (Un)n1 được xác định theo công thức (2.1).
Với mọi n1, k=1,…,n, Un khi và chỉ khi tồn tại từ zUk và d, l0
sao cho
z x1x2 ... xd = x1x2 ... 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, n1, ..., k. Nếu Un, khi đó theo giả thiết quy nạp, tồn tại từ z Uk và d, l 0 sao cho
zx1x2 ... xd = x1x2 ... xl , k = ndl
Vì zUk , ta có hai trường hợp: zUk–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 x1x2 ... xl
hay z x1x2 ... xl = x x1x2 ... xd , k1 = nl(d+1). Do đó, thỏa biểu thức (2.3), với k1.
Nếu z X–1Uk–1,tồn tạitừ xX sao cho z = xzUk–1. Khi đó
z x1x2 ... xd = x zx1 x2 ... xd = x x1x2 ... xl
hay z x1x2 ... xd = x x1x2 ... xl, k 1 = nd(l+1). Do đó, thỏa biểu thức (2.3), với k1.
() Giả sử có từ z Uk và d, l 0, z x1x2 ... xd = x1x2 ... 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ừ zUk–1 sao cho x = zz X. Khi đó
x x1x2 ... xd = zz x1x2 ... xd = zx1x2 ... xl
Suy ra zx1x2 ... 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 x1x2 ... xl Suy ra zx1x2 ... xd= x x1x2 ... xl. Từ z Uk–1, k1 = nd(l+1) và
theo giả thiết quy nạp, ta có Un.
Tính chất 2.2.2. Cho X A+
và Un, Vn (n1) được định nghĩa bởi công thức (2.1), (2.2) tương ứng. Khi đó,
Vn = n
i1Ui (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 n k, 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–1X X–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
i1 Ui. Khi đó, ta có: Vk+1 = ((k i1 Ui)–1X X–1( k i1 Ui)) k i1 Ui Theo Tính chất 3.1.4, suy ra:
Vk+1 = (k i1 (Ui–1X) k i1 (X–1Ui)) k i1 Ui Vk+1 = k i1 (Ui–1X X–1Ui) k i1 Ui Vk+1 = k i1 Ui+1 k i1 Ui
- 30 - Vk+1 = k i1 (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+ và (Vn)n1 đượ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 = x1x2 ... xl, x1x1
Hay ta có thể viết x1x2 ... xd = x1x2 ... xl, x1 x1, đây là hai phân tích khác nhau của một từ trong X. Suy ra XLC, 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, x1x1, xi, xjX
Hay ta có thể viết x1x2 ... xd = x1x2 ... 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+ và (Vn)n1 được xác định theo công thức (2.2). Nếu V1= thì XLC.
- 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)n1 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 n1. Theo Hệ quả 2.2.3, suy ra XLC.
Hệ quả 2.2.5. Cho X A+
và (Vn)n1 được xác định theo công thức (2.2). Nếu tồn tại n1 sao cho Vn+1 =Vn và Vi , với mọi ni1 thì X LC. Chứng minh. Thật vậy, theo định nghĩa ta có:
Vn+2 = (Vn+11X X1Vn+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 = (Vn1X X1Vn) 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 XLC.
Nếu X là ngôn ngữ chính quy thì số các tập (Vn)n1 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)n1 theo công thức (2.2). Vì các tập (Vn)n1 thỏa bởi , do đó ta có
V1 = –1(K1), V2 = –1(K2), . . . , Vn = –1(Kn), với Kn P.
Vì V1 V2 . . . Vn A* 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 XLC.
- 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 XLC.
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 XLC.
Theo thuật toán ESPC, ta có: V1 = {b, bd, d}, V2 = V3 = {b, c, bd,
d}. Vì V3 = V2, suy ra XLC.
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à d và X không là mã. Khi đó, theo Định nghĩa 2.1.1, sẽ tồn tại một từ x X* có hai phân tích khác nhau:
x = x1x2 ... xn = x1x2... xm (x1x1)
với m, n 1, x1, x2, ..., xn, x1, x2, ..., xm X. Đặt y X, ta có x yd = x1x2
... xnyd = x1x2... xmyd x1.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 z X* 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–1Vn X+.
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,...,ym X sao cho:
x0 ... xdz = y0 ... ym , với x0y0. (2.7)
Chứng minh. () Ta chứng minh khẳng định: nếu z Vd+1 thìtồn tại
- 36 - Ta chứng minh quy nạp theo d.
- Với d = 0, lấy z V1 tùy ý, khi đó z (X–1X+ X+U). Nghĩa là sẽ tồn tại từ x0X sao cho
x0z = y0 ... ym X+.
Trường hợp m=0: ta có x0z = y0.Theo giả thiết z U= {}, suy ra
x0y0.
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 x0y0. 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 = xz Vd
Vì 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,..., ym X sao cho
x0 ... xd-1z = y0 ... ym , với x0y0. Thay z = xz vào trên ta có:
x0 ...xd-1x z = y0 ...ym , với x0y0.
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 và
x0y0, với m 0, x0, ..., xd, y0, ..., ym X thì z Vd +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
z X–1X+. Mặt khác, với X là mã, suy ra z X+ và z U. 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,