BÀI TẬP LỚN PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN Thuật toán sắp xếp Bucket Sort

14 1.6K 3
BÀI TẬP LỚN  PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN Thuật toán sắp xếp Bucket Sort

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BÀI TẬP LỚN PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN Thuật toán sắp xếp Bucket Sort Cho một mảng A chưa sắp xếp gồm n phần tử, tìm phần tử có giá trị x trong mảng A. Cân nhắc chiến lược sử dụng ngẫu nhiên sau: lấy một số ngẫu nhiên i trong tập chỉ số của A (1 ≤ i ≤ length of A). Nếu Ai = x thì tìm được x trong mảng A. Nếu không, lặp lại bước trên cho đến khi tìm được một chỉ số j của mảng A thỏa mãn Aj = x hoặc đã duyệt qua mọi phần tử của A.

I. TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG    BÀI TẬP LỚN PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN Giáo viên hướng dẫn: TS. Nguyễn Khanh Văn Học viên thực hiện : Trương Thảo Nguyên CB120098 Vũ Đình Phú CB120104 Nguyễn Thị Thúy Liên CB120046 Lớp: Công nghệ thông tin 2 (KT) Chuyên ngành: Công nghệ thông tin (KT) Đề bài: Đề số 01 HÀ NỘI 11 – 2012 Mục lục 1. Bài 1: Sách MIT, Problem 5.2 Câu a,b,c,d 1.1. Phát biểu bài toán Cho một mảng A chưa sắp xếp gồm n phần tử, tìm phần tử có giá trị x trong mảng A. Cân nhắc chiến lược sử dụng ngẫu nhiên sau: lấy một số ngẫu nhiên i trong tập chỉ số của A (1 ≤ i ≤ length of A). Nếu A[i] = x thì tìm được x trong mảng A. Nếu không, lặp lại bước trên cho đến khi tìm được một chỉ số j của mảng A thỏa mãn A[j] = x hoặc đã duyệt qua mọi phần tử của A. a. Viết giả code cho thủ tục RANDOM-SEARCH để cài đặt chiến lược trên b. Giả sử rằng, có đúng một chỉ số i thỏa mãn A[i] = x. Tính kì vọng số lần thử trước khi tìm được x và thuật toán RANDOM-SEARCH dừng lại c. Tổng quá hóa lời giải ở câu b, giả sửa rằng có k ≥ 1 chỉ số i mà A[i] = x. Tính kì vọng số lần thử trước khi tìm được x và thuật toán RANDOM-SEARCH dừng lại. d. Giả sửa rằng không có chỉ số nào để A[i] = x. Tính kì vọng số lần thử để kiểm tra qua mọi phần tử của A và thuật toán RANDOM-SEARCH dừng lại. 1.2. Lời giải a. Giả code của thuật toán RANDOM-SEARCH RANDOM-SEARCH(A,n) while IS-CHECK-ALL(A) i ← RANDOM(1,n) if A[i] = x return i CHECK(A,i) return notfound Trong đó, CHECK(A,i) là thủ tục đánh dấu đã kiểm tra phần tử thứ i của mảng A. IS- CHECK-ALL(A) là thủ tục kiểm tra xem đã duyệt qua hết tất cả các phần tử của A hay chưa b. Tính kì vọng của số lần thử nếu như tồn tại đúng một chỉ số i mà A[i] = x Gọi là n kích thước của mảng A. Vì tồn tại đúng một số x trong mảng A nên tại một lần thử: - Xác suất để chọn đúng chỉ số i mà A[i] = x là Pr(A[i] = x) = 1/n - Xác suất để chọn chỉ số i mà A[i] ≠ x là Pr(A[i] ≠ x) = 1- 1/n Gọi E j là sự kiện thử j lần thì tìm được số x trong mảng A. Vậy ta có E j chính là sự kiện tại j-1 lần thử đầu tiên không thành công lấy được chỉ số i thỏa mãn A[i] = x và thành công tại lần thứ j P(E j ) = (trong đó j ≥ 1) Hay P(E j ) = (1-p) j-1 * p (với p = 1/n) Vậy kì vọng của số lần thử để tìm được x hoặc thuật toán kết thúc là E = p) j-1 * p Mà p = 1/n Vậy E = n c. Tính kì vọng của số lần thử nếu như tồn tại k ≥ 1 chỉ số i mà A[i] = x Từ chứng minh câu b ta vẫn có kết quả ta vẫn có Trong đó p là xác suất để chọn đúng chỉ số i mà A[i] = x là Pr(A[i] = x).Vậy bài toán quy về việc tính p. Vì tồn tại k ≥ 1 chỉ số i để A[i] = x nên xác suất để chọn đúng chỉ số i mà A[i] = x là Pr(A[i] = x) = k/n Vậy E = 1/(k/n) = n/k d. Tính kì vọng của số lần thử nếu như không tồn tại chỉ số i mà A[i] = x Vì trong mảng A không tồn tại phần tử nào có giá trị là x cho nên số lần thử (số vòng lặp) để thuật toán dừng chính là số lần thử để kiểm tra hết tất cả n phần tử trong mảng A có chỉ số lần lượt từ 1 đến n. Bài toán này giống với bài toán “thu thập coupon” Gọi X là số lần thử cho đến khi kiểm tra hết cả n phần tử của mảng A Gọi X i là số lần thử mà khi đó đã kiểm tra được i-1 phần tử của mảng A (cho đến khi kiểm tra được phân từ thứ i). Vậy X = Xác suất để tại một lần thử, kiểm tra phần tử cũ (phần tử đã so sánh giá trị với x trước đó) khi đã mà đã có i-1 phần tử được kiểm tra là q i = (i-1)/n Xác suất để tại một lần thử, kiểm tra được phần tử mới (phần tử chưa so sánh giá trị với x trước đó) khi mà đã có i-1 phần tử được kiểm tra là p i = 1- q i = 1 – (i-1)/n = (n-i+1)/n Từ đó suy ra E[X i ] = 1/p i = n/(n-i+1) Lại có E[X] = (do n-1+1 = n, n-2+1 = n-1, , n-n+1 =1) + O(1)) 2. Bài 2: Sách MIT, Problem 15-1 2.1. Phát biểu bài toán Bài toán Bitonic euclidean traveling-salesman problem là bài toán tìm đường đi ngắn nhất đi qua n điểm, tạo thành vòng khép kín trên mặt phẳng, đi từ điểm xuất phát ban đầu, di qua n-1 điểm còn lại rồi quay về. Ví dụ, hình vẽ bên dưới chỉ ra 2 cách đi tương ứng với bài toán 7 điểm. Thông thường với bài toán này thì thuộc dạng NP-complete, và bình thường lời giải thường có thời gian tính toán lớn hơn dạng đa thức. Hình 1: Hình vẽ mô phỏng với 7 điểm ở trên: quảng đường ngắn nhất để đi qua n điểm và quay về điểm xuất phát: a, nếu không dùng Bitonic shortest, thì mất khoảng 24,89. b, nếu dùng thuật toán shorstest Bitonic thì mất khoảng 25,58. J. L. Bentley đã gợi ý sữ dụng thuật toán Bitonic. Lúc đó, người du lịch có thể đi bắt đầu từ bên trái nhất, tuân thủ theo từ trái sang phải tới điểm phải nhất trong thuật toán Bitonic, sau đó đi ngược lại từ điểm phải nhất quay về vị trí ban đầu. Nếu khi sử dụng thuật toán Bitonic, thì thời gian tính toán lúc đó sẽ là đa thức, và đánh giá bằng O(n 2 ), giả sử không có điểm nào nằm cùng tọa độ x với nhau. 2.2. Lời giải a. Thuật toán Bitonic - Sắp xếp tất cả các thành phố mất O(nlogn) từ thành phố có tọa độ x nhỏ nhất đến cao nhất. - Giả sử thành phố V n là kề cận với V i . Vì chúng ta cần quảng đường ngắn nhất từ V i tới V 1 và tới V n , sau đó quay lại tới V i mà đi qua tất cả các thành phố. - Định nghĩa t(i,j) , i<j là quảng đường ngắn nhất từ V i , đi qua V 1 , và quay lại V j . Khi đó t(i, j) được tính toán như sau: o t(i, j) = t(i, j-1) + d(v j -1, v j ) if j > i + 2 o t(i, j) = min{ t(k, i) + d(v k , v j ) | if j = i+1 for 1 < k < i – 1 o Trong đó (với d(a,b) là khoảng cách giữa hai thành phố a và b. ) b. Bài toán đơn giản với 7 điểm Giả sử có 7 điểm như hình vẽ: Bài toán shortest Bitonic quay về giải quyết tương tự bài toán tìm đường đi ngắn nhất giữa 2 điểm a, b L(a,b) với a, b là adjection, trong tập {1,2,3…a,b, n}.Khi a=n,b=n, bài toán trở thành tìm đường đi ngắn nhất đi qua tất cã các điểm từ điểm trái nhất, duyệt qua tất cã các điểm rồi trở về điểm trái nhất. Đầu tiên: chúng ta sắp xếp theo thứ tự tăng dần theo tọa độ x của tất cã các điểm trên mặt phẳng. Trường hợp 1: Khi a=0, khi đó bitonic tour L(a,b) chính là đường đơn đi từ bên trái nhất sang đến điểm b. Ví dụ L(0,4) ta có hình: Chúng ta có duy nhất đường này dựa vào L(0,b) =edge(b-1,b)+L(0,b-1). Trương hợp 2: a<b-1. Khi đó L(a,b)=L(a,b-1)+edge(b-1,b). Vì vậy chúng ta chỉ cần tính toán dần đệ quy. Hình vẽ dưới đây minh họa L(1,5)=L(1,4)+L(4,5). Trường hợp 3: a=b-1. Giả sử xét a=4,b=5, thì L(4,5)=minnimum của các trường hợp: - L(0,4)+egde(0,5) - L(1,4)+egde(1,5): - L(2,4)+egde(2,5): - L(3,4)+egde(3,5) Như trường hợp này cho ta min băng L(3,4)+egde(3,5). Tiếp tục giải bài toán trên ta quy về đi tìm shortest của L(3,4). Vậy bài toán này đưa về tinh toán quy hoạch động theo bảng sau: L(0,1) L(0,2) L(1,2) L(0,3) L(1,3) L(2,3) L(0,4) L(1,4) L(2,4) L(3,4) L(0,5) L(1,5) L(2,5) L(3,5) L(4,5) L(0,n-1) L(1,n-1) L(2,n-1) L(3,n-1) L(4,n-1) … L(n-2,n-1) L(0,n) L(1,n) L(2,n) L(3,n) L(4,n) … L(n-2,n) L(n-1,n) c. Đánh giá thuật toán Nhận thấy, có thể tính toán số phép toán dựa trên bảng sau 1 1 1 1 1 2 1 1 1 3 1 1 1 1 4 1 1 1 1 1 n-2 1 1 1 1 1 1 n-1 Vậy ta có tổng số phép toán phải xữ lý trong bài toán shorstest bitonic là: 1 + 2+4 +6 +8 + … +2(n-1) = 3. Bài 3: Câu a&d 3.1. Phát biểu bài toán Tại một siêu thị điện máy người ta cho mỗi khách hàng (KH) khi mua với trị giá hơn 1 triệu sẽ được bắt thăm để lĩnh thưởng (mỗi tháng một lần). Các hồ sơ gồm tên KH, CMT và số thăm bắt được sẽ được lưu trữ theo nguyên tắc dùng bảng băm tại đó mỗi ô (slot) có thể sẽ trỏ đến một danh sách móc nối bản ghi trong đó các số thăm đều có cùng một giá trị băm. Giả sử trong tháng hai vừa qua số lượng KH đã được bắt thăm là 20000. Trong câu a-b-c-d, giả thiết siêu thị dùng bảng băm kích thước 20000. a) Kỳ vọng số lượng ô còn trống là bao nhiêu? b) Kỳ vọng số lượng ô có đúng 2 lá thăm rơi vào là bao nhiêu? c) Kỳ vọng số lượng ô có nhiều hơn 2 lá thăm rơi vào là bao nhiêu? d) Giả sử số lượng KH VIP, tức là KH mua với trị giá hơn 20 triệu, trong tháng hai không nhiều hơn 100. Tính xác suất để sự kiện tồn tại một ô có chứa ít nhất 2 lá thăm của khách hàng VIP. e) Siêu thị không muốn lãng phí số lượng ô trống; Vậy kích thước bảng băm phù hợp phải là bao nhiêu để số lượng ô trống là ít hơn hơn 10% f) Nếu siêu thị dùng bảng băm kích thước 2000 thì khả năng có ô trống hay không còn ô trống là cao hơn? Gợi ý: Có thể áp dụng phần đã học về mô hình Bins-and-balls. Một vài câu có thể áp dụng nghịch lý Birthday hoặc bài toán người sưu tập Coupon 3.2. Lời giải a. Kì vọng số lượng ô còn trống là bao nhiêu Gọi n là số ô trong bảng băm. n= 20000. Gọi m là số khách hàng được bắt thăm (số thăm) m = 20000. Áp dụng mô hình bài toán Bín-and-balls với một ô trong bảng băm tương ứng bới một bin và lá thăm hay khách hàng tương ứng với ball, ta có xác suất để một ô là trống là Pr[một ô là trống] = (1-1/n) m e -m/n Gọi X j là biến ngẫu nhiên chỉ báo cho sự kiện một ô j trong bảng băm là trống + X j =1 nếu ô thứ j trong bảng băm là trông + X j = 0 nếu ngược lại Gọi X là số lượng ô trống trong bảng băm [...]... chứa ≥ M thăm] ≤ Vậy Pr ≤ 0,0012375 4 Bài 4: Thuật toán sắp xếp Bucket Sort 4.1 Phát biểu bài toán Trình bày đầy đủ thuật toán sắp xếp Bucket Sort Hãy cho biết trong điều kiện như thế nào thì Bucket Sort có thể đạt được thời gian thực hiện O(n) Hãy lập luận và có chứng minh cở sở toán học (xác suất) chặt chẽ 4.2 Lời giải a Thuật toán sắp xếp Bucket Sort Bài toán: Một tập gồm n ≤ 2 m số nguyên được chọn... sắp xếp với thời gian kì vọng là O(n) Để đơn giản bài toán có thể quy về một tập gồm các số được chọn ngẫu nhiên từ [0,1) có thể được sắp xếp với thời gian kì vọng là O(n) (chia tất cả các phần tử của dãy ban đầu cho 2k) Ý tưởng của thuật toán: - Chia đoan [0,1) ra làm n phần con có kích thước bằng nhau gọi là buckets Phân bố n phần tử của mảng đầu vào (mảng cần sắp xếp) vào các buckets tương ứng Sắp. .. những bucket đã được sắp xếp chính là dãy sắp xếp chuẩn xác b Điều kiện để Bucket Sort đạt thời gian thực hiện là O(n) Thuật toán Bucket Sort đạt thời gian thực hiện là O(n) với điều kiện dãy số đầu vào là ngẫu nhiên (được sinh ra từ phân bố xác suất đều – uniform distribution) Thật vậy, xét một cách ước lượng, khi mảng các số A đầu vào là ngẫu nhiên thì việc phân bố các phần tử của A vào các bucket. .. trong từng bucket là đồng đều và là nhỏ Chi phí cho thao tác để sắp xếp trong từng bucket này có thể coi là O(1) Vậy cần O(n) để sắp xếp trên tất cả buckets Ta cũng có thể chứng minh bằng xác suất như sau: Gọi ni là số lượng phần tử được phân bố vào bucket B[i] Trong trường hợp tổng quát, insertion sort chạy với chi phí là hàm bậc 2 của số phần tử nên ta có tổng thời gian để thực hiện bucket sort là:... gian tính toán trung bình (kì vọng): ) (1) Vậy ta phải tìm Gọi Xij là biến ngẫu nhiên chỉ báo (indicator random variables) của sự kiện phần tử A[j] được phân bố vào bucket i Xác suất để phần tử A[j] được phân bổ vào bucket I là: Pr(A[j] rơi vào bucket i) = 1/n (do có n bucket và các phần tử A[j] sinh ra từ phân bố xác suất đều).Vậy : Do đó: Suy ra E[(Xij)2] = 02 * Pr(A[j] khổng rơi vào bucket i )... Sắp xếp trong các buckets bằng giải thuật sắp xếp hiệu quả Cuối cùng, kết hợp output bằng cách duyệt qua các buckets theo thứ tự, liệt kê các phần tử nằm trong mỗi buckets theo thứ tự Giả code - Đầu vảo: Một mảng A[1 n] thỏa mãn 0 với mọi i Gọi B[0…n-1] là một mảng phụ chứa các danh sách móc nối BUCKET- SORT( A, n) for i ← 1 to n do insert A[i] into list B[ROUND(n * A[i])] for i ← 0 to n − 1 do sort. .. insertion sort concatenate lists B[0], B[1], , B[n − 1] together in order return the concatenated lists Trong đó thủ tục ROUND(n*A[i]) trả ra cận dưới của giá trị n*A[i] Độ chính xác Xét A[i] và A[j] Không làm mất tính tổng quát, giả sử rằng A[i] ≤ A[j] Suy ra ROUND(n*A[i]) ≤ ROUND(n*A[j]) Do đó A[i] được phân vào cùng một bucket hoặc vào bucket có chỉ số thấp hơn so với A[j] Vậy dãy sau khi được kết... E[(Xij)2] = 02 * Pr(A[j] khổng rơi vào bucket i ) + 12 * Pr(A[j] rơi vào bucket i) E[(Xij)2] = 0 **1-1/n) + 1* 1/n = 1/n Với j ≠ k và Xij và Xik là những biến ngẫu nhiên độc lập nên E[XijXik] = E[Xij]E[Xik] = 1/n * 1/n = 1/n2 Từ đó có thể suy ra được = n * 1/n + 2* * 1/n2 = 1 + 2* n(n-1)/2 * 1/n2 = 1 + (n-1)/n = 2 -1/n (2) Từ (1) và (2) to có E[T(n)] ) = = (điều phải chứng minh) ... (1-1/n)m n*e-m/n Với m=n=20000  E[X] = 20000 * e-1 7357 d Xác suất để tồn tại một ô có chứa ít nhất 2 lá thăm của khách hàng VIP Với n là số khách hàng VIP (n ≤ 100) và m là số ô trong bảng băm (m=20000) Xác suất để một lá thăm xác định rơi vào một ô trong bẳng băm là (1/m) Xác suất để ô thứ k bất kì chứa ít nhất M=2 lá thăm của khách hàng VIP: Pr[ô k chứa ≥ M thăm] ≤ Nhận thấy xác suất để tồn tại một

Ngày đăng: 27/01/2015, 23:27

Từ khóa liên quan

Mục lục

  •   

    • 1.1. Phát biểu bài toán

    • 1.2. Lời giải

      • a. Giả code của thuật toán RANDOM-SEARCH

      • b. Tính kì vọng của số lần thử nếu như tồn tại đúng một chỉ số i mà A[i] = x

      • c. Tính kì vọng của số lần thử nếu như tồn tại k ≥ 1 chỉ số i mà A[i] = x

      • d. Tính kì vọng của số lần thử nếu như không tồn tại chỉ số i mà A[i] = x

      • 2.1. Phát biểu bài toán

      • 2.2. Lời giải

        • a. Thuật toán Bitonic

        • b. Bài toán đơn giản với 7 điểm

        • c. Đánh giá thuật toán

        • 3.1. Phát biểu bài toán

        • 3.2. Lời giải

          • a. Kì vọng số lượng ô còn trống là bao nhiêu

          • d. Xác suất để tồn tại một ô có chứa ít nhất 2 lá thăm của khách hàng VIP

          • 4.1. Phát biểu bài toán

          • 4.2. Lời giải

            • a. Thuật toán sắp xếp Bucket Sort

            • b. Điều kiện để Bucket Sort đạt thời gian thực hiện là O(n)

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan