2013-08-07 28 views

Trả lời

3

Tôi nghĩ rằng nếu bạn sẽ kiểm tra "Proof of O (n) thời gian chạy" của trang wiki cho medians-of-medians algorithm:

Cuộc gọi đệ quy trung bình-tính không vượt quá trường hợp xấu nhất hành vi tuyến tính vì danh sách các trung vị là 20% kích thước của danh sách, trong khi cuộc gọi đệ quy khác recurses trên tối đa là 70% của danh sách, làm cho thời gian chạy

Image

O (n) hạn cn là cho công việc phân vùng (chúng tôi đã truy cập từng phần tử một số lần stant, để tạo thành n/5 nhóm và lấy mỗi trung vị trong thời gian O (1)). Từ đó, sử dụng cảm ứng, người ta có thể dễ dàng thấy rằng

Image

Điều đó sẽ giúp bạn hiểu, tại sao.

+2

Điều này chứng tỏ O (n) thời gian chạy của việc sử dụng 20%, nó không bác bỏ các O (n) thời gian chạy của một số tỷ lệ phần trăm khác (nếu một số phần trăm khác cũng là O (n), nó không biện minh cho sự lựa chọn của 20% trên khác). – Dukeling

5

Số phải lớn hơn 3 (và một số lẻ, rõ ràng) cho thuật toán. 5 là số lẻ nhỏ nhất lớn hơn 3. Vì vậy, 5 đã được chọn.

+0

Nó không phải là lớn hơn tan 3 (và lẻ), xem câu trả lời của tôi dưới đây. –

+0

Có, nhưng đó là một thuật toán khác. Nó chỉ là một biến thể nhỏ của thuật toán OP được hỏi về - nhưng nó vẫn là một thuật toán khác. OP hỏi "tại sao trong thuật toán cụ thể này chúng ta cần phải sử dụng khối 5", và không "là có một biến thể trên thuật toán này, nơi chúng tôi có thể sử dụng các khối nhỏ hơn". Họ đã cố gắng để hiểu làm thế nào một cái gì đó đã được tính toán hơn là cố gắng tìm nếu có cái gì đó khác nhau mà có thể làm điều đó tốt hơn. – rabensky

0

Bạn cũng có thể sử dụng các khối có kích thước 3 hoặc 4, như được hiển thị trong giấy Select with groups of 3 or 4 bởi K. Chen và A. Dumitrescu (2015). Ý tưởng là sử dụng thuật toán "median of medians" hai lần và chỉ phân vùng sau đó. Điều này làm giảm chất lượng của trục nhưng nhanh hơn.

Vì vậy, thay vì:

T(n) <= T(n/3) + T(2n/3) + O(n) 
T(n) = O(nlogn) 

một nhận:

T(n) <= T(n/9) + T(7n/9) + O(n) 
T(n) = Theta(n)