Professional Documents
Culture Documents
ôn tập mật mã và độ phức tạp thuật toán
ôn tập mật mã và độ phức tạp thuật toán
1. Máy turing
1.1. Mô tả
Ở dạng đơn giản và thông dụng, máy Turing có thể được mô tả với các bộ
phận sau:
• Một dải băng (dài vô hạn), ở trên có nhiều ô. Mỗi ô có ghi một ký tự, và
ký tự này có thể được đọc ra bên ngoài, hoặc được bên ngoài ghi đè lên
(thay thế bằng ký tự khác). Các ký tự thuộc một bảng ký tự hữu
hạn V (tức là có hữu hạn các ký tự), trong đó có một ký tự đặc biệt gọi
là ký tự trống. Các ô trên dải băng chưa bao giờ được ghi đè lên từ bên
ngoài, luôn được coi là có ghi sẵn ký tự trống.
• Một đầu đọc và ghi, chạy trên dải băng (hoặc đứng yên cho dải băng
chạy qua). Tại một thời điểm, đầu đọc này có thể thực hiện một trong 4
nhiệm vụ:
o Đọc ký tự trên ô mà đầu đọc đang nằm trên nó.
o Ghi ký tự mới lên ô mà đầu đọc đang nằm trên nó.
o Di chuyển sang ô bên trái
o Di chuyển sang ô bên phải
• Một bộ phận ghi nhớ lại các trạng thái của máy Turing. Tại một thời
điểm, máy Turing luôn ở một trong số hữu hạn các trạng thái, và bộ ghi
nhớ cho biết máy đang ở trạng thái nào. Tập tất cả các trạng thái có thể
ký hiệu là S. Trong số các trạng thái, có trạng thái khởi động (hay trạng
thái ban đầu), mặc định là máy Turing sẽ luôn ở trạng thái này khi bắt
đầu hoạt động (ví dụ khi bật máy lên).
• Một hàm chuyển trạng thái hay bảng câu lệnh quy định hoạt động của
máy Turing. Bảng này thường là danh sách chứa các quy tắc có dạng
Si Ci → Sj Cj Dj. Ở đây Si, Sj là các trạng thái trong S. Ci, Cj là các ký tự
trong bảng ký tự V (đọc được từ băng hoặc ghi lên băng). Dj là một trong
2 hướng di chuyển của đầu đọc, sang trái hoặc sang phải. Quy tắc
Si Ci → Sj Cj Dj có thể hiểu là: nếu máy đang ở trạng thái Si và đầu đọc
đọc được ký tự Ci thì thực hiện các công việc sau:
o Ghi đè ký tự Cj lên ô mà đầu đọc đang nằm trên
o Di chuyển đầu đọc lệch một ô theo hướng D j (sang trái hoặc
phải)
o Chuyển máy sang trạng thái Sj và ghi nhớ nó vào bộ ghi nhớ
trạng thái.
Trong một số mô hình, nếu máy đang ở trạng thái Si và đầu đọc đọc được ký
tự Ci, nhưng chưa có quy tắc nào quy định việc hành xử của máy lúc đó, thì
máy được dừng lại và không tiếp tục chạy nữa.
Trong số các trạng thái trong S, có thể quy định ra những trạng thái được gọi
là trạng thái kết thúc. Trong lý thuyết về ngôn ngữ hình thức, nếu một đoạn
ký tự (gọi là một từ hay một câu) ghi trên dải băng đưa máy Turing chạy từ
trạng thái ban đầu đến một trong số các trạng thái kết thúc thì câu viết đó
được gọi là đoán nhận bởi máy Turing đã cho.
Ngoài mô hình đã miêu tả, còn có nhiều dạng khác như dải băng chỉ có một
đầu (trái hoặc phải) là vô tận; hoặc máy có nhiều dải băng, nhiều đầu đọc,...
tuy nhiên tất cả các máy đó đều có hoạt động tương đương với máy đã mô
tả. Cụ thể hơn, trong lý thuyết ngôn ngữ hình thức, nếu có thể xây dựng máy
theo một dạng bất kỳ đoán nhận một tập hợp các từ nào đó, thì luôn có thể
xây dựng máy Turing theo dạng đã mô tả ở trên đoán nhận cùng tập hợp các
từ này.
Định nghĩa máy Turing;
Một 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 đựng kí tự khoảng trống/dấu cách t 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;
− δ, hàm chuyển, là một hàm từ (K − H) × Σ sang K × (Σ ∪ {←, →}) sao
cho:
(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 6= .. SAMI-HUST
2021 Mật mã và độ phức tạp thuật toán
Định nghĩa cấu hình máy Turing:
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 × .Σ ∗ × (Σ∗ (Σ − {t}) ∪ {ε}).
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, . t tt, ta) và (q, . t a t t, ε) là các cấu hình,
nhưng (q, .baa, a, bct)-> do có 4 thành phần và (q, taa, ba) thì không phải->
do không có kí tự trái nhất
− 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ăng vào
của cấu hình. Cụ thể, ta sẽ viết ωau để diễn tả nội dung băng và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). SAMI-HUST 2021
Mật mã và độ phức tạp thuật toán 19 /
1.2. Giải thích hoạt động
Đầu đọc di chuyển theo bảng trạng thái, máy turing thực hiện từng
bước 1, đến khi gặp trạng thái dừng thì dừng.
Qui tắc kết hợp các máy Turing cơ bản
Mỗi máy Turing cơ bản giống như một trạng thái của một otomat 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.
* Ví dụ, 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:
M1 A M2
B
M3
Quy tắc kết hợp các máy Turing đơn giản:
Giả sử M1 = (K1, Σ, δ1, s1, H1), M2 = (K2, Σ, δ2, s2, H2) và M3 = (K3, Σ,
δ3, s3, H3). Giả sử T3 i=1 Ki = ∅. Khi đó ta có M = (K, Σ, δ, s, H)
(d) Cuối cùng, nếu q ∈ H1 - trường hợp duy nhất - thì δ(q, σ) = s2 nếu σ = a,
δ(q, σ) = s3 nếu σ = b, và ngược lại δ(q, σ) ∈ H.
o Ban đầu đầu đọc dịch phải tới khi gặp cách thì dừng
o Dịch phải nếu gặp a khác cách thì ghi đè cách rồi dịch phải đến
khi gặp cách thì ghi đè a (2 lần), dịch trái đến khi gặp cách thì
ghi đè a( 2 lần) xong quay lại ban đầu.
1.3. Xác định ngôn ngữ đoán nhận
Định nghĩa : 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ỏ. Ta
nói rằng máy Turing M chấp nhận đầu vào (accepts input) ω nếu q0ω
` ∗ M uyv, nghĩa là khi tính toán trên từ vào ω, máy M chuyển từ cấu
hình ban đầu đến cấu hình chấp nhận.
Tập các từ vào mà máy M chấp nhận tạ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ệu bởi LM.
Định nghĩa: Ngôn ngữ L được gọi là đoán nhận được theo Turing
(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áy Turing 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ữ Σ là: L = {ω |
ω ∈ Σ ∗ , ω = ω R}, trong đó ω R là từ ngược của từ ω
Định nghĩa: 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 M(máy turing dừng) nà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).
Vd1: cho ngôn ngữ L = {0𝑖 1𝑖 | 𝑖 = 1,2, . . . . } chứng minh L là ngôn
ngữ khẳng định được
VD2: cho ngôn ngữ L = {𝑎𝑛 𝑏 𝑛 𝑐 𝑛 ∶ 𝑛 >= 0} chứng minh L là một
ngôn ngữ khẳng định được
Ngôn ngữ L = {0 n 1 n 2 n | n≥1} đại diện cho một loại ngôn ngữ mà chúng
ta chỉ sử dụng 3 ký tự, tức là, 0, 1 và 2. Trong ngôn ngữ đầu tiên có một
số số 0, theo sau là số 1 bằng nhau và sau đó là số 2 bằng nhau. Bất kỳ
chuỗi nào thuộc danh mục này sẽ được ngôn ngữ này chấp nhận. Phần
đầu và phần cuối của chuỗi được đánh dấu bằng dấu $.
Ví dụ -
Đầu vào: 0 0 1 1 2 2
Đầu ra: Được chấp nhận
Đầu vào: 0 0 0 1 1 1 2 2 2 2
Đầu ra: Không được chấp nhận
Giả định: Chúng ta sẽ thay 0 bằng X, 1 bằng Y và 2 bằng Z
Phương pháp tiếp cận được sử dụng -
Đầu tiên thay số 0 từ phía trước bằng X, sau đó tiếp tục di chuyển sang
phải cho đến khi bạn tìm thấy số 1 và thay thế số 1 này bằng Y. Một lần
nữa, tiếp tục di chuyển sang phải cho đến khi bạn tìm thấy số 2, thay thế
nó bằng Z và di chuyển sang trái. Bây giờ tiếp tục di chuyển sang trái cho
đến khi bạn tìm thấy X. Khi bạn tìm thấy nó, hãy di chuyển sang phải, sau
đó làm theo quy trình tương tự như trên.
Một điều kiện xuất hiện khi bạn tìm thấy chữ X ngay sau đó là chữ Y. Tại
thời điểm này, chúng tôi tiếp tục di chuyển sang phải và tiếp tục kiểm tra
xem tất cả số 1 và số 2 đã được chuyển đổi thành Y và Z. Nếu không thì
chuỗi không được chấp nhận. Nếu chúng ta đạt đến $ thì chuỗi được
chấp nhận.
• Bước 1:
Thay 0 bằng X và di chuyển sang phải, Chuyển đến trạng thái
Q1.
• Bước 2:
Thay 0 bằng 0 và di chuyển sang phải, Giữ nguyên trạng thái
Thay Y bằng Y và di chuyển sang phải, Giữ nguyên trạng thái
Thay 1 bằng Y và di chuyển sang phải, chuyển sang trạng thái
Q2.
• Bước 3:
Thay thế 1 bằng 1 và chuyển sang phải, Giữ nguyên trạng thái
Thay Z bằng Z và di chuyển sang phải, Giữ nguyên trạng thái
Thay 2 bằng Z và di chuyển sang phải, chuyển đến trạng thái
Q3.
• Bước 4:
Thay thế 1 bằng 1 và di chuyển sang trái, Giữ nguyên trạng thái
Thay 0 bằng 0 và di chuyển sang trái, Giữ nguyên trạng thái
Thay Z bằng Z và di chuyển sang trái, Giữ nguyên trạng thái
Thay Y bằng Y và di chuyển sang trái, Giữ nguyên cùng trạng
thái
Thay X bởi X và chuyển sang phải, chuyển đến trạng thái Q0.
• Bước-5:
Nếu biểu tượng là Y, hãy thay thế nó bằng Y và di chuyển sang
phải và Chuyển đến trạng thái Q4
Khác chuyển sang bước 1
• Bước-6:
Thay Z bằng Z và di chuyển sang phải, Giữ nguyên trạng thái
Thay thế Y bằng Y và di chuyển sang phải, Giữ nguyên trạng
thái
Nếu biểu tượng là $ hãy thay nó bằng $ và di chuyển sang trái,
DÂY ĐƯỢC CHẤP NHẬN, ĐI ĐẾN CÂU cuối cùng Q5
Bài tập 1.2 thiết kế máy turing kiểm tra tính cân xứng cho
các từ trên bảng chữ cái cho trước
Bài 1.2
("q1","a"):("q2", "x", "R"),
("q1","b"):("q3", "x", "R"),
("q1","c"):("q7", "x", "R"),
("q1","x"):("y", "x", "R"),
Bài tập ôn tập 3: Thiết kế một máy Turing kiểm tra xem hai số nhị
phân cho trước có bằng nhau không. Hãy xác định độ phức tạp thời
gian của máy.
Đầu vào: Dãy x1, x2, . . . , xn, xi ∈ X được sắp theo thứ tự giảm dần
của p(xi)
Bước 1: Đặt ωi = ∅, i = 1, n
Bước 2 (lặp): Hai phần tử có xác suất nhỏ nhất lập thành một phần tử
mới có xác suất là tổng xác suất của hai phần tử này. Phần tử có xác
suất nhỏ hơn được gán giá trị 0, phần tử có xác suất lớn hơn được gán
giá trị 1 và cập nhật các ωi (ωi = 0 || ωi hoặc ωi = 1 || ωi) liên quan.
Tiếp tục thực hiện tới khi dãy chỉ còn một phần tử.
an toàn thông tin là thuật ngữ dùng để chỉ việc bảo vệ thông tin
số và các hệ thống thông tin chống lại các nguy cơ tự nhiên, các
hành dộng truy cập, sử dụng, phát tán, phá hoại, sửa đổi và phá
hủy bất hợp pháp nhằm đảm bảo cho các hệ thống thông tin thực
hiện đúng chức năng, phục vụ đúng đối tượng một cách sẵn sàng,
chính xác và tin cậy.
• Chuyên viên an toàn thông tin, quản trị an ninh mạng, bảo mật
cơ sở dữ liệu trong các cơ quan, doanh nghiệp, trường học
• Chuyên viên phân tích, tư vấn, thiết kế hệ thống an toàn thông
tin trong các công ty phần mềm
• Chuyên viên kiểm tra, đánh giá an toàn thông tin trong các
công ty phần mềm
• Chuyên viên lập trình và phát triển ứng dụng đảm bảo an toàn
thông tin trong các công ty lập trình, doanh nghiệp.