Itu tergantung pada data Anda. Skenario kasus terburuk adalah bahwa angka itu terdistribusi secara seragam.
Dalam hal ini Anda dapat menemukan median dalam waktu O (N) seperti dalam contoh ini:
Misalkan angka Anda adalah 2,7,5,10,1,6,4,4,6,10,4,7,1,8,4,9,9,3,4,3 (kisaran 1-10) .
Kami membuat 3 ember: 1-3, 4-7, 8-10. Perhatikan bahwa atas dan bawah memiliki ukuran yang sama.
Kami mengisi ember dengan angka, menghitung berapa banyak yang jatuh masing-masing, maksimal dan minimum
- rendah (5): 2,1,1,3,3, min 1, maks 3
- tengah (10): 7,5,6,4,4,6,4,7,4,4, min 4, maks 7
- tinggi (5): 10, 10, 8, 9, 9, min 8, maks 10
Berarti jatuh di ember tengah, kami mengabaikan sisanya
Kami membuat 3 ember: 4, 5-6, 7. Rendah akan mulai dengan hitungan 5 dan dengan maksimal 3 dan tinggi dengan minimal 8 dan hitungan 5.
Untuk setiap angka, kami menghitung berapa banyak yang jatuh di ember rendah dan tinggi, maks dan minimum, dan simpan ember tengah.
- old rendah (5)
- rendah (5): 4, 4, 4, 4, 4, maks 4
- menengah (3): 5,6,6
- tinggi (2): 7, 7, min 7
- old high (5)
Sekarang kita dapat menghitung median secara langsung: kita memiliki situasi seperti ini
old low low middle high old high
x x x x x 4 4 4 4 4 4 5 6 6 7 7 x x x x x
jadi mediannya adalah 4,5.
Dengan asumsi Anda tahu sedikit tentang distribusi, Anda dapat menyesuaikan cara menentukan rentang untuk mengoptimalkan kecepatan. Bagaimanapun, kinerja harus pergi dengan O (N), karena 1 + 1/3 + 1/9 ... = 1,5
Anda perlu min dan maks karena tepi kasus (mis. Jika median adalah rata-rata antara maks rendah lama dan elemen berikutnya).
Semua operasi ini dapat diparalelkan, Anda dapat memberikan 1/100 data ke setiap komputer dan menghitung 3 ember di setiap node, lalu mendistribusikan ember yang Anda simpan. Ini lagi membuat Anda menggunakan jaringan secara efisien karena setiap angka dilewatkan rata-rata 1,5 kali (jadi O (N)). Anda bahkan dapat mengalahkan itu jika Anda hanya melewatkan angka minimal di antara node (mis. Jika simpul 1 memiliki 100 angka dan simpul 2 memiliki angka 150, maka simpul 2 dapat memberikan 25 angka ke simpul 1).
Kecuali Anda tahu lebih banyak tentang distribusi, saya ragu Anda bisa melakukan lebih baik daripada O (N) di sini, karena Anda benar-benar perlu menghitung elemen setidaknya sekali.