You are on page 1of 35

Bảo mật và độ phức tạp thuật

toán
Ngôn ngữ và hàm tính được
5/ Máy Turing vạn năng
Mã hóa máy Turing
 Xét máy Turing có
• tập trạng thái
• bảng chữ 9 phần tử gồm ký tự trắng #
• hàm chuyển : quy tắc có dạng
 Mã hóa máy Turing bởi một xâu
• Bảng chữ 9 phần tử, ví dụ
• số nguyên i được biểu diễn nhị phân, ký hiệu (trong mục này có thể ngầm hiểu i
là dạng nhị phân)
Mã hóa máy Turing
 Mã hóa máy Turing bởi một xâu
• Bảng chữ 9 phần tử, ví dụ
• số nguyên i được biểu diễn nhị phân, ký hiệu (trong mục này có thể ngầm hiểu i
là dạng nhị phân)
Từ đó có thể biểu diễn: (chú ý: các số được biểu diễn nhị phân)
• tập trạng thái: biểu diễn bởi xâu - sử dụng 4 chữ của Z
• bảng chữ: biểu diễn bởi xâu - sử dụng 4 chữ của Z
• hàm chuyển:
• mỗi quy tắc được biểu diễn bởi xâu c(r)
- sử dụng 7 chữ của Z
• hàm chuyển:
Mã hóa máy Turing
 Mã hóa máy Turing bởi một xâu
• Xét bảng chữ 9 phần tử, ví dụ
• số nguyên i được biểu diễn nhị phân, ký hiệu (trong mục này có thể ngầm hiểu i
là dạng nhị phân)
Từ đó có thể biểu diễn: (chú ý: các số được biểu diễn nhị phân)
• tập trạng thái: biểu diễn bởi xâu ∗ ∗
- sử dụng 4 chữ của Z
• bảng chữ: biểu diễn bởi xâu ∗ ∗ - sử dụng 4 chữ của Z
• hàm chuyển:
• mỗi quy tắc được biểu diễn bởi xâu c(r)
- sử dụng 7 chữ của Z
Mã hóa máy Turing
• hàm chuyển:
• mỗi quy tắc với được biểu diễn bởi xâu c(r)
- sử dụng 7 chữ của Z
mã của mỗi quy tắc là câu của R:
∗ ∗ ∗ ∗

• hàm chuyển: mã hóa bởi xâu là các quy tắc chuyển c(r) phân cách bởi #

• Từ đó: một máy Turing có thể được mã hóa bởi xâu trên bảng chữ Z

• Và: số lượng máy Turing là đếm được -


Liệt kê các máy Turing
 Liệt kê các máy Turing
• - máy turing thứ i và - hàm tính bởi máy

• Xây dựng máy : input là số , cho kết quả là xâu mã hóa máy turing thứ i
Máy có 2 băng
• Băng 1: số 1 0 1 Số i

• Băng 2: xâu trên Z*

Xâu Z*, mã cho Ti


Máy vạn năng
 Mệnh đề:
có thể xây dựng máy Turing vạn năng thực hiện hàm có 2 đối số i và f sao cho
 số nguyên i ,  dữ liệu vào f của máy thứ i - (tính hàm )

Chứng minh
• Có máy : nhận số , cho kết quả là xâu mã hóa máy turing thứ i ( )
• Xây dựng máy thực hiện hàm :
• nhận vào: xâu - xâu mã của máy , f - dữ liệu vào của máy
• kết quả được , tức là
• Máy được xây dựng nhờ 2 máy Turing 3 băng là và .
Máy vạn năng
• Máy được xây dựng nhờ 2 máy Turing 3 băng là và .
Máy - khởi động
• Đọc dữ liệu vào ghi trên băng 1; xâu được xóa ở băng 1 và sao chép sang
băng2; băng 3 được ghi trạng thái đầu
• Máy kết thúc ở cấu hình:
• băng 1: chứa xâu dữ liệu vào f , đầu đọc ở ô trái nhất của f
• băng 2: chứa xâu là xâu mã hóa máy , đầu đọc ở ô trái của
• băng 3: chứa xâu (là trạng thái khởi đầu của , đầu đọc ở ô trái của
Câu f

Câu mã wi cho Ti

q 1 Trạng thái q1
Máy vạn năng
Máy . - mô phỏng hoạt động của máy
• các băng nhớ:
• Băng 1: chứa giá trị băng nhớ của cấu hình hiện tại của máy
• Băng 2: chứa xâu mã hóa của máy
• Băng 3: chứa trạng thái hiện tại của máy
• Nếu cấu hình hiện tại của máy là thì u v
• Băng 1: chứa xâu với đầu đọc ở ô đầu của từ
• Băng 2: chứa xâu mã hóa
• Băng 3: chứa trạng thái
Câu mã wi cho Ti

q 1 0 qn
Máy vạn năng a

Máy mô phỏng hoạt động


 Lặp lại hoạt động mô phỏng : ... # q 1 0 , a ->
• đầu đọc trên băng 2 đến khi thấy dãy #q - bắt đầu hàm chuyển
• so sánh
• số nguyên tiếp theo với số nguyên n trên băng 3 (chứa ) q 1 0
• dịch tiếp - so sánh giá trị ô nhớ tại vị trí đầu đọc của băng 1 với giá trị sau của băng 2
• nếu đồng thời bằng nhau => tìm thấy phép chuyển áp dụng được cho cấu hình hiện tại => đọc vế
phải phép chuyển và thực hiện theo:
• chuyển trạng thái: ghi trạng thái mới vào băng 3
• ghi ký tự vế phải phép chuyển xuống ô nhớ băng 1
• dịch chuyển đầu đọc trên băng 1 theo vế phải phép chuyển đọc được ở băng 2
• nếu không đồng thời bằng nhau => phép chuyển không áp dụng được cho cấu hình hiện tại => di
chuyển tiếp đến pháp chuyển tiếp theo để so sánh.
• Nếu qua hết các phép chuyển mà không tìm thấy => máy dừng
Máy vạn năng
• Máy . - mô phỏng hoạt động của máy có xâu mã nằm trên băng 2
• máy dừng với dữ liệu vào f <=> máy dừng với f trên băng 1
• xâu kết quả của cũng là xâu trên băng 1 của máy
• Máy cần tìm là

• Kết hợp với máy , máy vạn năng là máy


6/ Hàm không là T-tính được
Hàm không là T-tính được
 Mệnh đề:
Không tồn tại máy Turing tính cho hàm h : với mọi cặp số nguyên ( i , j )
Hàm không là T-tính được
 Phản chứng
• Giả sử tồn tại máy T như vậy.
• Từ máy T, có thể xây dựng máy T' thực hiện hàm g: với mọi số nguyên i

• máy : input là i và kết quả là cặp (i , i )


• máy : kết quả 1 nếu input là 0, không dừng nếu input là i khác 0
Hàm không là T-tính được
• Máy T' thực hiện hàm g: với mọi số nguyên i

• Máy T' có số thứ tự k, tính hàm g .


• Xét tính g(k), xảy ra 2 trường hợp
(1) hàm g(k) không xác định
• theo : không xác định => không dừng trên input k => th(i,i)=1
• theo : không dừng trên k => máy không dừng => máy T tính th(k,k)=1>0
=> mâu thuẫn
(2) hàm g(k) xác định, tương tự:
• theo : xác định => dừng trên input k => th(i,i)=0
• theo : dừng trên k => máy dừng => máy T tính th(k,k)=0
=> mâu thuẫn
7/ N và NP
Đánh giá độ phức tạp thuật toán
 So sánh hai thuật toán nào tốt  Tính xác định
hơn?  Tính hữu hạn/dừng
 Nhanh hơn? Ít tốn bộ nhớ hơn?  Tính đúng đắn
 Tính tổng quát
Đánh giá độ phức tạp thuật toán
 Ngay từ những năm 1960, Máy tính đã được dùng để giải nhiều bài toán khoa
học kỹ thuật, kinh tế xã hội
 Vấn đề đặt ra
• thế nào là bài toán dễ >< bài toán khó
• thế nào là thuật toán tốt, hiệu quả (machine computable) >< không hiệu quả để
thực thi trên máy tính
 Đánh giá: trực quan, thực nghiệm
 1965 giả thiết Cobham–Edmonds: thuật toán là hiệu quả chỉ khi thời gian
thực hiện trên máy tính bị chặn bởi đa thức theo kích cỡ dữ liệu vào
 Nhiều bài toán: việc tìm ra thuật toán hiệu quả là khó khăn
Đánh giá thuật toán
 2 hàm f và g, f : R →R, g : R →R, xét sự tăng của hai hàm số khi x → + ∞

• Định nghĩa (7.1): ta nói rằng f(x) = o(g(x)) khi x → + ∞, neu


• Cũng nói f(x) tăng chậm hơn g(x)


 Ví dụ
Đánh giá thuật toán
• Định nghĩa (7.2): ta nói rằng f(x) = O(g(x)) (O lớn) khi x → + ∞
nếu tồn tại hằng C>0 và số N >0 sao cho

• Ví dụ:
với , có
Đánh giá thuật toán
• Định nghĩa (7.3): ta nói rằng f(x) tương đương g(x) khi x → + ∞, ký hiệ u f(x)  g(x)
nếu 1

• Ví dụ:
với
Đánh giá thuật toán

• Mệnh đề (7.1):
Cho , khi đó

• Mệnh đề (7.2):
Nếu thì

• Mệnh đề (7.3):
Nếu thì
Đánh giá thuật toán
 Một số lớp độ phức tạp







 Luận đề Church (Turing-Church thesis)
• Mọi hàm tính được một cách máy móc/hiệu quả là T-tính được

• Để chứng minh - cần so sánh các thủ tục hiệu quả với máy Turing
• Cần hình thưc hóa thủ tục hiệu quả

• Chấp nhận luận đề => chấp nhận có bài toán không có thuật toán hiệu quả
Bài toán quyết định
Bài toán quyết định
• Lớp bài toán với 2 kết quả được gọi là quyết định được (giải được, decidable) nếu
tồn tại thuật toán xác định và luôn dừng với mọi bộ dữ liệu vào và cho kết quả
yes/no
• Ngược lại: bài toán không quyết định được/không giải được

Bài toán dừng của máy Turing


• Dữ liệu là cặp (w,f): w - xâu mã cho máy Turing, f - xâu input
• Hỏi: máy Turing với xâu mã w có dừng trên dữ liệu vào f không ?

• Bài toán dừng của máy Turing là không quyết định được
Lớp P và NP (Nondeterministic Polynomial)
 Độ phức tạp của ngôn ngữ - máy Turing đoán nhận
 Độ phức tạp của bài toán - độ phức tạp của ngôn ngữ đặc trưng cho bài toán

 Định nghĩa:
Xét máy Turing đơn định k băng, dừng trên mọi dữ liệu vào
Độ phức tạp thời gian T(n) của máy Turing đơn định là số phép chuyển lớn nhất để
xử lý input bất kỳ độ dài n
(quy ước mỗi bước tính toán - kéo dài trong 1 đơn vị thời gian)
 Định nghĩa
Xét máy Turing off-line đơn định k băng, dừng trên mọi dữ liệu vào
Độ phức tạp không gian S(n) của máy Turing đơn định là số ô nhớ lớn nhất được
truy cập (bởi các đầu đọc/ghi trên các băng làm việc) để xử lý input bất kỳ độ dài n
 Với máy Turing không đơn định
• Độ phức tạp tính toán không đơn định về thời gian T(n) là SL tính toán lớn nhất
khi xử lý các xâu vào độ dài n (SL tính toán xử lý 1 xâu f độ dài n: số lượng phép
toán tối thiểu đoán nhận xâu f)
• Độ phức tạp tính toán không đơn định về không gian S(n) là SL ô nhớ lớn nhất
được truy cập khi xử lý các xâu vào độ dài n (với 1 xâu f độ dài n: số lượng ô nhớ
tối thiểu cần để đoán nhận f)
 Các lớp của độ phức tạp
• DSPACE (f (n)) : Họ các ngôn ngữ có độ phức tạp về bộ nhớ S(n) = f(n)
• NSPACE (f (n)) : Họ các ngôn ngữ có độ phức tạp không đơn định về bộ nhớ
S(n)= f (n)

• DTIME (f (n)) : Họ các ngôn ngữ có độ phức tạp về thời gian T(n) = f(n)
• NTIME (f (n)) : Họ các ngôn ngữ có độ phức tạp không đơn định về thời gian
T (n) = f (n)

• DSPACE (f (n)) ⊆ NSPACE (f (n))


• DTIME (f (n)) ⊆ NTIME (f (n))
 Các lớp P, NP
• P: lớp ngôn ngữ đoán nhận được bởi máy T đơn
định có độ phức tạp thời gian đa thức
• NP: lớp ngôn ngữ đoán nhận được bởi máy T
không đơn định có độ phức tạp thời gian đa thức

Tương tự có các lớp


• P-bộ nhớ
• NP-bộ nhớ

Bài toán
• Xử lý được/giải được: nếu thuộc lớp P
• không xử lý được/không giải được nếu thuộc NP
Rút gọn đa thức - quy dẫn đa thức (polynomial reduction)
 Định nghĩa: Ta nói bài toán A được rút gọn đa thức về bài toán B nếu
+ Tồn tại hàm f được xác định từ tập hợp các biểu diễn dữ liệu của bài toán A vào
tập hợp các biểu diễn dữ liệu của bài toán B, thỏa:
+ Tồn tại máy Turing dừng cho mọi dữ liệu và thực hiện tính hàm f với thời gian đa
thức.
Rút gọn đa thức - quy dẫn đa thức (polynomial reduction)
• Mệnh đề: Nếu A được rút gọn đa thức về B thì
nếu B là bài toán thuộc lớp P thì A cũng là bài toán thuộc lớp P
nếu A là bài toán thuộc lớp NP thì B cũng là bài toàn thuộc lớp NP
Bài toán NP-complete
• P  NP => xét quan hệ P và NP: duyệt lớp NP
• NP: chọn (lớp) các bài toán "khó nhất" C và kiểm tra C  P ?
• Bài toán "khó nhất" - gọi là bài toán NP-C (Stephen Cook)
Định nghĩa
• C  NP-C nếu: (i) C  NP và (ii) mọi bài toán B  NP đều rút gọn đa thức về C
• Ngôn ngữ L  NP-C nếu: (i) L  NP và (ii) với mọi ngôn ngữ L'  NP, L' rút gọn đa
thức về L

Mối liên hệ
• Nếu B  NP-C, C  NP và B rút gọn về C thì C  NP-C
• Nếu L  NP-C khi đó, P=NP khi và chỉ khi L  P
 Một số bài toán thuộc NP-C
 Lớp NP-Hard (NP khó)
• Bài toán H là NP-Hard nếu có bài toán C thuộc NP-C rút gọn đa thức về H

You might also like