SORU
3 NİSAN 2010, CUMARTESİ


Bir milyar sayıların medyan hesaplamak

Eğer bir milyar numaraları ve yüz bilgisayar varsa, bu sayıların medyan bulmak için en iyi yolu nedir?

Var olan tek çözümdür:

  • Set bilgisayarlar arasında eşit olarak bölünmüş.
  • Bunları sıralamak.
  • Her set için ortanca bulabilirsiniz.
  • Ortanca setleri çeşit.
  • En yüksek medyan en düşük aynı anda iki set birleştirme.

m1 < m2 < m3 ... ilk Set1 Set2 birleştirme ve sonuç kümesi varsa bütün numaraları Set12 medyan daha düşük () birleştirilmiş iptal edebiliriz. Zaman herhangi bir noktada eşit büyüklükte ayarlar var. Bu arada bu paralel bir şekilde yapılması. Herhangi bir fikir?

CEVAP
3 NİSAN 2010, CUMARTESİ


Ah, beynim vitese başladı, mantıklı bir önerim var artık. Muhtemelen bu bir röportaj olsaydı ama boşver: çok geç

Makine 1 olacaktır, denir "kontrol makinesi", hatırım için, ya da başlayacak olan tüm verileri, ve gönderir eşit parsel için diğer 99 makineleri, ya da başka bir veri başlar dengeli dağılmış arasındaki makine ve gönderir 1/99 kendi veri için her Diğerleri. Bölümleri eşit olması için, sadece kapatın.

Birbirimizi makine veri sıralar ve alt değerleri ilk bulgu yana tavır koyan bir şekilde yapar. Örneğin, her zaman ilk bölümü [*] alt kısmını quicksort sıralama. Verileri geri mümkün olduğunca çabuk artan sıralama kontrol makineye biraz) deney sıralama devam etmesini (kullanarak zaman uyumsuz G / Ç, ve muhtemelen Nagle ile: yazar.

Kontrol makinesi 99 yönlü bir gelen verileri birleştirme gerçekleştirir, ama birleştirilmiş veri, sadece gördü değerlerin sayısını tutmak atar. Milyarda 1/2 ve 1/2 milyar artı oneth değerleri ortalama olarak medyan hesaplar.

Bu "" sorun. yavaş muzdarip Algoritma olamaz her değeri medyan az kadar tam bir sıralama makine tarafından gönderildi. Böyle bir veri değeri kendi parseli içinde oldukça yüksek olacak makul bir şans var. Böylelikle ilk bölümleme verileri tam, tahmini süre. bu arada zaman sıralama 1/99 veri ve geri göndermek için kontrol bilgisayar ve zaman kontrol etmek için okumak 1/2 verileri. "Arada" bir yerde en fazla ve bu kez, max muhtemelen yakın toplamı arasında.

İçgüdülerim bu sıralama daha hızlı olması için bir ağ (bırak sadece medyan seçme) üzerinden veri göndermek için çok hızlı güzel bir ağ olması gerekiyor. Eğer RAM eşit erişim ile 100 çekirdek varsa Eğer ağ anlık olarak kabul edilebilir eğer iyi bir umudu, örneğin olabilir verileri içeren.

Ağ g/Ç bağlı olması muhtemeldir beri, en azından verileri tekrar kontrol makine geldiğiniz için oynayabilirsiniz bazı hileler olabilir. Göndermek yerine, örneğin, "1,2,3,.. 100", belki de bir sıralama makinesine bir mesaj anlamı gönderebilir "100, 101'den daha az değerler". Denetim makine olabilir gerçekleştirmek bir değişiklik birleştirme, eden bulur en azından tüm bu üst-Aralık değerleri, o diyor tüm ayırma makineleri ne oldu, bunlar (a) denetim makine kaç değerleri için "Sayın" altındaki değeri, ve (b) özgeçmiş göndermek onların sıralanmış veri noktası.

Daha genel olarak, kontrol makinesi 99 sınıflandırma makinaları ile oynuyor muhtemelen meydan-yanıt zekice bir tahmin oyunu var.

Bu basit ilk sürümü kaçınan makineler arasında gidiş dönüşlü olsa da içerir. Gerçekten bilmiyorum nasıl kör-tahmin onların göreceli performans, ve o zamandan beri ticaret-off vardır karmaşık, sanırım orada daha iyi çözümler orada daha bir şey düşüneceğim kendimi varsayarsak bu hiç gerçek bir sorun.

[*] mevcut izin yığın - önce hangisini seçtiğiniz takdirde(N) ekstra boşluk yok olsaydı zaten kısıtlı. Ama eğer yeterli ekstra alan, seç, ve eğer yeterli alan yok en azından ne yapmak için kesilmiş bazı köşe yaparak küçük bir parçası ilk önce birkaç bölüm.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Facebook Developers

    Facebook Dev

    24 ŞUBAT 2009
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • The Exploiteers

    The Exploite

    4 Ocak 2011