Secara efisien memilih median dan elemen ke kiri dan kanan

14

Misalkan kita memiliki satu set dari N coders.S={Sebuah1,Sebuah2,Sebuah3,...,SebuahN}N

Setiap memiliki peringkat dan jumlah medali emas , yang telah mereka menangi sejauh ini.RsayaEsaya

Perusahaan Perangkat Lunak ingin merekrut tiga coders untuk mengembangkan aplikasi.

Untuk merekrut tiga coders, mereka mengembangkan strategi berikut:

  1. Pertama-tama mereka mengatur coders dalam urutan peringkat naik dan urutan medali emas menurun.
  2. Dari daftar yang diatur ini, mereka memilih tiga dari coders tengah. Misalnya, jika daftar yang disusun adalah mereka memilih coders.(Sebuah5,Sebuah2,Sebuah3,Sebuah1,Sebuah4)(Sebuah2,Sebuah3,Sebuah1)

Sekarang kita harus membantu perusahaan dengan menulis program untuk tugas ini.

Memasukkan:

Baris pertama berisi , yaitu jumlah coders.N

Kemudian baris kedua berisi peringkat dari coder i .Rsayasaya

Baris ketiga berisi jumlah medali emas dikantongi oleh th coder.saya

Keluaran:

Tampilkan hanya satu baris yang berisi jumlah medali emas yang diperoleh oleh tiga coders yang akan dipilih perusahaan.

Mendongkrak
sumber
3
Jadi coders berperingkat tinggi selalu memenangkan medali lebih sedikit ?? Jika tidak, pesanan apa yang sebenarnya Anda gunakan untuk menyortir?
JeffE

Jawaban:

16

Ini adalah masalah memilih th elemen terkecil dari daftar diselesaikan dengan kelas algoritma yang disebut Seleksi Algoritma . Terdapat algoritma pemilihan waktu linear deterministik sehingga masalah Anda dapat diselesaikan dalam waktu linier dengan memilih elemen terkecil n / 2 , n / 2 - 1 , n / 2 + 1 dari daftar yang tidak disortir.kn/2,n/2-1,n/2+1

Memilih
sumber
6
Jika mau, Anda dapat menjalankan algoritme seleksi sekali untuk menemukan median, dan kemudian menemukan minimum dan maksimum di partisi kanan dan kiri masing-masing dalam satu gerakan.
Zach Langley
@Sid @ Zach Langley Hai, tolong berikan Kode Pseudo. Saya pergi melalui wiki paedia tetapi terasa agak sulit dimengerti. Jadi bisakah Anda memberikan PseudoCode Terima kasih banyak!
Jack
@ Jack, apakah Anda terbiasa dengan cara kerja quicksort? Algoritma pemilihan acak pada dasarnya sama, kecuali hanya berulang pada satu sisi dari masing-masing pivot.
Zach Langley
6
@Jack: Artikel wikipedia tentang algoritme pemilihan (ditautkan dalam jawaban Sid) berisi pseudocode. Google juga berfungsi.
JeffE
@ Id :: Saya membaca algoritma wiki (algoritma pemilihan umum berbasis Partisi). Apakah kita harus memanggil fungsi pilih tiga kali dengan k = n / 2, k = n / 2-1, k / 2. Juga apa yang akan terjadi nilai kiri, kanan saat memanggil fungsi pilih. Juga di fungsi partisi, apa yang akan menjadi val indeks partisi.
Jack