1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu trúc dữ liệu và giải thuật (phần 23) potx

10 431 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 180,31 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

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;

}

Trang 2

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 (n2) vì

phải so sánh từng cặp số 1

Trang 3

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;

} }

Trang 4

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)

Trang 5

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);

}

Trang 6

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%

Trang 7

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

Trang 8

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)

Trang 9

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

Trang 10

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)

if uniform (1,1) =1 try =i;

} }

if (spot>0) result[row] = try;

}while ((spot = 0) or (row =9))

Ngày đăng: 09/07/2014, 21:20

TỪ KHÓA LIÊN QUAN

w