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

De cuong on tap mo hinh thuat toan

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 (733.26 KB, 15 trang )

Mục lục
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Verifying Polynomial Identities ..........................................................................2
Axioms of Probability..........................................................................................2
Verifying Matrix Multiplication ..........................................................................3
A Randomized Min-Cut Algorithm (Karger Algprithm) ....................................3
Random Variables and Expectation ....................................................................5
The Bernoulli and Binomial Random Variables .................................................6
Conditional Expectation ......................................................................................6
Extra: Recursive Procedure Calling ....................................................................7
The Geometric Expectation .................................................................................8
Extra: Coupon Collector's Problem ..................................................................9
Application: The Expected Run-Time of Quicksort ........................................9
The Birthday Paradox .....................................................................................10
Balls into Bins ................................................................................................11
Problem Set Membership ...............................................................................12



1 Verifying Polynomial Identities
Giả sử ta có một chương trình nhân các đa thức.
Ví dụ:
(x + 1)(x − 2)(x + 3(x − 4)(x + 5)(x − 6) ≡ x6 − 7x3 + 25
Chương trình của ta sẽ output kết quả la x6 − 7x3 + 25
Ta muốn kiểm tra tính đúng đắn của kết quả này. Ta có thế nhân lần lượt các số hạng
với nhau. Thế nhưng việc làm này rất tốn kém, mà thực tế ta lại thực hiện lại giải
thuật nhân đa thức cũ như vậy là đi theo con đường cũ rồi. Nếu đã sai vẫn ra kết quả
sai mà thôi.
Bây giờ ta sẽ sử dụng giải thuật random để giải quyết câu hỏi : F(x) ? ≡ G(x)
ALGORITHM 1.1:
Chọn một số x = a bất kỳ. Kiểm tra nếu F(a) ≠ G(a)ta kết luận ngay F(x) ≠ G(x).
PROBABILISTIC ANALYSIS:
Khi F(a) = G(a) ta chưa thế kêt luận ngay F(x) ≡ G(x) hơn bởi a có thể là nghiệm
của phương trình F(x) − G(x) = 0.
Giả sử F(x) là đa thức bậc d. Khi đó F(x) - G(x) không thế có quá d nghiệm. Tức
nếu như F(x) ≠ G(x) trong tất cả số nguyên ta chọn chỉ có d trường hợp mà F(a) =
G(a).
Nếu như ta chọn a trong khoảng {0,..100d} tức không gian mẫu có 100d khả năng.
--> Xác suất chọn trúng nghiệm của F(x) - G(x) là 1/100. Đây cũng là xác suất để
ALGORITHM 1.1 sai.
Thực hiện thuật toán n lần độc lập. Áp dụng công thức cho các sự kiên độc lập ta có
1
xác suất thất bại của thuật toán 1.1 là ( )n
100

2 Axioms of Probability
Không gian mẫu (Sample Space) Ω là tập hợp tất cả các khả năng có thể xảy ra của
một sự kiện.

Hàm xác suất là một ánh xạ từ tập các sự kiện vào tập số thực R.
Ta gọi hàm số này là: Pr(E) = Xác suất của sự kiện E.
Pr(E∩F)
Conditional Probability: Pr(E | F) =
Pr(F)

Law of Total Probability: E1, E2 là các sự kiện xung khắc (E1 ∩ E2 =⊘) mà E1
và E2 lấp đầy không gian mẫu. Khi đó với một sự kiện bất kỳ B ta có:
Pr(B) = Pr(B ∩ E1) + Pr(B ∩ E2)
Pr(B∩E1)
=> Bayes' Law: Pr(E1 | B) = Pr(B ∩ E1) / Pr(B) =
Pr(B∩E1)+ Pr(B∩E2)


3 Verifying Matrix Multiplication
Cho 3 ma trận n*n là A, B và C. Ta cần kiểm tra xem A*B ?= C .
Trong đó A,B là các ma trận đơn vị, chỉ bao gồm các số 0 và 1.
GIải thuật cổ điển: Tính A*B và so sánh với C. Time: ⊖ (n3 ).
ALGORITHM(1.3) : chọn một vector đơn vị n chiều ngẫu nhiên r = (r1,r2, ....,rn), ri
= 0 or 1, 1<=i <= n.
PROBABILISTIC ANALYSIS:
Ta tính A*B*r = A * (B *r) rồi so sánh với C*r.
Case 1: A ∗ B ∗ r ≠ C ∗ r suy ra A ∗ B ≠ C
Case 2: A ∗ B ∗ r = C ∗ r. Lúc nãy vẫn có thể A ∗ B ≠ C.
Ta tính xác suất để : A ∗ B ≠ C và A ∗ B ∗ r = C ∗ r. Tức xác suất giải thuật thất
bại.
Đặt D = AB - C. Lúc này D ≠ 0 và D ∗ r = 0 .
Do D ≠ 0 nên tồn tại một phần tử dij trong ma trận D mà dij ≠ 0
Thêm vào đó D ∗ r = 0 nên


∑nj=1

dij ∗ rj = 0 ⇔ ri = −

∑nj=1,j i

dij ∗rj
dij

(3.1)

Trong đó các rj đều được chọn ngẫu nhiên. Giả sử ta đã chọn ngẫu nhiên tất các các
rj(j = 1 đến n) chỉ còn lại ri. Lúc này −

∑nj=1,j i

dij ∗rj
dij

nhận một giá trị nào đó có thể là

0, 1 hay khác đi. Suy ra khả năng chọn ri thỏa mãn phương trình (3.1) là không quá
1/2 bởi ri chỉ có thể nhận giá trị 0 hoặc 1.
Vậy xác suất thất bại trong một lần chạy ALGORITHM(1.3) là 1/2.
1
Chạy n lần độc lập cho ta xác suất thất bại là ( )n
2

Độ tin cậy của E sau n lần kiểm tra
Pr(E/B) >= 1- 1/(2^i +1)


4

A Randomized Min-Cut Algorithm (Karger Algprithm)

Cho đồ thị G = (V,E). Ta định nghĩa cut-set là tập các cạnh của đồ thị mà nếu bỏ các


cạnh đó đi số thành phần liên thông của đồ thị sẽ tăng lên. Min-Cut của đồ thị G là
cut-set nhỏ nhất của đồ thị ấy
Bài toán đặt ra là tìm min-cut của đồ thị. Tính số cạnh trong min-cut đó.
Giải thuật cổ điển có độ phức tạp n^3.
ALGORITHM:
Ở mỗi iteration ta thực hiện một edge contraction (chú giải phần takenote).
Sau khi thực hiện n-2 iteration: ta còn lại 2 đỉnh.
Return Min-Cut = Số cạnh nối 2 đỉnh này
PROBABILISTIC ANALYSIS:
Gọi S và V - S là hai tập đỉnh bị chia rẽ bởi Min-Cut. Nếu ta chỉ contract các đỉnh
trong S hoặc V-S giải thuật sẽ cho kết quả chính xác. Bất cứ contract nào làm mất
cạnh trong Min-Cut, kêt quả không chắc sẽ chính xác.
Ta gọi Ei là sự kiện tại iteration thứ i ta không contract bất cứ cạnh nào trong MinCut. Đặt Fi là sự kiện không có bất cứ lần nào trong số i iteration đầu tiên contract
mất một cạnh trong Min-Cut.
Ta có: Fi = ∩ij = 1 Ej
Ta cần tính Pr(Fn−2 )
Ban đầu:
Gọi n,m là số đỉnh và số cạnh của đồ thị G.
Gọi MC là Min-Cut trong G và c là số cạnh trong MC.
Giả sử đỉnh A có bậc nhỏ nhất trong đồ thị deg(A) = k.
Suy ra c <= k. (4.1) (Có thể chứng minh bằng phản đề).
Theo định lý về cái bắt tay (hand-shaking)

n×k
Suy ra m ≥
(4.2)
2

Iteration thứ nhất:
Thực hiện edge contraction cho 2 đỉnh chọn ngẫu nhiên trong G.
Sự kiện E1 = cạnh được chọn không nằm trong Min-Cut.
Kết hợp với (4.1) và (4.2) ta được:
c
k
2
Pr(E1 ) = Pr(F1 ) = 1 − ≥ 1 −
= 1 −
n×k
m
n
2
Nhận xét: xác suất thất bại không phụ thuộc vào số cạnh của đồ thị mà chỉ phụ thuộc
vào số đỉnh.
Iteration thứ 2:


Sau lần chạy đầu tiên đồ thì còn n-1 cạnh.
2
Do vậy Pr(E2 |F1 ) = 1 −
n−1
Tương tự như vậy tại iteration thứ i:
Đồ thì còn n - i + 1 cạnh
2

Pr(Ei |Fi−1 ) = 1 −
n−i+1

Tổng kết lại ta có:
Pr(Fn−2 ) = Pr(En−2 ∩ Fn−3 ) = Pr(En−2 |Fn−3 ) × Pr(Fn−3 )
= Pr(En−2 |Fn−3 ) × Pr(En−3 ∩ Fn−4 )
= ...
= Pr(En−2 |Fn−3 ) × Pr(En−3 |Fn−4 ) × ....× Pr(E2 |F1 ) × Pr(F1 ) ≥ ∏ni=1
2

) = ∏ni=1

n−i+1

(

n−i−1
n−i+1

) =

(1 −

2

n∗(n−1)

Xác xuất tìm đúng Min cut sau N lần thí nghiệm thuật toán là:

Ta lấy kết quả nhỏ nhất trong ln lần chạyc chương trình sử dụng ALGORITHM 1.4

2
1
n(n−1)ln n
Pr(fail) = (
)
≤ e−2 ln n = 2
n∗(n−1)

n

5 Random Variables and Expectation
Random Variable: một biến ngẫu nhiên X là một ánh xạ từ tập không gian
mẫu Ω vào tập các số thực R.
Discrete Random Variable: một biến ngẫu nhiên rời rạc X là một biến ngẫu
nhiên mà tập giá trị của nó không phải là R nữa mà là một tập có thể đếm được.
The Expectation of a Random Variable: E[X] = ∑x
x ∗ Pr(X =
x); x ∈ Ω
Linearity of Expectation
X và Y là các biến ngẫu nhiên rời rạc.
E[X +Y] = E[X] + E[Y]


6 The Bernoulli and Binomial Random Variables
Bernoulli Random Variable [ or indicator random variable]
Xét kết quả của một thử nghiệm:
● Y = 1 nếu kết quả thành công
● Y = 0 nếu ngược lại.
với Pr(Y = 1) = p;
E[Y] = 1 . p + 0 . (1-p) = p

Binomial Random Variable
Ta gọi X là một Binomial random variable with parameters n and p nếu:
n
Pr (X = k) = × pk × (1 − p)n−k
i
Diễn giải rõ hơn X là số lần thành công của n trials, T1,T2, ... , Tn trong mà
Pr(T1 = 1 ) = Pr(T2 = 1 ) = . . . . . . = p
E[X] = np.
7 Conditional Expectation
Conditional Expectation
Xét một không gian mẫu con của không gian mẫu Ω, thỏa mãn Z = z;E[Y | Z =
z] = ∑y∈Ω y × Pr(Y = y | Z = z)
được gọi là expectation của biến ngẫu nhiên Y với điều kiện Z = z.

Decomposition Law
E[X ] = ∑y∈Ω Pr(Y = y) × E[X | Y = y]
Chứng minh công thức này tương tự như chứng minh linearity of expectation.
Định lý về kỳ vọng của kỳ vọng:


E[Y] = E[E[Y | Z]

8 Extra: Recursive Procedure Calling
Problem: Ta viết một chương trình sử dụng giải thuật đề quy. Trong giải thuật
có n lần gọi chính no.
PROGRAM recursive()
for(i = 1;i<=n;i++)
{
double x = rand(1); // 0 <= x <= 1
if (x

}
Hỏi với giá trị nào của n và p thì chương trình trên nhất định sẽ dừng?
Problem Analysis:
Chương trình trên sử dụng giải thuật đệ quy. Khi chạy trên máy tính quá trình
diễn ra như sau.
Ban đầu ta có 1 process S. Ở mỗi iteration Process S gọi một process khác với
xác suất là p. Việc gọi này là hoàn toàn độc lập giữa các iteration. Như thế ta
xây dựng được n stack dệ quy. Ta gọi các ngăn có cũng độ sâu trong các stack
đệ quy này là một thế hệ (generations). Gọi Yi là số process ở thế hệ thứ i; i =
0,1,2, ....
Tổng số process được sinh ra là
Y = ∑∞
Yi ;
i=0
Để trả lời câu hỏi của đề bài ta cần tính E[Y]
Proof:
Ban đầu Y0 = 1;
Bởi vì thế hệ thứ i phụ thuộc thế hệ thứ i-1 nên ta sẽ tính E[Y_i] theo E[Y_i-1]
Ở thế hệ thứ i-1 ta có Y_i-1 processes. Gọi Z_k ( k = 1, 2, ... ,Y_i-1) là số
process sinh với process thứ k. Ta có:
Y

Yi = ∑k i−1
Zk
=1
Nhận thấy Z_k hoàn toàn không phụ thuộc vào Y_i-1.
Yi−1

Yi−1


E[Yi |Yi−1 ] = E[ ∑

Zk |Yi−1 ] = E[ ∑

k=1

k=1

Zk ]

Hơn nữa các Z_k là binomial random variables nên with parameters n and p
nên: E[Z_k] = np
Y

Suy ra: E[Yi |Yi−1 ] = E[∑k i−1
=1

Y

Zk ] = ∑k i−1
=1

E[Zk ]


Yi−1

= ∑

np = Yi−1 × n × p


k=1

Suy ra:
E[Yi ] = E[E[Yi |Yi−1 ]] = E[Yi−1 np] = npE[Yi−1 ]
Ta đã xây dựng được công thức đệ quy để tính E[Y_i]






E[Y] = E[∑

Yi ] = ∑

E[Yi ] = ∑

i=0

i=0

i=0

(np)i

Case 1:
+ np >= 1 : E[Y] = inifinite. Chương trình sẽ chạy mãi
+ np < 1; E[Y] = 1/(1-np). Tức về mặt lý thuyết chương trình chắc chắn sẽ
dừng lại.

9 The Geometric Expectation
Geometric Distribution
X là một geometric random variable with parameter p nếu:
Pr(X = n) = (1 − p)n−1 × p
Từ đây ta tính được:
Pr(X ≥ n) = ∑∞
i=n

Pr(X = n) = ∑∞
i=n


= p × (1 − p)n−1 × ∑

(1 − p)n−1 × p

(1 − p)i = p × (1 − p)n−1 ×

i=0

1
1 − (1 − p)

= (1 − p)n−1

Công thức tính expectation cho biến nguyên dương::
Cho X là một biến ngẫu nhiên rời rạc chỉ nhận các giá trị nguyên dương:
E[X] = ∑∞
Pr(X ≥ 1)
i=1

Áp dụng công thức trên ta tính được expectation của geometric random variable:
1
1
E[X] = ∑∞
Pr(X ≥ 1) = ∑∞
(1 − p)n−1 =
=
i=1
i=1
1−(1−p)

p


10 Extra: Coupon Collector's Problem
Problem: Có n loại coupons trong hộp, số lượng mỗi loại rất rất lớn. Mỗi lần
ta lấy ra 1 coupon. Hỏi ta phải lấy bao nhiều lần để có thế thu thập được đủ n
loại coupons này.
Problem Analysis:
Bài toán yêu cầu tìm sô lần lấy để có thể thu được n loại. Nếu vậy sự khác
nhau giữa n-1 loại và n loại là gì? Lúc ta lấy được 1 loại coupon rồi. Khả năng
có thêm loại nữa là rất dễ, xác suất để lần lấy tiếp theo có thêm 1 loại coupon là
(n-1)/n. Còn nếu xét khi đã có n-1 loại rồi, để lấy được loại thứ n kia xác suất
chỉ là 1/n. Như vậy việc lấy thêm được một loại coupon mới không phụ thuộc
vào công việc ta đã làm trước đó mà chỉ phụ thuộc vào số coupon tính đến thời
điểm hiện tại. Tức số coupon cần lấy thêm để đi từ i-1 loại đến i loại chỉ phụ
thuộc vào giá trị của i.
Proof:
Gọi X_i là số coupon cần lấy thêm tính từ lúc ta có i-1 loại đến lúc ta có i loại.
Mỗi X_i (i=1,2,...,n) là một geometric random variable with parameter

i−1
n−i+1
1
n
pi = 1 −
=
. Suy ra: E[Xi ] =
=
n

n

pi

n−i+1

Suy ra:
E[X] = E[∑ni= 1 Xi ] = ∑ni= 1 E[Xi ] = ∑ni= 1
Đặt k = n - i + 1 ta dược: (H(n) = ln n)
n
1
=n× ∑
= n × H(n)
k

n
n−i+1

k=1


11 The Expected Run-Time of Quicksort
Quick sort là một giải thuật tương đối đơn giản và hiệu quả. Vấn đề chốt cùng
trong quik sort chính là chọn pivot sao cho hơp lý, để trong rơi vào worst case
n^2 của giải thuật. Nếu như ở đây ta chọn pivot một cách ngẫu nhiên liệu giải
thuật trên có trở nên tốt hơn không?
Để trả lời cậu hỏi trên ta sẽ phân tích thời gian tính của Quick Sort với pivot
chọn ngẫu nhiên.
Probabilistic Analysis:
Trong giải thuật Quick Sort, sau khi đã chọn xong pivot công việc của ta là so
sánh pivot với từng số trong dãy con. Ở đây nếu phân tích kỹ hơn thì câu lệnh
so sánh này chính là câu lệnh đặc trưng của vòng lặp trong Quick Sort. Do đó,
chỉ cần tính sô lần so sánh này ta sẽ thu được thời gian tính của thuật toán. Gọi


số lần so sánh này là X.
Giả sử y_1,y_2,...,y_n là dãy đã được xắp xếp.
Gọi X_ij là biến ngẫu nhiên Beunoulli thỏa mãn:
X_ij = 1 nếu trong quá trình sắp xếp ta có so sánh y_i và y_j
i,j = 1,2,3...,n ; i<>j;
X_ij = 0 nếu ngược lại.
Ta có:
∑nj=i+1 Xij
X = ∑n−1
i=1
Suy ta:
∑nj=i+1 Xij ] = ∑n−1
∑nj=i+1 E[Xij ] (5.1)
E[X] = E[∑n−1
i=1
i=1

Công việc tiếp theo của ta là đi tính E[X_ij}
Xét các số trong khoảng từ vị trí i đến vị trí j :
y_i,y_i+1,....y_j ; (i <= j)
Rõ rang đến một lúc nào đó pivot được chọn phải làm việc với cả y_i và y_j.
(Có thể chứng minh bằng phản chứng).
Lúc này pivot sẽ phải là một trong j-i+ số trên.
Trong đó có 2 trường hợp dẫn đến việc ta phải so sánh y_i và y_j.
Do đó: Pr(X_ij = 1) = 2/(j-i+1)
Kỳ vọng 2 số i,j được so sánh với nhau là:
E[X_ij] = 2/(j-i+1) ( vì X là biến ngẫu nhiên Bernoulli)
Thay đẳng thức trên vào (5.1) ta được:
2
∑nj=i+1
E[X] = ∑n−1
i=1
j−i+1

Kỳ vọng số phép toán so sánh:
E[X] = 2nln(n)

12 The Birthday Paradox
Problem:
Có 30 người trong phòng, Hỏi xác suất để tồn tại 2 người có ngày sinh trùng
nhau là bao nhiêu?

Problem Analysis:
Ngày sinh có 365 khả năng. Số người là 30, 29 hay chỉ có 1 ,2 có khác gì nhau
không? Khi có 1 người chắc chắn là không trùng với ai. Khi có 2 người thì khả



năng không trùng chính là khả năng người 2 sinh khac ngày người 1. Khi đó có
364 tường hợp trong số 365 trường hợp có thể. Xác suất là 364/365. Như vậy
xác suất để người thứ i không trùng với ngày sinh của những người trước đó
hoàn toàn không phụ thuộc vào người trước đó sinh ngày nào mà chỉ phụ thuộc
vào giá trị của i. Và xác suất này là:
1 - (i-1)/365
Proof:
Đi theo lập luận trên ta tính dược xác suất để 30 người không sinh trùng ngày
là:
i−1
∏30
( 1 − ) ≈ 0.2937
i=1
365
Tổng quát bài toán cho n ngày sinh và m người có ngày sinh không trùng nhau:
i

∏m−1
i=0

∏m
i=0



i
n

∑m
i=0


i
n





m×(m−1)
2n

Pr =
(1− )≈
e =e
=e
(1)
n
−x
Ở trên ta đã sử dụng công thức 1 − x ≈ e với x tương đối gần 0.

Tổng quát:
13 Balls into Bins
Tổng quát vấn đề Birthday Paradox trên ta xây dựng được một mô hình toán
học gọi là balls into bins.
Ở đây có sự tương ứng số người là số bóng và số ngày sinh là số hộp. Nếu bây
giờ ta ném m balls vào n bins (giả sử không ném trượt quả nào) , lúc này mỗi
bins sẽ có một số bóng nhất định. Ta gọi maximum load là số bóng chứa trong
hộp có nhiều bóng nhất.
Định lý: Xác suất để maximum load lớn hơn 3 ln n/ln ln n là không quá 1/n.
Proof:

Xét bin thứ nhất. Xác suất để có ít nhất M balls trong bin 1 sẽ là:
n
1
× ( )M
M
n
(chọn ra M quả trong số n quả. Xác suất để mỗi quả vào hộp 1 là 1/n).
n
1
1
e
× ( )M ≤ ≤ ( )M
M
n
M!
M
Tron bất đẳng thức thứ 2 ta sử dụng công thức:
k

k

k

i

<
= ek ]
k!
i!
Do đố xác suất để tồn tại một bin chứa nhiều hơn M balls là:

∑∞
i=0


n

1

e

n × × ( )M ≤ n × ( )M
M
n
M
Thay M = 3 ln n/ln ln n vào rồi chuyển toàn bộ sang dạng exp ta chứng minh
được xác suất này không quá 1/n
Câu hỏi 1: Xác suất để 2 bóng bất kì ở cùng 1 thùng: 1/n
Câu hỏi 2: Kì vọng số va chạm (nhiều bóng chung thùng)
E(X) = 1/n * Tổ hợp chập 2 của m
Áp dụng vào bài toán sinh nhật:
n = 365
m=?
Ta tính được để E(X) = 1 (có 1 cặp cùng ngày sinh) thì m >= 23
Để E(X) = 2 (có 2 cặp trùng ngày sinh) thì m >= 38
.
Câu hỏi 3: Xác xuất để 1 thùng rỗng (bin is empty): P(bin i is empty) = (1 1/n)^n ~1/e
Kì vọng số thùng rỗng: E(n bin is empty) = n/e
.
Câu hỏi 4: Xác suất để thùng i có k bóng: <= 1/k!
Pr(bin i has k ball) = C(k,n) * (1/n)^k * (1 - 1/n)^(n - k) <= 1/k!

.
Câu hỏi 5: Xác suất để thùng có ít nhất k bóng
Pr(bin i has at least k balls) = C(k,n) * (1/n)^k <= (e/k)^k
.
Câu hỏi 6: Thùng nhiều nhất chứa số bóng: E(maximize) = 3 ln(n)/ln(ln(n))
Xác suất để thùng nhiều nhất chứa số bóng này là: Pr = ln(ln(n))/ln(2)
14 Problem Set Membership
Problem:
Cho tập S = {s_1,s_2, ... ,s_m} là tập con của một tập rất lớn universe U.
Với một phần từ x bất kỳ chọn từ U, ta phải trả lời câu hỏi:" x có là phẩn tử
của S hay không?".
Câu hỏi này được gọi là Set Membership Problem .
1. Chain Hashing
Phương pháp cổ điển nhất là tạo một bảng băm tìm kiếm, Bạn có thể dùng hàm
băm ngẫu nhiên.Phương pháp này luôn cho kết quả chính xác và thời gian khá
nhỏ. Theo phần tính ở mục 2, maximum load bằng ln n/ln ln n là không quá 1/n.
Vậy thì thời gian tìm kiếm lớn hơn Θ(ln n/ln ln n ) với xác suất không quá n.


Nhược điểm của phương phá này là truy cập bộ nhớ quá lớn : m phần tử của tập
S không thế lưu trong RAM được.
4.2. Fingerprint Method
Ta định nghĩa một hàm tạo fingerprint như sau:
f: S -> B
Trong đó B là tập các số nhị phân b bít, Dễ thấy B có 2^b phần tử. Ta chỉ
cần lưu m phần tử, mỗi phần tử b bít trong RAM. Tức cần m*2^b bit.
Việc tính f(x) cũng chính là việc tìm ra fingerprint của x.
ALGORITHM
Tính f(x). So sánh f(x) với tất cả các f(s_i); s_i thuộc S
Có 2 trường hợp xảy ra:

Case 1: Nếu f(x) <> f(s_i); mọi i = 1, 2, ...,m
=> x không thuộc S.
Case 2: Nếu tồn tại 1<= i <= m để f(x) = f(s_i)
=> x thuộc S.
PROBABILISTIC ANALYSIS:
Case 1: Nếu f(x) <> f(s_i); mọi i = 1, 2, ...,m
=> x không thuộc S. Giả sử ngược lại x thuộc S thì phải tồn tại i mà f(x) =
f(s_i) với 1<= i <= m. Mâu thuẫn!
Case 2: Nếu tồn tại 1<= i <= m để f(x) = f(s_i)
=> x thuộc S. Điều khẳng định này là chưa hẳn đã đúng bởi có thể x
không thuộc s nhưng vô tình fingerprint của x trùng với fingerprint của s_i. Sự
kiện này được ta gọi là false positive. Ta đã nhận nhầm x .
Liệu xác suất false positve này có lớn không? Nếu lớn quá thì ta không nên
dùng giải thuật này.
Pr(false positive) = Pr (x ∉ S ∩ (∃k: f(x) = f(sk )) )
= Pr(∃i: f(x) = f(si )) ) − Pr (x ∈ S ∩ (∃i: f(x) = f(si )) )
= 1 − Pr(¬(∃i: f(x) = f(si )) ) − Pr (x ∈ S )
= 1 − Pr(∀i: f(x)f(si ) ) − Pr (x ∈ S ) (4.2)
● Pr (x ∈ S ) = 0 do S là tập con có m phần tử của tập U rất rất lớn.
m
● Pr(∀i: f(x)f(si ) ) = ∏i=1
Pr(f(x)f(si ) ) = ∏m
(1 − Pr(f(x) =
i=1
f(si ) )
Mỗi f(s_i) là một fingerprint dài b bits. Do vậy xác suất để f(x) = f(s_i) chỉ là
1/2^b. Với mọi i = 1,2, ... , m. Suy ra:


Pr(∀i: f(x)f(si ) ) = (1 −


1 m
b )
2

Thay vào đẳng thứ (4.2) ta được:

−m
b
2

m
m
)

1

e

2b
2b
Ở xấp xỉ trên ta đã dùng 2 lần công thức: 1 − x ≈ e−x khi x đủ nhỏ.
Chọn b = 32 tức fingerprint 32-bit, giả sử từ điển có 2^16 password xấu tức
password người sử dụng không được phép dùng. Khi đó trong RAM ta phải lưu:
2^16 * 4 bytes = 256KB;
216
1
Pr(false positive) ≈ 32 ≈
65536
2

Pr(false positive) = 1 − (1 −

1

4.3. Bloom Filter Method
Giống như ở fingerprint method ta sử dụng một ánh xạ f từ tập S vào tập các
giá trị n-bit
Bây giờ thay cho việc mỗi một phần tử cho ra một fingerprint ta chỉ cần một
dãy n bít mà ta gọi là Bloom để lưu tất cá các f(s_i). Nếu f(s_i) trả lại giá trị nào
mà tại đó bit = 1 thì ta thiết lập bit này.
Ví dụ: Bloom n = 4 bit 0000; sau khi tinhs f(s_1) = 2 = 0010. Ta thu được
Bloom 0010. Sau khi tính f(s_2) = 10 = 1010 ta thu được Bloom 1010.
Phương pháp Bloom Filter sử dụng một Bloom,
và các hàm h_i; i =1,2,...,k
Ta nói y nằm trong Bloom nếu tất cả các vị trí bit 1 của y đều có ở trong Bloom.
Ví dụ: y= 8 = 1000 nằm trong Bloom 1010.; y = 1001 không nằm trong Bloom
1010.
ALGORITHM
Tính h_i(x); i =1,2,...,k
x thuộc S <=> h_i(x) nằm trong Bloom nào với mọi i =1,2,...,k

PROBABILISTIC ANALYSIS:
Case 1: Không tồn tại i để h_i(x) nằm trong Bloom
=> x không thuộc S. Giả sử ngược lại x thuộc S thì phải tồn tại i: 1<=
i <= m. mà h_i(x) nằm trong Bloom. Mâu thuẫn!
Case 2: Nếu mọi i: 1<= i <= m , h_i(x) nằm trong Bloom ;
=> x thuộc S.Điều khẳng định này là chưa hẳn đã đúng bởi có thể x
không thuộc S nhưng h_i(x) nằm trong Bloom. Giống như trong fingerprint
method, ta gọi sự kiện này là false positive. Ta đã nhận nhầm x .



Pr(false positive) = Pr (x ∉ S ∩ (∀i: hi (x) in Bloom) )
= Pr(∀i: hi (x) in Bloom ) − Pr (x ∈ S ∩ (∀i: hi (x) in Bloom ))
(Ví các Bloom này độc lập nhau).
(4.3)
● Pr (x ∈ S ) = 0 do S là tập con có m phần tử của tập U rất rất lớn.
● Giả sử ta lưu Bloom dưới dạng 1 mảng A[1:n]. Xét 1 Bloom bất kỳ:



Việc thiết lập các bit 1 trong Bloom được thực hiện k lần ứng với k hàm
h(x), mỗi lần như vậy ánh xạ m phần tử của S. Suy ra:
1
mk
● = (Pr(∃j ∶ A[hi (x)] 1))
= (1 − )mk
n
Thay vào đẳng thức (4.3) ta được:
𝟏
𝐏𝐫(𝐟𝐚𝐥𝐬𝐞 𝐩𝐨𝐬𝐢𝐭𝐢𝐯𝐞) = (𝟏 − (𝟏 − )𝐦𝐤 )𝐤 = (𝟏 − 𝐩)𝐤 ;
1 mk
)
n

𝐧

−mk/n

trong đó: p = (1 −
≈e

. Xấp xỉ: k = - (ln p)*n/m
Với Bloom n-bit và tập S m phần tử ta cần chọn k để xác suất false positive nhỏ
nhất.
k×ln(1−p)
Pr(false positive) = (1 − p)k = e
; thay k = - (ln p)*n/m
− n/m×ln p×ln(1−p)

Pr(false positive) = (1 − p)k = e
ln p + ln(1−p)

ln p × ln(1 − p) ≤

ln(p×(1−p))

=
.
2
Đạt min khi ln p * ln (1-p) đạt max.
ln p + ln(1 − p) ln ( p × (1 − p))
ln p × ln(1 − p) ≤
=
2
2
p*(1-p) đạt max khi p = 1-p = 1/2;
− 4×n/m
Min (Pr(false positive)) = e
khi k = ln2*n/m
2


15 Packet Sampling
Kỳ vọng số gói tin cần thiết để tìm được n router là : nln(n) Với n là số
router



×