Sağ ve soldaki medyan ve elemanları etkili bir şekilde seçme


14

Bir dizi olduğunu varsayalım arasında K kodlayıcılar.S={a1,a2,a3,,aN}N

Her Şifrelik reytinge olan ve altın madalya sayısı E i , şu ana kadar kazanmıştı.RiEi

Bir Yazılım Şirketi, bir uygulama geliştirmek için tam olarak üç kodlayıcı kiralamak istemektedir.

Üç kodlayıcı kiralamak için aşağıdaki stratejiyi geliştirdiler:

  1. İlk olarak kodlayıcıları artan derecelerde ve azalan altın madalya düzeninde düzenlerler.
  2. Bu düzenlenmiş listeden, orta kodlayıcıların üçünü seçerler. Örneğin, düzenlenmiş listesi ise, kendileri tarafından seçilen ( a 2 , bir 3 , bir 1 ) kodlayıcılar.(a5,a2,a3,a1,a4)(a2,a3,a1)

Şimdi bu görev için bir program yazarak şirkete yardım etmeliyiz.

Giriş:

İlk satır içerir , yani kodlayıcı sayısı.N

Daha sonra, ikinci hat değerlendirme içerir ve i inci kodlayıcı.Rii

Üçüncü satır, kodlayıcı tarafından doldurulan altın madalya sayısını içerir .i

Çıktı:

Şirketin seçeceği üç kodlayıcı tarafından kazanılan altın madalyaların toplamını içeren yalnızca bir satır görüntüler.


3
Bu yüzden daha yüksek puan alan kodlayıcılar her zaman daha az madalya kazanırlar ?? Değilse, sıralamak için gerçekte hangi düzeni kullanıyorsunuz?
JeffE

Yanıtlar:


16

kn/2,n/21,n/2+1


6
İsterseniz, medyanı bulmak için seçim algoritmasını bir kez çalıştırabilir ve ardından sağ ve sol bölümlerde minimum ve maksimum değerleri tek bir geçişte bulabilirsiniz.
Zach Langley

@Sid @ Zach Langley Merhaba, lütfen Pseudo Code'u sağlayabilir misiniz. Wiki paedia ile gitti ama anlamak biraz zor geliyor.Yani lütfen PseudoCode'u sağlayın Çok teşekkürler!
Jack

@Jacksort'un nasıl çalıştığını biliyor musunuz? Rastgele seçim algoritması esasen aynıdır, ancak her bir pivotun sadece bir tarafındaki çentikler.
Zach Langley

6
@Jack: Seçim algoritmalarındaki (Sid'in cevabına bağlanan) wikipedia makalesi yalancı kod içeriyor. Google da çalışıyor.
JeffE

@Sid :: wiki algoritmasını okudum (Bölüm tabanlı genel seçim algoritması). Seçme fonksiyonunu üç kez k = n / 2, k = n / 2-1, k / 2 ile çağırmamız gerekiyor. işlev select çağrılırken sol, sağ değeri.Ayrıca bölüm işlevinde, bölüm Dizini'nin val değeri ne olacaktır.
Jack
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.