Monte Carlo Algorithms 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 = Monte (x); Two = Monte (x); Three = Monte (x); if (One = Two) or (One = Three) return One; else return Two; } Monte Carlo Algorithms Monte 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 (n 2 ) vì phải so sánh từng cặp số 1 Monte Carlo Algorithms Monte 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; } } Monte Carlo Algorithms Monte 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) Monte Carlo Algorithms Monte 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); } Monte Carlo Algorithms Monte 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% Las Vegas Algorithms Las 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 Las Vegas Algorithms Las 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) Las Vegas Algorithms Las 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 Las Vegas Algorithms Las 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 ) { spot++; if uniform (1,1) =1 try =i; } } if (spot>0) result[row] = try; }while ((spot = 0) or (row =9)) . 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; } Monte Carlo Algorithms Monte Carlo Algorithms 1 (count >n/2); } Monte Carlo Algorithms Monte 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. i=1;i<n;i++) if (a[i] = choice) count++; return choice; } } Monte Carlo Algorithms Monte 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