SORU
19 Ocak 2013, CUMARTESİ


Bir yığın verimli çift çorap mı?

Dün temiz kuru çorap eşleştirme yapıyordum ve çok verimli değildir yapıyordum şekilde anladım. Naif bir arama — bir çorap toplama ve "kendi çifti bulmak için" kazık. yineleme yapıyordum Bu n/2 * n/4 = n üzerinde yineleme gerektirir2Ortalama /8 çorap.

Bir bilgisayar bilimcisi olarak ne yapabileceğimi düşünüyordum. (NlogN) O bir çözüm elde etmek için (boyut/renk göre/...) tabii ki aklıma geldi sıralama.

Karma veya başka bir yer değil çözümleri çoraplarımı çoğaltmak mümkün değil, çünkü bu bir seçenek değil, eğer yapabilseydim iyi olurdu (gerçi).

Bu yüzden, sorun temelde

Verilen bir kazık n çift çorap, içeren 2n eleman (varsayalım her çorap vardır tam olarak bir eşleştirme çifti), ne olduğunu en iyi şekilde eşleştirin onları verimli ile logaritmik ekstra alan? (Gerekirse bilgi miktarını hatırlamıyorum inanıyorum.)

Aşağıdaki yönlerini gideren bir cevap takdir edeceğim

  • Bir generalteorikçorap çok sayıda çözüm.
  • Çorap sayısını büyük değil, eşime inanmıyorum ve 30 çiftten fazla var. (Ve oldukça kolay çoraplarımı ayırt etmek ve onun; bu da kullanılabilir mi?)
  • element distinctness problem eşdeğer mi?

CEVAP
19 Ocak 2013, CUMARTESİ


Sıralama çözümler önerilmiştirsıralama biraz fazlaSiparişe gerek yok;biz sadece eşitlik grubuna ihtiyacı var.

Bu yüzdenkarmayeterince (ve daha hızlı).

  1. Çorap her renk içinbir yığın oluştururlar. Giriş sepet tüm çorap üzerinde yinelemeve renk kazık üzerine onları dağıtmak.
  2. Her kazık üzerinde yinelemebaşka bir ölçü ile dağıtın(örneğin desen) kazık ikinci bir set halinde
  3. Özyinelemeli olarak bu planı uygulamaküzerine tüm çorap dağıtılmış kadargörsel olarak hemen işlem çok küçük kazık

Özyinelemeli karma bölümlendirme bu tür aslında ya da büyük veri setleri üzerinde toplam katılmak karma karma gerektiğinde SQL Server tarafından yapılıyor. Bağımsız olan birçok bölümlere inşa giriş akımı dağıtır. Bu düzen, veri ve çoklu İşlemci keyfi tutarları doğrusal ölçekler.

Özyinelemeli dağıtım anahtarı (karma anahtar) bulabilirsiniz eğer bölümleme gerek yoksağlar kadar kovalarher bir bölüm çok hızlı bir şekilde işlenmesi için yeterince küçük. Ne yazık ki, çorap gibi bir özellik olduğunu sanmıyorum.

Her "" kolayca PairID % 10 (son basamak) göre 10 kova içine dağıtmak olabilir. PairİD adlı bir tamsayı vardı çorap varsa

Aklıma gerçek dünyadaki en iyi bölümlendirme yaratıyorkazık dikdörtgen: bir boyut renk, desen. Neden dikdörtgen? O(1) kazık erişim rastgele ihtiyacımız var çünkü. (3D cuboid bir de işe yarar, ama çok pratik değil.)

Güncelleme:

Ne hakkındaparalellik? Birden fazla insanlar çorap daha hızlı eşleşebilir?

  1. En basit parallization stratejisi birden fazla işçi giriş sepet almak ve kazık üzerine çorap koymak. Bu sadece o kadar - 100 kişi 10 kazık için kavga hayal ölçekler.Eşitleme maliyetleri(el-çarpışmalar ve insan iletişimi olarak kendini gösteriyor)verimlilik yok ve hızlı(Universal Scalability Law!). Bu eğilimlikilitlenmeleri? Her işçi bir seferde sadece tek bir kazık erişim gerekiyor çünkü. Sadece bir "" bir kilitlenme olamaz. kilitLivelocksmümkün olabileceğini insanlara kazık erişim koordinat nasıl bağlı. Sadece kart sadece ağ kablosu erişebilirsiniz belirlemek için fiziksel bir düzeyde bunu ağ kartları gibi random backoff kullanabilirler. Eğer NICs, gidiyorsa insanlar için de çalışması gerekir.
  2. Neredeyse süresiz ise teraziher işçi yığınları kendi belirledi. İşçiler daha sonra almak büyük parçalar çoraplar girdi sepeti (çok az çekişme olarak yapıyorlar nadiren) ve ihtiyaç duydukları şekilde senkronize zaman dağıtım çorap (çünkü onlar iş parçacığı yerel kazık). Sonunda, tüm işçileri kendi setleri kazık Birliği gerekiyor. Eğer işçiler bir form varsa O da yapılan(log (işçi başına işçi sayısı * basur)) olabilir inanıyorumtoplama ağacı.

Ne element distinctness problem? Makalede belirttiği gibi, eleman farklılığı sorunu O(N) çözülebilir. Bu aynı için bir çorap sorunu (O(N), Eğer ihtiyacın olan sadece bir dağıtım adım (önerilen birçok adım çünkü insanlar kötü hesaplamaları - bir adım yeter eğer dağıtmak md5(color, length, pattern, ...), yani birmükemmel karmanitelikler)).

Açıkçası, daha hızlı ulaşmış olduk O(N) Daha gitalt sınır optimal.

Çıkışları tamamen aynı (bir durumda, sadece bir boolean. olmasa da Diğer durumda, çorap çiftleri), asimptotik karmaşıklığı aynıdır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Goran Dimov

    Goran Dimov

    1 HAZİRAN 2014
  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006
  • Shameless Maya

    Shameless Ma

    24 Mayıs 2012