Bài giảng Lý thuyết tính toán - Chương 1: Mở đầu - Cơ sở của môn học
Nghiên cứu về bài toán (problem) :
Lớp các bài toán giải được (resolvability)
Lời giải, hay thuật toán, để giải bài toán
Lớp các bài toán không giải được
(và sẽ không bao giờ giải được,
dù với sự tiến bộ của công nghệthông tin trong tương lai)
Nghiên cứu lý thuyết cách giải các bài toán
Mô hình tính toán ?
Độ phức tạp tính toán ?
Tính quyết định
, { } và { a } bởi các phép hội, ghép và bao đóng
35/56
Ví dụ xây dựng tập NNCQ
Cho ={}, những phần tử-ngôn ngữ có ngay (tự có) :
, {}, {}
Những ngôn ngữ L được xây dựng kiểu quy nạp (đệ quy) :
Luật : Nếu A, B , thì AB, A.B và A*
A={},
B= {},
AB={, },
A.B={}={},
B* = {, , , , ... n, ... }, n bất kỳ n>0
Vậy sau bước này ta có :
, {}, {}, {}, ..., {, , , , ... n, ... }
Và cứ thế tiếp tục xây dựng
36/56
(1)
Biểu thức chính quy (BTCQ)
Người ta sử dụng các biểu thức chính quy (Regular
Expressions) để biểu diễn các ngôn ngữ chính qui trên
Qui tắc xây dựng BTCQ trên là các biểu thức được tạo
thành theo các bước quy nạp như sau :
1. , và a, với mọi phần tử a của
đều là những BTCQ
2. Nếu và là hai BTCQ ,
thì (), (), ()* cũng là những BTCQ
Chú ý 1 : Khi viết một BTCQ, có thể bỏ các dấu ngoặc đơn
theo mức ưu tiên giảm dần : chẳng hạn viết a* thay vì (a)*
Chú ý 2 : Có thể viết a+b thay vì viết ab
Ví dụ, biểu thức ((0 (1*)) + 0) có thể viết 01*+ 0
i i ,
i i i ì
i ì i
í , i i
737/56
(2)
Biểu diễn ngôn ngữ bởi biểu thức chính qui
Ngôn ngữ L() được biểu diễn (hay được chỉ định)
bởi BTCQ theo các bước quy nạp như sau :
1. L() = , L() = { }, L(a) = { a } cho a
2. L(( )) = L() L()
3. L(()) = L()L()
4. L(()*) = L()*
Từ (1) và (2) ta có tính chất sau :
Một ngôn ngữ là chính qui nếu và chỉ nếu (nễu, khĩ )
ngôn ngữ đó được chỉ định bởi một biểu thức chính qui
Nhận xét :
Các BTCQ cũng tạo thành một ngôn ngữ
vì chúng là những xâu ký tự trên bảng chữ
Đọc pxi
38/56
Bao đóng của bảng chữ
Cho bảng chữ , khi đó, L = { a | a } là một NNCQ
Bao đóng của L là L* = * là một NNCQ có vô hạn câu
Có thể liệt kê hết (đếm được) tất cả các câu của *
Ví dụ * = (a + b)*
a b
aa ab ba bb
aaa aab aba abb baa bab bba bbb
...... ......
1
2 3
4 5 6 7
8 ......
Cho = {a, b} thì ta
đã có một thứ tự tiền
định a đứng trước b
Cho hai câu w1, w2
khi đó w1 đứng trước
w2 khĩ |w1|| w2|
, ì
i
ị
i ,
i
ĩ
39/56
Nghịch đảo câu xong thì
cũng chính nó !
Đọc xuôi, đọc ngược như
nhau
Đứng bên tê, ngó bên ni,
cũng rứa
Đứng bên ni, ngó bên tê,
cũng rứa
Đi qua, đi lai, y chang !
Hai ký tự cách đều đầu và
cuối câu y chang !
ị t ì
í !
i,
t , i,
r
i, t ,
r
i , i l i, !
i t
i !
Một số ví dụ _ 1
Cho bảng chữ = { a, b },
có thể xây dựng được một số NNCQ trên như sau :
L1 = {, a, aa, aab } L1 có 4 câu
L2 = { w * | |w| 8 } L2 gồm các câu có độ dài 8
L3 = { w * | |w| là một số lẻ } L3 gồm các câu có độ dài lẻ
L4 = { w * | na(w) = nb(w) }
= {, ab, ba, aabb, abab, baab, ... }
L4 gồm các câu có số chữ a
đúng bằng số chữ b
L5 = { w * | w = wR }
= {, aa, bb, aba, bab, abba, baab, ... }
L5 gồm các câu đối xứng (palindrome)
Có thể có thêm các nhận xét gì về
các câu đối xúng ?
t t t ì
i 40/56
Ví dụ về một thuật toán kiểm tra câu đối xứng
Func PalinCheck(w: string): bool
OK = true; i=1, l=len(w)
if l>0 then
while OK and i<=l and w(i)=w(l) do i++; l--
Return OK
w1 w2 wl-1 wl...
i++ l--
41/56
Một số ví dụ _ 2
Cho bảng chữ , a , w * và L *
Khi đó :
ak = aa ... a k chữ a liên tiếp
wk = ww ... w ghép liên tiếp k câu w
k = ... = { w * | |w| = k }
Lk = LL ... L ngôn ngữ gồm các câu là ghép k câu tuỳ ý của L
Trường hợp đặc biệt k = 0 :
a0 = w0 =
0 = L0 = { }
Chú ý { } :
{ } có một câu là
còn không có câu nào !
42/56
Một số tính chất
Với quy ước L() là NNCQ đbdb BTCQ
Khi đó :
L() = L() khi và chỉ khi =
Nghĩa là :
Hai BTCQ bằng nhau cùng biểu diễn một NNCQ
Để chứng minh rằng hai tập hợp A và B đã cho là bằng nhau
A = B
cần chỉ ra AB và BA
Nghĩa là cần CM hai chiều “” và “”
843/56
Một số ví dụ _ 3
Chứng minh rằng :
Các BTCQ : (a*b)* (b*a)* và *
cùng chỉ định một ngôn ngữ chính qui ?
Bằng cách “cùng L hai BTCQ” :
L1 = L((a*b)* (b*a)*) và L2 = L((a b)*) = L(*) với = { a, b }
Cần CM rằng L1 = L2?
Từ nay về sau để đơn giản, ta viết w thay vì wL()
Lời giải là CM hai chiều “” và “” :
“” : Rõ ràng L1 = (a*b)*(b*a)* L2 = *, vì * là bao đóng
“” : Để chứng minh điều ngược lại, ta xét một câu :
w = w1w2...wn *
Cần chứng minh w (a*b)*(b*a)*
44/56
a*b (a*b)* a*b (a*b)*
Chứng minh w (a*b)*(b*a)*
Giả sử w = w1w2...wn *
Xảy ra bốn trường hợp như sau :
1. w = an, do đó w ( a )* ( b*a )* (a*b)*(b*a)*
2. w = bn, do đó w ( b )* ( a*b )* (a*b)*(b*a)*
3. w chứa a và b, kết thúc bởi b. Ta có :
w = a . . . ab b . . . b a . . . ab b . . . b
Do đó, w (a*b)*(b*a)*
4. w chứa a và b và kết thúc bởi a.
Tương tự trường hợp 3, ta cũng có :
w L((a*b)*(b*a)*)
45/56
Các ngôn ngữ phi chính qui
Nhận xét :
Các BTCQ là vô hạn đếm được
Các BTCQ chỉ biểu diễn tập vô hạn đếm được NNCQ,
nhưng không biểu diễn hết mọi ngôn ngữ
Tồn tại những ngôn ngữ phi chính qui
và không có đủ các BTCQ để biểu diển mọi ngôn ngữ
Mọi ngôn ngữ không thể là chinh qui :
Tập hợp các ngôn ngữ và tập hợp các tập hợp con của một
tập hợp đếm được (tập hợp các câu) là không đếm được
Tập hợp các NNCQ là đếm được vì mỗi NNCQ được biểu diển
bởi một BTCQ và tập hợp các BTCQ là đếm được
Sẽ có nhiều ngôn ngữ khác với NNCQ
46/56
Có vô hạn không đếm được ngôn ngữ
= { a, b }
* = { a, b }*
Tập các NNCQ
Các ngôn ngữ phi CQ
Có 2n tập hợp con của một tập hợp A có n phần tử
Nếu A có vô hạn đếm được phần tử thì 2A có vô hạn không đếm được phần tử
t t t t
t t ì t
47/56
Ví dụ tập con
Cho A = { cục, cọ, cẫng)
Hỏi có bao nhiêu tập hợp con của A ?
Trả lời : có 2|A|=23 = 8 tập hợp con của A
Đó là các tập hợp con :
{ rỗng, {cục} , {cọ} , {cẫng},
{cục , cọ}, {cục , cẫng } , {cọ,cẫng}, {cục, cọ, cẫng} }
Lý thuyết số
, , vô hạn đếm được
vô hạn không đếm được (lấp đầy trục số)
Dựng bằng compa-êke số
- 0 1 2 ... +
2
2
48/56
Vấn đề biểu diễn ngôn ngữ
Một ngôn ngữ trên bảng chữ là tập hợp con của +
Cho L+, làm sao để biểu diễn hết mọi câu wL ?
Khi L có hữu hạn câu, chỉ việc liệt kê các câu
Khi L có vô hạn câu, không thể liệt kê hết các câu của L,
mà phải tìm cách biểu diễn hữu hạn :
Nếu L gồm các câu có một số tính chất nhất quán P nào đó,
dùng tân từ để biểu diễn tính chất P đó
L = { w* | P(w) }
Nếu L là NNCQ, sử dụng BTCQ chỉ định L :
L = L()
L tuỳ ý, không phải là NNCQ : sử dụng ôtômat và văn phạm
- Ôtômat đoán nhận câu của một ngôn ngữ
- Văn phạm sản sinh ra câu cho một ngôn ngữ
Chi rứa ?
949/56
Ví dụ biểu diễn ngôn ngữ
Ngôn ngữ có vô hạn câu :
L1 = { ai i là một số nguyên tố }, hay
= { a2, a3, a5, a7, …, a11, a13, … }
L2 = { aibj i j 0 }, hay
= { , a, ab, aab, aabb, … }
là ngôn ngữ gồm các câu có một dãy con a rồi đến một dãy con b,
trong đó số con a bên trái nhiều hơn hoặc bằng số con b bên phải
L3 = (ab)*
= { , ab, abab, ababab, … }
là ngôn ngữ gồm các câu có các cặp ab tuỳ ý (0..n cặp)
50/56
Ví dụ sản sinh ra câu của ngôn ngữ
Cho L là ngôn ngữ trên { a, b } được định nghĩa như sau :
1. L
2. Nếu w L thì awb L
3. L không còn câu nào khác nữa (ngoài 1 và 2)
Qui luật sản sinh các câu của L như sau :
Từ (1), L = { }
Coi là w, từ (2), ta có câu awb = ab = ab, L = { , ab }
Lại do (2), ta có L = { , ab, aabb, aaabbb, ... }
Cứ thế, ta có mọi câu của L có dạng aibi i 0
Có thể biểu diễn L dưới dạng :
L = { aibi i 0 }
51/56
Ví dụ đoán nhận một câu của ngôn ngữ
Giả sử định nghĩa ngôn ngữ L gồm các câu w :
Có thể thu gọn w về câu rỗng : w
Thu gọn bằng cách thay thế dần các xâu con ab của w bởi
Ví dụ :
w = ab L vì : ab
w = aabbab L vì : aabbab abab ab
Coi a, b lần lượt là cặp dấu ngoặc đơn ( và ) :
L gồm các cặp dấu ngoặc đơn cân bằng nhau không cài nhau
thu được từ một biểu thức toán học nào đó
Ví dụ, từ biểu thức (3*(x y)) (x + 1), thực hiện bỏ hết các
ký hiệu toán tử và toán hạng, ta nhận được câu ngoặc đơn
cân bằng (())(), là câu aabbab
52/56
Bài tập 1
1. r + s = s + r
2. r + (s + t) = (r + s) + t
3. r (s + t) = rs + rt
4. r = r = r
5. r + = r
6. ( + r)* = r*
7. r = r =
8. (r*)* = r*
9. r + r = r
10. r(st ) = (rs)t
11. * =
12. (r*s*)* = (r + s)*
13. r + r* = r*
14. (r + s)t = rt + st
Cho các biểu thức chính qui r, s, t,
trong đó nếu r = s thì có nghĩa L(r) = L(s)
Chứng minh các tinh chất sau (dấu + ~ dấu ):
53/56
Bài tập_2
2. Tìm các BTCQ chỉ định phần bù của các ngôn ngữ sau :
(ab)*b
((ab)(ab))*
3. Cho ngôn ngữ L trên bảng chữ { a, b }
được định nghĩa như sau :
L
Nếu w L thì awb L
Nếu w L thì bwa L
Nếu w1, w2 L thì w1w2 L
Chứng minh bằng quy nạp rằng :
ngôn ngữ L theo cách định nghĩa trên khĩ L gồm mọi câu có
số chữ a đúng bằng số chữ b (viết gọn na(w) = nb(w) ?
Phép CM quy nạp (induction) :
•Cần CM P(n), n ?
•Thử trường hợp P(0), P(1)
•Giả sử P(n) đúng
Cần CM rằng P(n+1) đúng
i i
i
54/56
Phép chứng minh
Mệnh đề
Pitagore: a2+b2=c2i
Tiên đề/Định đề
(công nhận)
i ị
Bổ đềĐịnh lýị lHệ quả
Trời sinh ra thế !i i
10
55/56
CM r + s = s + r
“L” hai vế, cần CM rằng L(r + s) = L(s + r) :
Thật vậy, biến đổi vế trái :
L(r + s) = (theo đn) = L(r) L(s)
= {w * | w L(r) w L(s) }
= {w * | w L(s) w L(r) } (không tin, lập bảng chân lý)
= L(s + r) (đpcm)
(Qed-Quote Erat Demonstandum)
56/56
CM (r*s*)* = (r + s)*
Sử dụng định nghĩa ngôn ngữ L* để CM :
Đặt L1= (r*s*)*, L2 = (r + s)*,
CM L1= L2 bằng cách CM L1 L2 và L2 L1
L1 L2 là hiển nhiên vì L2 là một bao đóng chưá mọi
câu từ các BTCQ r và s
L2 L1 ?
Theo đn L1={w|k: wkr*s*, w= w0w1 ... wk}
Cho w L, CM wL1
w = r* = r* () r* s*
w = s* = () s* r* s*
w = r*s* r* s** = L1
r, s
File đính kèm:
Bài giảng Lý thuyết tính toán - Chương 1 Mở đầu - Cơ sở của môn học.pdf

