Verilerinize bağlıdır. En kötü durum senaryosu, eşit olarak dağıtılmış sayılardır.
Bu durumda, medyanı bu örnekte olduğu gibi O (N) zamanda bulabilirsiniz:
Sayılarınızın 2,7,5,10,1,6,4,4,6,10,4,7,1,8,4,9,9,3,4,3 (aralık 1-10) olduğunu varsayalım .
3 kova oluşturuyoruz: 1-3, 4-7, 8-10. Üst ve alt kısımların eşit boyutta olduğuna dikkat edin.
Kovaları sayılarla doldururuz, her birinde kaç tane düştüğünü sayarız, maksimum ve minimum
- düşük (5): 2,1,1,3,3, min 1, max 3
- orta (10): 7,5,6,4,4,6,4,7,4,4, min 4, maks 7
- yüksek (5): 10, 10, 8, 9, 9, min 8, max 10
Ortalama orta kovaya düşer, gerisini göz ardı ederiz
3 kova oluşturuyoruz: 4, 5-6, 7. Düşük, 5 sayımla başlayacak ve en fazla 3 ve yüksek, en az 8 ve 5 sayı ile başlayacaktır.
Her sayı için alçak ve yüksek kovaya kaç kişinin düştüğünü, maksimum ve minimum sayıları sayıyoruz ve orta kovayı koruyoruz.
- eski düşük (5)
- düşük (5): 4, 4, 4, 4, 4, maks. 4
- orta (3): 5,6,6
- yüksek (2): 7, 7, min 7
- eski yüksek (5)
Şimdi medyanı doğrudan hesaplayabiliriz: böyle bir durumumuz var
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
yani medyan 4,5'tir.
Dağıtım hakkında biraz bilgi sahibi olduğunuzu varsayarsak, hızı optimize etmek için aralıkları nasıl tanımlayacağınıza ince ayar yapabilirsiniz. Her durumda, performans O (N) ile gitmelidir çünkü 1 + 1/3 + 1/9 ... = 1.5
Uç durumlar nedeniyle minimum ve maksimuma ihtiyacınız vardır (örneğin, medyan, eski düşük maksimum ile bir sonraki eleman arasındaki ortalama ise).
Tüm bu işlemler paralel hale getirilebilir, her bilgisayara verinin 1 / 100'ünü verebilir ve her bir düğümdeki 3 grubu hesaplayabilir, ardından sakladığınız paketi dağıtabilirsiniz. Bu yine ağı verimli kullanmanıza neden olur çünkü her sayı ortalama 1,5 kez geçer (yani O (N)). Düğümler arasında yalnızca minimum sayıları geçirirseniz bunu bile geçebilirsiniz (örneğin, düğüm 1'de 100 sayı varsa ve düğüm 2'de 150 sayı varsa, düğüm 2, düğüm 1'e 25 numara verebilir).
Dağıtım hakkında daha fazla bilginiz yoksa, burada O (N) 'den daha iyisini yapabileceğinizden şüpheliyim, çünkü elementleri en az bir kez saymanız gerekiyor.