Tải bản đầy đủ (.pdf) (15 trang)

bài giảng môn lý thuyết tính toán - ch5 tính ngẫu nhiên trong thuật toán

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (460.04 KB, 15 trang )



1
Chương 5. TÍNH NGẪU NHIÊN TRONG TÍNH TOÁN

NỘI DUNG
5.1 Máy Turing ngẫu nhiên và các vấn đề liên quan
5.2 Thuật toán thử Monte-Carlo
5.3 Tính ngẫu nhiên và độ phức tạp
5.4 Tính giả ngẫu nhiên
5.5 Mật mã

TÀI LIỆU THAM KHẢO

1. Bài giảng về cơ sở tính toán tại địa chỉ
2. Dexter C. Kozen. Theory of Computation. Springer, 2006
3. Michael Sipser , Introduction to the Theory of Computation, 2nd edition,
Couse technology 2005
4. John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman, Introduction to Automata
Theory, Languages, and Computation (2nd Edition), Addison Wesley, 2000.



2
5.1 Máy Turing ngẫu nhiên và các vấn đề liên quan
5.1.1 QuickSort: Một ví dụ về thuật toán ngẫu nhiên
Đặt bài toán: Cho một danh sách (a) gồm n phần tử a
1
, …, a
n
. Cần sắp xếp (a)


theo thứ tự không giảm.
Nội dung QuickSort:
- Chọn ngẫu nhiên một phần tử x = a
i
, gọi là trục quay (Privot).
- Chia (a) thành 3 danh sách con: (1) gồm các phần tử < x, (2) gồm các phần
tử = x, (3) gồm các phần tử > x.
- Sắp xếp không giảm từng dãy con.
Độ phức tạp tính toán theo thời gian là O(nlogn).

5.1.2 Mô hình máy Turing có dùng tính ngẫu nhiên
Máy Turing ngẫu nhiên RM (randomized Turing Machine) gồm:
- Một bộ phận điều khiển hữu hạn và đa băng.
- Băng 1 giữ Input.
- Băng 2 (Băng ngẫu nhiên-Random Tape) gồm số 0 hoặc 1 tại mỗi ô theo xác suất
1/2.
- Băng 3 (và một số băng khác) là băng chung
Độ phức tạp tính toán theo thời gian là O(nlogn).


3

Hình 1: Mô máy Turing ngẫu nhiên

Hoạt động của RM: thông qua cài đặt thuật toán QuickSort.
- Xét danh sách con độ dài m. Chọn khoảng O(logm) bit trên băng 2 tương ứng
danh sách con để chọn ngẫu nhiên phần tử làm trục quay.
- Đặt trục quay trên băng 3.
- Quét lại danh sách con trên băng 1, chép các phần tử < trục quay vào băng 4.
- Quét lại danh sách con trên băng 1, chép các phần tử > trục quay vào băng 5.

- Chép băng 4, rồi băng 5 vào vị trí của danh sách con trên băng 1 và đặt một dấu
ngăn cách giữa các dãy con này.
- Nếu có một dãy con mới có > 1 phần tử thì sắp đệ qui theo thuật toán vừa trình
bày.


4
5.1.3 Ngôn ngữ của máy Turing ngẫu nhiên
Xét RM chỉ có 1 băng input và băng ngẫu nhiên, không thay đổi các ký hiệu trên
băng mà chỉ di chuyển đầu đọc-ghi sang phải (R) hoặc đứng yên (S). Mỗi ký hiệu trên
băng (XY), trong đó X là ký hiệu trên băng input, Y là ký hiệu trên băng ngẫu nhiên.
Mỗi hướng di chuyển (DE), trong đó D trên băng input, E trên băng ngẫu nhiên.
Bảng hàm chuyển vị:


00
01
10
11
B0
B1
 q
0

q
1
00RS
q
3
01SR

q
2
10RS
q
3
11SR


q
1

q
1
00RS



q
4
B0SS

q
2



q
2
10RS


q
4
B0SS

q
3

q
3
00RR


q
3
11RR
q
4
B0SS
q
4
B1SS
*q
4









Hoạt động: Xét input w.
- Nếu bit ngẫu nhiên là 0, M kiểm tra xem w chỉ chứa 1 loại ký hiệu (0 hoặc 1)?
Nếu đúng thì w được thừa nhận.
- Nếu bit ngẫu nhiên là 1, M so w với các bit ngẫu nhiên tiếp theo và thừa nhận
nếu chúng giống nhau.
- Nếu đến được ô trắng trên băng input, M thừa nhận w.


5
Xác suất để w được thừa nhận:
- Nếu w đồng nhất, chẳng hạn w = 0
i
thì tổng xác suất thừa nhận w là
i
 2
2
1
2
1
= 2
-1
+ 2
-(i+1)

- Nếu w không đồng nhất và bit ngẫu nhiên thứ nhất là 0 thì w không được thừa
nhận, tức là tổng xác suất thừa nhận w bằng 0.
- Nếu w không đồng nhất và bit ngẫu nhiên thứ nhất là 1 thì w được thừa nhận và
có tổng xác suất thừa nhận w bằng 2
-(i+1)

.

5.1.4 Lớp RP
Định nghĩa: L là ngôn ngữ thuộc lớp RP (Random Polynomial) khi và chỉ khi L
được thừa nhận bởi một máy RM thỏa mãn
- w  L  xác suất RM thừa nhận w bằng 0.
- w  L  xác suất RM thừa nhận w  1/2.
- Tồn tại đa thức p(n) để độ phức tạp tính toán T(n)  p(n).
Máy RM là Monte-Carlo  nếu RM thừa nhận mọi w với xác suất 0 hoặc xác suất
 1/2.
Ví dụ ở trên không phải là Monte-carlo.



6
5.1.5 Lớp ZPP
Định nghĩa: L là ngôn ngữ thuộc lớp ZPP (Zero-error Probabilistic Polynomial) khi
và chỉ khi L được thừa nhận bởi một máy RM luôn dừng thỏa mãn
- w  L  xác suất RM thừa nhận w bằng 0.
- w  L  xác suất RM thừa nhận w > 0.
- Tồn tại đa thức p(n) để độ phức tạp tính toán T(n)  p(n).
Máy RM là Las-Vegas  nếu RM thừa nhận mọi w với xác suất nào đó.
Định lý: ZPP = ZP  co-RP, trong đó co-RP là lớp các ngôn ngữ thỏa mãn: L thuộc
vào co-RP  phần bù của L thuộc vào lớp RP.













7
5.2. Thuật toán thử Monte-Carlo
5.2.1. Số học thặng dư
Các ký hiệu:
- px  p là ước của x ; x  y (mod p)  p(x-y)
- y = (x mod p)  y  [0, p-1], p(x-y)
- Có thể cộng, trừ và nhân các thặng dư nhưng phải đưa kết quả vào [0, p-1] bằng
cách thêm vào số lượng thích hợp bội của p. Chẳng hạn, -x  p-x (mod p).
-  x có nghĩa là bằng x hoặc –x.
- Nếu r và p không có ước chung > 1 thì phép chia (x/r mod p) là cấp nhận, do x 
(r*x mod p ) là 1-1 trong [0, p-1]. Các phép toán +, -, *, / là các phép toán số học thông
thường.
- gcd(x, y) = ước chung lớn nhất của x và y và có thể tìm được bằng thuật toán
Euclid : gcd(x, 0) = x, gcd(x, y) = gcd(y, x mod y) nếu y > 0.
- gcd(x, y) = A*x – B*y, trong đó A = (g/x mod y) và B = (g/y mod y).
Cần tính (x
q
mod p) trong thời gian đa thức. Không thể nhân với xq thời gian do q >
2
q
bước. Để thay thế, tính x
i
= (x
i-1

2
mod p) = (
i
x
2
mod p), i < q. Sau đó biểu
diễn q dưới dạng nhị phân , tức là tổng của các lũy thừa của 2 và nhân mod p cần x’
i
s.




8
5.2.2. Phép thử Fermat

Định lý nhỏ Fermat : Với mỗi x  [1, p-1] và số nguyên tố p có x
p-1
 1 (mod p).
Chứng minh : Thật vậy, dãy (xi mod p) là một hoán vị của 1, 2, …, p-1. Do đó, 1 

i<p
(xi)/(p-1) !  x
p-1
(mod p).
- Định lý trên chỉ đúng với số p nguyên tố. Với hợp số p cần dùng cách thử khác.

5.2.3. Phép thử căn bậc hai

Bổ đề : Đối với mỗi số y và số nguyên tố p, phương trình (x

2
mod p) = y có ít nhất
một cặp nghiệm x.
Chứng minh : Giả sử x, x’ là nghiệm của phương trình : y  x  x’ (mod p). Do đó
x
2
– x’
2
= (x – x’)(x + x’)  0 (mod p)  (x – x’)  0 (mod p) hoặc x +x’  0 (mod p).
Do đó, y có ít nhất một cặp nghiệm là  căn bậc hai của một số nào đó.

5.2.4. Phép thử Rabin-Miller
Giả sử p-1 = q2
k
, với q lẻ. Xét x
0
= (x
q
mod p), x
i
= (x
i-1
2
mod p)=(
i
q
x
2
mod p), i
 k. Tính T(x, p) = như sau:

- Nếu x
0
= 1, hoặc một trong các x
i
= -1 thì T(x
m
, p) = 1 với m > i.


9
- Nếu x
k
 1 thì phép thử Fermat không sử dụng được và xét z = x
i
 1sao cho (z
2

mod p) = x
i+1
= 1. Tiếp theo áp dụng phép thử căn bậc hai các nhân tử của p.
Giả sử p là hợp số lẻ. Xét p = a
j
, j > 1, với a là số nguyên tố và x = 1 + p/a. Có (1 +
p/a)
p-1
= 1 + (p/a)(p-1) + …  1 – p/a  1 (mod p). Khi đó có thể sử dụng phép thử
Fermat.
Giả sử x = a*b, với gcd(a, b) = 1. Xét x’ = 1 + b*(1/b mod a)*(x-1). Khi đó x’  1 
x’
i

(mod b) khi x’
i
 x
i
(mod a).















10
5.3. Tính ngẫu nhiên và độ phức tạp
5.3.1. Độ phức tạp Kolmogorov
Ký hiệu K
A
(x/y) là độ dài ngắn nhất của chương trình cho phép p bởi thuật toán A
giải bài toán chuyển y thành x:
K
A
(x/y) = min{(p): A(p, y) = x }.

Xét U là thuật toán phổ dụng sao cho K
U
(x) < K
A
(x) + O(1) với mỗi A. Nếu y rỗng
thì coi K
U
(x/y) như là K
A
(x/y) hay K
A
(x).
Ví dụ : Xét A : x  x có K
A
(x) = x. Do đó K(x) < K
A
(x) + O(1) < x + O(1).
Giả sử L(x)  O(1) tính cận dưới của K(x). Sử dụng hàm f(n) tìm x với n < L(x) <
K(x). Do K(x) < K
f
(x) + O(1) và K
f
(f(n))  n nên n < K(f(n)) < n + O(1) =
log O(n) < n nên K không có cận dưới. Vì vậy K(x) là không tính được.

5.3.2. Số khuyết của tính ngẫu nhiên
Với mỗi xâu x được sinh ngẫu nhiên, d(x) = x – K(x/x) (d(x) > -O(1)).
Tính xác suất của biến cố: {d(x) > i: x = n}.
- Có 2
n

xâu x độ dài n. Nếu d(x) > i thì K(x/x) < n – i.
- Có < 2
n-i
chương trình với độ dài như vậy sinh ra < 2
n-i
xâu.
- Xác suất của mỗi xâu < 2
n-i
/2
n
= 2
-i
.
d(x) gọi là số khuyết của tính ngẫu nhiên.



11
5.3.3. Điều chỉnh các phân phối xác suất
Giả sử có một dãy ngẫu nhiên từng khúc với phân phối xác suất chưa biết. Cho biết
xác suất cho toàn bộ các bit trước i là 1/2
k+i
.
Bao X bởi ma trận nxm. Cho m, i, k nhỏ; n = o(2
k
/i).
Xét mxi ma trận Z độc lập với X và ngẫu nhiên không chuẩn: Z
a+1,b+1
= Z
a,b

.
Tích XZ là ma trận cấp nxi có phân phối không chuẩn xấp xỉ






k
ni
O
2
.















12
5.4. Tính giả ngẫu nhiên

5.4.1 Xâu giả ngẫu nhiên
Xâu giả ngẫu nhiên :
- Lấy một hoán vị một chiều F
n
(x) với bit lõi-cứng B
p
(x) có thể tính dễ dàng từ x,
p.
- Lấy ngẫu nhiên các hạt giống x
0
, p, n  {0, 1}
k
và lặp : (S
i
 B
p
(x
i
) ; x
i+1

F
n
(x
i
) ; i  i + 1)
Theo chuẩn Kolmogorov, xâu giả ngẫu nhiên không phải là xâu ngẫu nhiên.
Định lý : Cho G(S) = S  {0, 1}
k
chạy với thời gian t

G
. Giả sử thuật toán ngẫu nhiên
A chạy với thời gian kỳ vọng t
A
thừa nhận G(s) và xâu ngãu nhiên với sự sai khác
xác suất d. Khi đó, với mỗi i ngẫu nhiên có thể sử dụng A để ước đoán S
i
từ S
i+1
,
S
i+2
, … với thời gian t
A
+ t
G và
độ chính xác d/O(n).

5.4.2 Lõi cứng (Hard core)
Cho B
p
(x) = (x.p) = (
i
x
i
p
i
mod 2). Có thể chuyển một phương pháp g ước đoán
B
p

(x) từ p, n, F(x) với độ chính xác  thành thuật toán tìm x, tức là tìm hàm ngược
F(chậm 
2
thời gian hơn g).





13
5.5. Mật mã
Hàm một hướng Rabin : Chọn một cách ngãu nhiên p và q là hai số nguyên tố có p =
qvới hai bit cuối cùng là 11. Do đó số (p -1)(q-1)/4 là số lẻ. Số n = p*q gọi là số Blum.
Cho Q(n) là tập các thặng dư bậc hai, tức là Q(n) gồm các số dạng (x
2
mod n).
Bổ đề 1: Nếu n = p*q là số Blum thì hàm F: x  (x
2
mod n) là một hoán vị của Q(n).
Bổ đề 2: Bài toán tìm hàm ngược của F với x ngẫu nhiên tương đương với bài toán tìm nhân
tử của n.
Khóa mã công khai: Một cách mã hóa một thông báo m là cộng mod 2 vào m một bit của
xâu ngẫu nhiên S có độ dài k. Kết quả mã hóa m S có phân phối xác suất không chuẩn. Có
hai khóa mã:
- Một khóa mã hóa có thể công khai.
- Một khóa giải mã giữ bí mật.
- Một mã hóa thực hiện bằng việc thay thế S bởi giả ngẫu nhiên S
i
= (s
i

.x); s
i+1
= (s
i
2
mod
n), trong đó n = p*q được phép công khai, còn p, q là giữ bí mật.
- Mã hóa bằng cách chọn x, s
0
một cách ngẫu nhiên và gửi x, s
k
và m S.
- Giải mã bằng cách biết p, q và tính u, t và v = (u
k-1
mod t). Tiếp theo tính s
1
= (s
v
k
mod n)
và S, m.
- Một cách khác là sử dụng tính khó của phân tích nhân tử đối với các tín hiệu số. Xâu x có
thể tách ra thành các phần cho phép y = (x
2
mod n). Bất cứ ai cũng có thể xác thực x,
nhưng không thể giả mạo x do chỉ có người sử dụng hợp pháp biết được các nhân tử của n
và có thể tính căn bậc hai.


14

Một ví dụ về khóa mã công khai:
Bài toán các chữ số RSA
Vào năm 1978, ba nhà toán học Anh (Rivest, Shamir và Adleman) đã công bố sẽ trao
giải thưởng tượng trưng 100$ cho người đầu tiên giải mã được dãy các chữ số sau:
Y = 9686961375462206147714092225435588290575999112457 43198746951209308
16298225145708356931476622883989628013391990551829945157815154.
Các chữ số của Y nhận được bằng cách sau:
• Trước hết mã hóa các chữ cái tiếng Anh (từ a đến z là 01 đến 26 và dấu cách là
00) viết liền nhau được số X có 78 chữ số.
• Chọn một số nguyên tố P có 64 chữ số và số nguyên tố Q có 65 chữ số.
• Cho biết P*Q = 143816257578888676693257799761466120102182
96721242362562561842935706935245733897805971123563958705058989907514
7599290026879543541.
• Tính Y ≡ X
9007
(Mod P*Q)
Vào năm 1994, khi giải mã được thì
P = 3490529510847650949147849619903898133417764638493387843990820577


15
Q = 32769132993266709549961988190834461413177642967992942539798288533
Để giải mã được phải chi phí:
• 220 ngày chuẩn bị phương án tính toán
• 600 nguời tình nguyện cùng 4 người chủ trì
• Sử dụng tài nguyên của 1600 máy tính

Kết quả giải mã: The magic words are squeamish ossifrage


×