Aşağıdaki algoritma / sorun için bibliyografik referanslar arıyorum: "BiSelect" veya "t-ary Select" veya "Sıralı Diziler Birliği'nde Seç" olarak adlandırdım, ama sanırım daha önce başka bir ad altında tanıtıldı?
Sorun
Aşağıdaki sorunu düşünün:
Verilen ayrık sıralı diziler , ilgili boyutları arasında ve bir tamsayıdır , ne bunların sıralanmış birliğin inci değeri ?
Çözümler
K = 2 ise zamanında çalışan çok basit ve zarif bir algoritma vardır : k = 2 ise , A_1 [t / 2] ile A_2 [t / 2] ve A_1 [t / 2..t] ve A_2 [1..t / 2] veya A_1 [1..t / 2] ve A_2 [t / 2..t] 'de buna göre her iki durumda da parametre t / 2 (ve bazı küçük optimizasyonlar N_1 veya n_2 daha küçüktür t ).
Bu , [1.k] 'de i \ için A_i [t / k] değerlerinin medyanını hesaplamaya dayalı olarak, daha büyük k değerleri için O (k \ lg t) zamanında çalışan biraz daha karmaşık bir algoritmaya genelleme yapar : t / k en küçük elemanlar, A_i [t / k] orta değerden daha küçük olduğu k / 2 dizilerinde daha fazla göz ardı edilebilir ve [tt / k ..] ' deki sıra öğelerinin k / 2'de daha fazla göz ardı edilebilir her dizide t'nin yarıya inmesiyle sonuçlanan diğer diziler (ve medyan için O (k) maliyeti ).
Referanslar?
Çözümlerimden memnunum, ancak sorunun (ve çözümünün) zaten bilindiğini düşünüyorum. Medyanı hesaplamak için doğrusal zaman algoritması ile ilgilidir ( büyüklükteki grupları sıralayarak ve aracılarının ortancalarını geri çekerek), ancak biraz daha geneldir. Aarhus'ta (Danimarka) Madalgo'da ve daha sonra Stringology (Rouen) atölyesinde bazı kolejlere başarılı olmadan sordum: Daha bilgili birinin Stack Exchange'de yardımcı olabileceğini umuyorum ...
Motivasyonları
Bu soruna yönelik çözümlerin dizilerdeki Ertelenmiş Veri Yapısına uygulamaları vardır (gerçekten de, dizili dizilerin birleşmesi için ertelenmiş veri yapısında bir operatör olarak görülebilir); ve daha kıvrımlı bir şekilde, en uygun önek içermeyen kodların uyarlanabilir hesaplamasına.