Thuật toán và máy Turing1 Thuật toánBài toán và cách tiếp cận Biểu diễn bài toánĐịnh nghĩa thuật toán2 Máy TuringMáy Turing tất định Kí hiệu máy TuringMáy Turing đoán nhận ngôn ngữ Hàm t
Trang 1Mật mã và độ phức tạp thuật toán
Chủ đề 1: Thuật toán và máy Turing
TS Ngô Thị Hiền (hien.ngothi@hust.edu.vn)
PGS.TS Nguyễn Đình Hân (han.nguyendinh@hust.edu.vn)
Khoa Toán-TinĐại học Bách khoa Hà Nội
Trang 2Thuật toán và máy Turing
1 Thuật toán
Bài toán và cách tiếp cận
Biểu diễn bài toán
Định nghĩa thuật toán
2 Máy Turing
Máy Turing tất định
Kí hiệu máy Turing
Máy Turing đoán nhận ngôn ngữ
Hàm tính được bởi máy Turing
Máy Turing không tất định
3 Bài toán giải được và không giải được
Một vài bài toán không giải được
Trang 3Hiện tượng thường gặp
⊛ Trong thực tiễn có những bài toán dễ và cả những bài toán khó
⊛ Một bài toán có thể giải được bằng nhiều thuật toán tốt xấukhác nhau
⊛ Cùng một thuật toán, có thể có trường hợp nó cho kết quảnhanh, trường hợp cho kết quả chậm
⊛ Giữa giải được về mặt lý thuyết và giải được một cách thực tếđối với nhiều bài toán cũng có những sự khác biệt đáng kể
Nguyên nhân từ đâu?
Lý thuyết độ phức tạp tính toán cho ta cách nhìn thống nhất về
độ phức tạp của các thuật toán Tuy nhiên, sẽ cần có thêm nhiềunghiên cứu để lý giải thỏa đáng!
Trang 4Bài toán và cách tiếp cận
Phát biểu bài toán: gồm 2 phần tách biệt là dữ kiện và yêu cầu Yêu cầu có thể là một câu hỏi hoặc yêu cầu tìm kiếm nghiệm
Có hai dạng bài toán phổ biến:
(1) Bài toán quyết định (decision problem): đối với mỗi dữ kiện bài toán chỉ cần trả lời là “đúng” hoặc “sai”
(2) Bài toán tìm kiếm (search problem, các bài toán tối
ưu - optimization problems, là trường hợp riêng): tìm kiếm nghiệm đối với dữ kiện bất kỳ cho trước
Trang 5Ví dụ một bài toán tìm kiếm
Bài toán xếp ba lô (phát biểu bằng ngôn ngữ tự nhiên): Cho một lôhàng hóa gồm các gói hàng, mỗi gói có khối lượng cùng với giá trị cụ thể,
và cho một chiếc ba lô Hãy chọn từ lô hàng một số gói hàng nào đó vàxếp đầy vào ba lô, nhưng không được quá, sao cho thu được một giá trịlớn nhất có thể
Bài toán trên được phát biểu lại bằng ngôn ngữ toán học như sau
Trang 6Bài toán và cách tiếp cận
⋆ Lưu ý: Bài toán quyết định tương ứng với bài toán tìm kiếm có thểđược xác định đơn giản bằng cách thay yêu cầu "tìm nghiệm đối với dữkiện bất kì cho trước" bằng câu hỏi "phải chăng tồn tại nghiệm đối vớimỗi dữ kiện đã cho?"
Chẳng hạn, bài toán quyết định tương ứng với bài toán trong ví dụ trên là:MAX-KNAPSACK
Dữ kiện: Cho hai dãy số nguyên dương
s1, s2, , sn, S và v1, v2, , vn, BYêu cầu: Phải chăng có một tập con I ⊆ {1, 2, , n} sao cho
Trang 7Phương tiện diễn tả bài toán
(EDI)
Thesauri
Structured Glossaries
XML DTDs
Informal Hierarchies (Folksonomies)
DB Schema
XML Schema
Data Models (UML, STEP)
Formal Taxanomies
Logic Programming
Description Logics
First-order, Higher-order, Modal Logic
Glossaries &
Data Dictionaries TaxanomiesThesauri,
MetaData, XML Schemas, Data Models
Logical Languages
Trang 9Ngôn ngữ hình thức
⊛ Từ rỗng được ký hiệu là ε đóng vai trò là phần tử đơn vị trongphép nhân ghép Do đó, tập Σ∗ có cấu trúc vị nhóm và Σ∗ đượcgọi là vị nhóm tự do trên Σ
⊛ Tập tất cả các từ khác rỗng trên Σ được ký hiệu là Σ+ Ta có
Σ∗ = Σ+∪ {ε}
⊛ Độ dài |ω| của từ ω = a1a2· · · an với ai ∈ Σ là n Quy ước
|ε| = 0
⊛ Mỗi tập con của Σ∗ được gọi là một ngôn ngữ trên Σ
⊛ Một X-phân tích của một từ ω ∈ Σ∗ theo X, với X ⊆ Σ∗, làmột dãy ω = u1u2· · · un với u1, u2, , un ∈ X, n ≥ 1
Trang 10Ngôn ngữ đặc trưng của bài toán quyết định
⊛ Giả sử Π là một bài toán quyết định với tập dữ kiện DΠ và câuhỏi QΠ trên mỗi dữ kiện bài toán Khi đó, đối với mỗi dữ kiện
d ∈ DΠ, ta có QΠ(d) = TRUE khi câu hỏi QΠ trên dữ kiện dđược trả lời là "đúng" Trường hợp ngược lại, QΠ(d) = FALSE
⊛ Giả sử e là một phép mã hóa thích hợp nào đó đối với bài toán
Π, e ánh xạ các dữ kiện bài toán thành các xâu thuộc Σ∗ Ta kíhiệu ⟨d⟩ = e(d) với mỗi d ∈ DΠ Khi đó Ngôn ngữ đặc trưng của
Π, kí hiệu là L(Π) (hoặc ngắn gọn bởi chữ nghiêng Π), đượcđịnh nghĩa như sau:
L(DΠ)def= {⟨d⟩ | d ∈ DΠ},L(Π)def= {⟨d⟩ | d ∈ DΠ& QΠ= TRUE}
Trang 11Bài toán và cách tiếp cận
Quy trình giải bài toán
(1) Lập mô hình toán học cho bài toán (khi cần)
(2) Dựa trên mô hình đã có, xây dựng phương pháp giải hay thuậttoán giải
Trang 12Bài toán thứ mười của Hilbert
⊛ Năm 1900, David Hilbert đặt ra hai mươi ba bài toán dành chothế kỉ 21 Trong số đó, bài toán thứ mười - được coi là bài toánquyết định cụ thể nổi tiếng nhất mọi thời đại, đề cập đến kháiniệm thuật toán
⊛ Nội dung của bài toán là: hãy cho một thuật toán để kiểm địnhmột phương trình đa thức với hệ số nguyên cho trước có nghiệmnguyên hay không ? Chẳng hạn, 3x2− 2xy − y2z − 7 = 0 cónghiệm x = 1, y = 2, z = −2, còn x2+ y2+ 1 = 0 vô nghiệm
⊛ Đến nay ta đã biết là không có một thuật toán như vậy Nghĩa
là, bài toán này không quyết định được Tuy nhiên, việc chứngminh thuật toán không tồn tại đòi hỏi phải có một định nghĩachính xác về thuật toán Vì vậy, quá trình giải bài toán thứmười đã phải chờ đến khi có định nghĩa đó
Trang 13Khái niệm trực giác về thuật toán
Thuật toán (algorithm) là một quy tắc để, với những dữ liệu ban đầu đãcho, tìm được lời giải của bài toán được xét sau một khoảng thời gian hữuhạn
Tính hiệu quả: thuật toán có thể sử dụng thật sự trên máy tính
⋆ Lưu ý:khái niệm trực giác về thuật toán không thể là cơ sở để chứngminh điều khẳng định "không tồn tại một thuật toán nào giải bàitoán đã cho"
Trang 14Ví dụ về thuật toán
Bài toán tìm cực đại
Cho n số X[1], X[2], , X[n], tìm m và số j lớn nhất sao cho
Trang 15Định nghĩa thuật toán
Năm 1936, Alonzo Church và Alan Turing đưa ra định nghĩa thuậttoán và đồng nhất nó với thuật toán theo nghĩa trực giác Từ đó,cung cấp định nghĩa thuật toán cần thiết để giải bài toán thứ mườicủa Hilbert Đến năm 1970, Yuri Matiyasevich chứng minh thuật toáncho bài toán này không tồn tại
Định nghĩa 1.1 Thuật toán là máy Turing dừng
Thuật toán được định nghĩa bởi mô hình máy Turing còn được gọi làthuật toán máy Turing
Luận đề Church-Turing (Church-Turing thesis) Thuật toán theonghĩa trực giác đồng nhất với thuật toán máy Turing
Trang 17Máy Turing
Định nghĩa 1.2 Máy Turing là một bộ năm (K, Σ, δ, s, H), với
− K là một tập hữu hạn các trạng thái
− Σ là một bảng chữ cái, chứa kí tự khoảng trống/dấu cách ⊔
và kí tự trái nhất ▷, nhưng không chứa các ký tự ← và →
− s ∈ K là trạng thái khởi đầu
− H ⊆ K là tập trạng thái kết thúc
− δ là hàm chuyển từ (K − H) × Σ sang K × (Σ ∪ {←, →}) saocho:
(a) với mọi q ∈ K − H, nếu δ(q, ▷) = (p, b) thì b =→
(b) với mọi q ∈ K − H và a ∈ Σ, nếu δ(q, a) = (p, b) thì b ̸= ▷
Trang 19Máy Turing
Định nghĩa 1.3 Một cấu hình (configuration) của máy Turing
M = (K, Σ, δ, s, H) là một phần tử của K × ▷Σ∗× (Σ∗(Σ − {⊔}) ∪ {ε})Chú ý:
− Mọi cấu hình đều được giả thiết là bắt đầu bởi ký hiệu trái nhất vàkhông bao giờ kết thúc với một dấu cách trừ khi dấu cách đang là ký
tự hiện tại được đọc Vì vậy, (q, ▷a, aba), (h, ▷ ⊔ ⊔⊔, ⊔a) và
(q, ▷ ⊔ a ⊔ ⊔, ε) là các cấu hình, nhưng (q, ▷baa, a, bc⊔) và
(q, ⊔aa, ba) thì không phải
− Một cấu hình mà thành phần của nó có chứa trạng thái trong Hđược gọi là một cấu hình dừng (halted configuration)
− Ta cũng qui ước dùng một kí hiệu đơn giản để mô tả nội dung băngvào của cấu hình Cụ thể, ta sẽ viết ωau để diễn tả nội dung băngvào của cấu hình (q, ωa, u) Kí hiệu được gạch dưới chỉ ra vị trí củađầu đọc Từ đây, ta có thể viết gọn, chẳng hạn (q, ωau) thay cho(q, ωa, u)
Trang 21Máy Turing
Định nghĩa 1.4 Cho máy Turing M = (K, Σ, δ, s, H) và hai cấu hìnhcủa M , (q1, ω1a1, u1) và (q2, ω2a2, u2), với a1, a2 ∈ Σ Khi đó, ta có
(q1, ω1a1, u1) ⊢M (q2, ω2a2, u2)khi và chỉ khi, với mỗi b ∈ Σ ∪ {←, →}, δ(q1, a1) = (q2, b) tương ứng vớimột trong các trường hợp sau đây
Trang 23Máy Turing
Định nghĩa 1.5 Với máy Turing M bất kỳ, gọi ⊢∗M là bao đóng (phản xạ, bắc cầu) của ⊢M Khi đó ta nói cấu hình C dẫn xuất (gián tiếp) cấu hình C′ nếu C ⊢∗M C′ Một phép tính toán (computation) thực hiện bởi M là một dãy các cấu hình C0, C1, , Cn, với n ≥ 0 sao cho
C0 ⊢M C1 ⊢M C2 ⊢M · · · ⊢M Cn
Ta cũng nói rằng phép tính toán có độ dài n hoặc nó có n bước và ta ký hiệu là C0 ⊢n
M Cn
Trang 24Máy Turing
Ví dụ 1.2 Cho máy Turing M = (K, Σ, δ, s, {h}), với: K = {q0, q1, h},
Σ = {a, b, ⊔, ▷}, s = q0, và δ được cho trong bảng sau
(a) Liệt kê các bước tính toán của M bắt đầu từ cấu hình (q0, ▷aabbba)?
(b) Mô tả M làm gì khi nó bắt đầu tại q0 và đọc ô bất kỳ của băng vào?
Trang 25Máy Turing
Ví dụ 1.3 Cho máy Turing M = (K, Σ, δ, s, {h}), với
K = {q0, q1, q2, h}, Σ = {a, b, ⊔, ▷}, s = q0, và δ cho trong bảng sau
(q0, ▷abb ⊔ bb ⊔ ⊔ ⊔ aba)?
Trang 26Bài tập 1.3 Xây dựng một máy Turing kiểm tra xem hai số nhị phân cho trước có bằng nhau không
Trang 28Máy Turing
Lưu ý: Hàm chuyển của máy Turing có thể được cho dưới dạng đồthị chuyển Chẳng hạn, đồ thị chuyển sau đây biểu diễn hàm chuyểnδ(p, a) = (q, b, R), δ(q, ⊔) = (r, ⊔, L), δ(r, 0) = (p, 0, R),
Trang 29Các máy Turing cơ bản
⊛ Máy Turing ghi kí tự và máy Turing di chuyển đầu đọc: Cho Σ làbảng chữ cái cố định Với mỗi a ∈ Σ ∪ {→, ←} − {▷} ta địnhnghĩa một máy Turing Ma = ({s, h}, Σ, δ, s, {h}) Trong đó, vớimỗi b ∈ Σ − {▷}, δ(s, b) = (h, a) Lưu ý, δ(s, ▷) = (s, →)
⊛ Thực chất, các máy Turing này chỉ làm một việc duy nhất là ghi
ký tự a vào ô hiện tại trên băng vào nếu a ∈ Σ hoặc di chuyểnđầu đọc nếu a ∈ {→, ←} Sau công việc đó, nó dừng ngay lậptức (ngoại trừ trường hợp nó đọc phải ký hiệu trái nhất ▷ thì đầuđọc di chuyển sang phải)
⊛ Ta sẽ đơn giản ký hiệu bằng cách viết a thay vì Ma Nghĩa là, nếu
a ∈ Σ thì máy Turing ghi kí tự−a được ký hiệu là a Các máyTuring di chuyển đầu đọc M← và M→ sẽ được ký hiệu là L và R
Trang 30Qui tắc kết hợp các máy Turing cơ bản
⊛ Mỗi máy Turing cơ bản có vai trò như một trạng thái của mộtotomat hữu hạn Cách kết hợp các máy Turing cơ bản tương tựcách kết nối các trạng thái của một otomat hữu hạn với nhau.Tuy nhiên cần lưu ý là việc kết nối từ máy này tới máy khác chỉ
có hiệu lực khi máy thứ nhất dừng và máy thứ hai bắt đầu từtrạng thái khởi đầu của nó với băng vào và vị trí đầu đọc như ởthời điểm máy thứ nhất dừng
Chẳng hạn, cho M1, M2 và M3 là ba máy Turing cơ bản Ta cómột máy Turing kết hợp làm việc như sau
Trang 31Qui tắc kết hợp các máy Turing cơ bản
Trang 33a, b, ▷, ⊔
Trang 35Máy Turing đoán nhận ngôn ngữ
Định nghĩa 1.6 Cho máy Turing M = (K, Σ, δ, s, H) với
H = {y, n} gồm hai trạng thái dừng phân biệt (y và n tương ứng với
"yes" và "no") Bất kỳ cấu hình nào có chứa thành phần y được gọi
là cấu hình chấp nhận, còn cấu hình chứa thành phần n được gọi làcấu hình bác bỏ
Với đầu vào ω ∈ (Σ − {⊔, ▷})∗, ta nói M chấp nhận (accepts) ωnếu sω ⊢∗
M uyv và ta nói M bác bỏ (rejects) ω nếu sω ⊢∗M unvĐặt Σ0 ⊆ Σ − {⊔, ▷} Tập các từ vào ω ∈ Σ∗
0 mà máy M chấp nhậntạo thành ngôn ngữ chấp nhận được của M , được gọi là ngôn ngữcủa máy Turing (language of a Turing machine) M và được ký hiệubởi LM Tập Σ0 gọi là bảng chữ đầu vào của M
Trang 36Máy Turing đoán nhận ngôn ngữ
Định nghĩa 1.7 Ngôn ngữ L được gọi là đoán nhận được theoTuring (Turing-recognizable) hay đơn giản là đoán nhận được(recognizable) nếu nó là ngôn ngữ chấp nhận được của một máyTuring nào đó, nghĩa là nếu tồn tại một máy Turing M sao cho
L = LM Khi đó ta nói rằng "máy Turing M đoán nhận ngôn ngữL", hay "ngôn ngữ L được đoán nhận bởi máy Turing M "
Ví dụ, ngôn ngữ (được đoán nhận bởi máy Turing) bao gồm tất cảcác điệp từ trong bảng chữ Σ0 là
L = {ω | ω ∈ Σ∗0, ω = ωR},trong đó ωR là từ ngược của từ ω
Trang 37Máy Turing đoán nhận ngôn ngữ
⋆ Lưu ý: Máy Turing dừng được gọi là máy quyết định (decider) bởi vì
nó luôn luôn có khả năng quyết định hay bác bỏ đối với mỗi từ vào của nó
Định nghĩa 1.8 Ngôn ngữ L được gọi là khẳng định được
(decidable), hay cụ thể hơn là khẳng định được theo Turing
(Turing-decidable) nếu nó được đoán nhận bởi máy quyết định Mnào đó Trong trường hợp ấy, ta nói rằng "máy Turing dừng M khẳngđịnh ngôn ngữ L"; ngược lại, ngôn ngữ L được gọi là không khẳngđịnh được (undecidable)
Bài tập 1.5 Cho ngôn ngữ
L = {0i1i| i = 1, 2, }
Chứng minh rằng L là ngôn ngữ khẳng định được
Trang 38Máy Turing đoán nhận ngôn ngữ
Trong Bài tập 1.5, ta cần chứng tỏ rằng tồn tại máy Turing dừng M đoánnhận ngôn ngữ L
Ý tưởng ban đầu: Máy sẽ thực hiện tính toán theo một qui trình lặp mànội dung mỗi phép lặp bao gồm:
⋆ Di chuyển zigzac đầu đọc-ghi từ kí tự khác ⊔ đầu tiên đến kí tự khác
⊔ cuối cùng trên băng và xóa các kí tự ấy nếu chúng tương ứng là 0
và 1; ngược lại, bác bỏ
⋆ Khi thực hiện bước lặp đầu tiên, máy đồng thời loại bỏ từ rỗng cũngnhư những từ đầu vào mà bắt đầu bởi kí tự 1 và những từ vào màsau kí tự 1 còn xuất hiện kí tự 0
⋆ Khi bắt đầu một phép lặp tiếp theo (máy ở trạng thái q0′), không kểphép lặp đầu tiên, nếu bắt gặp ⊔, tức băng còn toàn ô trống, thìchấp nhận
Trang 39Máy Turing đoán nhận ngôn ngữ
Qui ước cấu hình khởi đầu của các máy Turing
Giả sử M = (K, Σ, δ, s, H) là một máy Turing và ω ∈ (Σ − {⊔, ▷})∗
thì cấu hình khởi đầucủa M đối với xâu vào ω là
Trang 40Máy Turing tính các hàm
Cho hàm f : Σ∗0 → Σ∗
0 Ta có thể hình dung máy Turing tính hàm fbằng cách xử lý mỗi từ vào ω ∈ Σ∗0 sao cho, nếu tại ω hàm f xácđịnh thì máy dừng ở trạng thái chấp nhận và nội dung trên băng là từ
f (ω) ∈ Σ∗0; ngược lại, máy dừng ở trạng thái bác bỏ
Giả sử M = (K, Σ, δ, s, H) là một máy Turing Hàm
tương ứng với máy Turing M là hàm từ Σ∗0 vào Σ∗0, ký hiệu là FM và được định nghĩa như sau
FM(ω) =
không xác định nếu ngược lại
Trang 41"máy Turing dừng M tính hàm f " hay "hàm f tính được bởi máyTuring dừng M "
Bài tập 1.7 Cho hàm f : {0, 1}∗ → {0, 1}∗, trong đó
Trang 42Máy Turing tính các hàm
Trong Bài tập 1.7, ta có thể xây dựng một máy Turing dừng M theo
ý tưởng sau đây
⋆ Trước tiên loại bỏ các từ vào không có dạng 0i10k(i, k ≥ 1) vàngăn cách phần dữ liệu đầu vào với kết quả tính toán bởi dấu ♯;đồng thời, tiến hành chuyển xâu 0k sang bên phải dấu ♯ bằngcách lần lượt chuyển từng kí tự một (kí tự nào chuyển đi thìđược đánh dấu bởi ⊔)
⋆ Quá trình chuyển xâu 0k được diễn ra i lần, mỗi lần chuyển nhưvậy một kí tự 0 trong xâu 0i (bên trái kí tự 1) được xóa đi Quátrình này kết thúc khi không còn kí tự 0 nào bên trái kí tự 1
⋆ Cuối cùng, trước khi kết thúc quá trình tính toán, xóa các kí tựbắt đầu từ 1 cho đến dấu ♯ và khi đó trên băng chỉ còn lại đúng
ik kí tự 0
Trang 43Máy Turing không tất định
Định nghĩa 1.10 Một máy Turing không đơn định/không tất định(Nondeterministic Turing Machine) N là một bộ năm (K, Σ, ∆, s, H), với
− K, Σ, s, H được định nghĩa tương tự các thành phần K, Σ, s, H trongmáy Turing tiêu chuẩn (Định nghĩa 1.2)
⋆ Quá trình tính toán của máy Turing N trên mỗi từ vào ω được biểudiễn bằng một cây tính toán (computation tree), kí hiệu là TN(ω)
Trang 44Máy Turing không tất định
Định nghĩa 1.11 Cho máy Turing không tất định N với bảng chữ Σ Ta nói rằng máy Turing N chấp nhận (một cách không tất định) đầu vào ω ∈ (Σ − {▷, ⊔})∗nếu trong cây tính toán TN(ω) của N trên ω có nhánh tính toán dẫn đến cấu hình chấp nhận
⋆ Tập các từ vào mà máy Turing N chấp nhận tạo
thành ngôn ngữ chấp nhận được của N , được gọi là ngôn ngữ của máy Turing không tất định N và được kí hiệu bởi LN
Trang 45Máy Turing không tất định
Định nghĩa 1.12 Cho ngôn ngữ L và một máy Turing không tấtđịnh N Ta nói rằng máy Turing N đoán nhận ngôn ngữ L hay ngônngữ L được đoán nhận bởi máy Turing N , nếu L = LN
Định lý 1.1 Mỗi máy Turing không tất định đều có máy Turing tấtđịnh một băng tương đương
Trang 46Máy Turing không tất định
Ví dụ 1.6 Một hợp số là tích của hai số tự nhiên lớn hơn 1 (ví dụ,4,6,8,12 là các hợp số, còn 1,2,3,5,7 thì không là hợp số) Đặt
C = {100, 110, 1000, 1001, , 1011011, } là tập các xâu nhị phân biểudiễn các hợp số Hãy thiết kế một thuật toán "hiệu quả" khẳng định C
Ta có thể xây dựng một máy Turing N kiểm tra xem một số nguyên nbiểu diễn dưới dạng xâu nhị phân cho trước có là hợp số không theo ýtưởng sau đây
⋆ Chọn tùy ý hai số nhị phân p, q lớn hơn một và ghi xâu biểu diễn nhịphân của chúng lên băng vào
⋆ Thiết kế một máy Turing đơn định thực hiện nhân hai số p, q nói trên
và thay thế p và q bởi tích của chúng
⋆ Kiểm tra xem hai số nguyên n và p.q có bằng nhau không Việc này
có thể thực hiện đơn giản bằng cách so sánh từng bit một Dừng nếuhai số nguyên bằng nhau, ngược lại tiếp tục thực hiện công việc