Chọn hiệu quả trung vị và các phần tử ở bên trái và bên phải của nó


14

Giả sử chúng ta có một tập hợp của N lập trình.S={a1,a2,a3,,aN}N

Mỗi Coders có xếp hạng và số huy chương vàng E i , họ đã giành được cho đến nay.RiEi

Một công ty phần mềm muốn thuê chính xác ba lập trình viên để phát triển một ứng dụng.

Để thuê ba lập trình viên, họ đã phát triển chiến lược sau:

  1. Đầu tiên, họ sắp xếp các lập trình viên theo thứ tự tăng dần về thứ hạng và thứ tự giảm dần của huy chương vàng.
  2. Từ danh sách được sắp xếp này, họ chọn ba trong số các lập trình viên trung cấp. Ví dụ, nếu danh sách sắp xếp là họ chọn ( một 2 , một 3 , một 1 ) lập trình.(a5,a2,a3,a1,a4)(a2,a3,a1)

Bây giờ chúng tôi phải giúp công ty bằng cách viết một chương trình cho nhiệm vụ này.

Đầu vào:

Dòng đầu tiên chứa , tức là số lượng lập trình viên.N

Sau đó, dòng thứ hai chứa xếp hạng của coder thứ i .Rii

Dòng thứ ba chứa số huy chương vàng được đóng gói bởi người viết mã thứ .i

Đầu ra:

Chỉ hiển thị một dòng có chứa tổng số huy chương vàng mà ba lập trình viên mà công ty sẽ chọn.


3
Vì vậy, các lập trình viên được đánh giá cao hơn luôn giành được ít huy chương hơn ?? Nếu không, bạn thực sự sử dụng thứ tự nào để sắp xếp?
JeffE

Câu trả lời:


16

kn/2,n/21,n/2+1


6
Nếu bạn muốn, bạn có thể chạy thuật toán lựa chọn một lần để tìm trung vị, sau đó tìm tối thiểu và tối đa trong các phân vùng bên phải và bên trái tương ứng trong một lần nhấn.
Zach Langley

@Sid @ Zach Langley Xin chào, bạn có thể vui lòng cung cấp Mã giả. Tôi đã đi qua wiki paedia nhưng cảm thấy hơi khó hiểu. Vì vậy, bạn có thể vui lòng cung cấp PseudoCode Cảm ơn rất nhiều!
Jack

@Jack bạn có quen với cách quicksort hoạt động không? Thuật toán lựa chọn ngẫu nhiên về cơ bản là giống nhau, ngoại trừ nó chỉ đệ quy ở một bên của mỗi trục.
Zach Langley

6
@Jack: Bài viết trên wikipedia về các thuật toán lựa chọn (được liên kết trong câu trả lời của Sid) có chứa mã giả. Google cũng hoạt động.
JeffE

@Sid :: Tôi đọc thuật toán wiki (Thuật toán lựa chọn chung dựa trên phân vùng). Chúng ta phải gọi hàm chọn ba lần với k = n / 2, k = n / 2-1, k / 2.Cũng như thế nào giá trị của bên trái, bên phải trong khi gọi chức năng select. Ngoài ra trong chức năng phân vùng, giá trị của phân vùng sẽ là gì.
Jack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.