Monte Carlo Algorithms- Có 2 cách để tăng độ chính xác cho kết quả của thuật toán Monte Carlo: 1.Tăng thời gian chạy của thuật toán 2.Gọi thuật toán nhiều lần Ví dụ: Monte3 x { One = Mon
Trang 1Monte Carlo Algorithms
- Có 2 cách để tăng độ chính xác cho kết quả của thuật toán Monte Carlo:
1.Tăng thời gian chạy của thuật toán
2.Gọi thuật toán nhiều lần
Ví dụ: Monte3 (x)
{ One = Monte (x);
Two = Monte (x);
Three = Monte (x);
if (One = Two) or (One = Three)
return One;
else return Two;
}
Trang 2Monte Carlo Algorithms
1 Majority Element: (Phần tử chiếm đa số)
- Mục đích của bài toán là tìm số chiếm đa số trong
1 dãy số đó là số chiếm hơn 50% trong dãy số
- Giải quyết bài toán thông thường O (n2) vì
phải so sánh từng cặp số 1
Trang 3Monte Carlo Algorithms
int Timsochiemdaso (int a[], int n)
{ int count =0;
while (count <n/2)
{ for (int k=0;k<n;k++)
{ int choice = a[k];
for (int i=1;i<n;i++)
if (a[i] = choice) count++;
return choice;
} }
Trang 4Monte Carlo Algorithms
- Đối với giải thuật Monte Carlo:
+ Lấy ngẫu nhiên 1 số nằm trong khoảng (1,n) + Kiểm tra xem vị trí của số ngẫu nhiên đó có
phải là số Majority không + Kết quả của thuật toán trả về True hoặc False + Nếu True Đã tìm ra được số Majority
+ Nếu False Phép chọn không chính xác
Thử với lần tiếp theo + Giải thuật chỉ đúng khoảng 50% trong 1 số
trường hợp Vì vậy nếu gọi hàm 5 lần thì kết quả chính xác tăng lên là 97% O(5N)=O(N)
Trang 5Monte Carlo Algorithms
bool Majority (int a[], int n)
{ choice = uniform (1,n); // Hàm lấy 1 số ngẫu
nhiên từ 1n
int count =0;
for (int i=1;i<n;i++)
if (a[i] = a[choice])count++;
return (count >n/2);
}
Trang 6Monte Carlo Algorithms
2 Monte Carlo Prime Testing:
- Kiểm tra số N có phải là số nguyên tố hay không
bằng cách sử dụng thuật toán Monte Carlo
- Chọn 1 số A ngẫu nhiên từ 2 sqrt(N)
- Nếu N chia hết cho a N không phải là số
nguyên tố
- Nếu N không chia hết cho a Chưa chắc khẳng
định N là số nguyên tố
- Xác suất cho kết quả đúng của bài toán chỉ 1,2%
Trang 7Las Vegas Algorithms
Giới thiệu:
- Giải thuật Las Vegas không bao giờ trả về 1 kết quả sai Tuy nhiên, thỉnh thoảng không trả về kết quả
- Số lần chạy thuật toán càng nhiều thì xác suất thành công càng cao
- Ý tưởng cơ bản của giải thuật Las Vegas: Chọn
ngẫu nhiên 1 quyết định, và kiểm tra xem quyết
định đó có dẫn đến 1 kết quả thành công hay không
- Giải thuật sẽ lặp lại cho đến khi có được 1 kết quả thành công
Trang 8Las Vegas Algorithms
Ví dụ:
- Success (x) – Là số lần cho kết quả thành công
- Failure(x) – Là số lần cho kết quả sai
- P(x) – Xác suất giải thuật cho ra kết quả thành công
Số lần chạy giải thuật Time(x)
Time(x) = p(x) *S(x) + (1-p(x))*(F(x) + Time(x)) Time(x) = S(x) + (1-p(x))/p(x)*F(x)
Trang 9Las Vegas Algorithms
Ứng dụng: Bài toán 8 quân hậu
1 Giải bằng đệ qui quay lui
2 Las Vegas Algorithm:
- Đặt quân hậu 1 tại vị trí bất kì ở hàng đầu tiên
- Tiếp theo đặt quân hậu 2 ở vị trí bất kì ở hàng 2
sao cho chúng không ăn nhau với quân hậu 1
- Tiếp tục cho đến quân hậu 8
- Kết quả của giải thuật có thể là True hoặc False
Las Vegas sẽ giải tiếp cho đến khi đạt kết quả True
Trang 10Las Vegas Algorithms
Giải thuật:
bool LasVegasQueeen ( result) // đưa ra vị trí cột cho mỗi dòng { row = 1;
do{ spot =0;
for (int i=1;i<=8;i++) { if (!row và i không ăn nhau)
if uniform (1,1) =1 try =i;
} }
if (spot>0) result[row] = try;
}while ((spot = 0) or (row =9))