Skutecznie wybierając medianę i elementy po jej lewej i prawej stronie


14

Załóżmy, że mamy do zestawu na N koderów.S.={za1,za2),za3),,zaN.}N.

Każdy Coders ma ocenę liczbę złotych medali E i , które do tej pory zdobyli.Rjamija

Firma programistyczna chce zatrudnić dokładnie trzech programistów do opracowania aplikacji.

Aby zatrudnić trzech programistów, opracowali następującą strategię:

  1. Najpierw układają kodery w kolejności rosnącej i malejącej względem złotych medali.
  2. Z tej uporządkowanej listy wybierają trzy środkowe kodery. Na przykład, jeśli lista jest umieszczony wybierają ( 2 , 3 , A 1 ) koderów.(za5,za2),za3),za1,za4)(za2),za3),za1)

Teraz musimy pomóc firmie, pisząc program do tego zadania.

Wejście:

Pierwszy wiersz zawiera , tj. Liczbę koderów.N.

Potem drugi wiersz zawiera wskaźniki od I th koder.Rjaja

Trzecia linia zawiera liczbę złotych medali zgromadzonych przez tego programistę.ja

Wynik:

Wyświetl tylko jedną linię, która zawiera sumę złotych medali zdobytych przez trzech programistów, których wybierze firma.


3
Więc wyżej oceniani koderzy zawsze zdobywają mniej medali? Jeśli nie, to jakiej kolejności faktycznie używasz do sortowania?
JeffE

Odpowiedzi:


16

Jest to problem wyboru tego najmniejszego elementu z listy, rozwiązany przez klasę algorytmów zwanych Algorytmami Selekcji . Istnieją deterministyczne algorytmy liniowego wyboru czasu, dzięki czemu problem można rozwiązać w czasie liniowym, wybierając n / 2 , n / 2 - 1 , n / 2 + 1 najmniejsze elementy z oryginalnej nieposortowanej listy.kn/2,n/21,n/2+1


6
Jeśli chcesz, możesz raz uruchomić algorytm wyboru, aby znaleźć medianę, a następnie znaleźć minimum i maksimum w prawej i lewej partycji odpowiednio za jednym zamachem.
Zach Langley,

@Sid @ Zach Langley Cześć, czy możesz podać kod pseudo. Przeszedłem przez wiki paedia, ale wydaje się to trudne do zrozumienia. Więc możesz podać kod pseudo Dziękujemy bardzo!
Jack

@Jack Czy wiesz, jak działa Quicksort? Algorytm losowego wyboru jest zasadniczo taki sam, z tym wyjątkiem, że powtarza się tylko po jednej stronie każdej osi obrotu.
Zach Langley,

6
@Jack: Artykuł w Wikipedii na temat algorytmów wyboru (połączony w odpowiedzi Sida) zawiera pseudokod. Google również działa.
JeffE

@Sid :: Czytam algorytm wiki (ogólny algorytm selekcji oparty na partycjach). Czy musimy trzy razy wywoływać funkcję wyboru z k = n / 2, k = n / 2-1, k / 2. Również to, co będzie wartość left, right podczas wywoływania funkcji select. Również w funkcji partycji, jaka będzie wartość indeksu partycji.
Jack
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.