Poniżej znajduje się mój kod do próby zrozumienia mediany algorytmu median (za pomocą bloków wielkości 5). Rozumiem, jak zdobyć mediany danych wejściowych, ale nie jestem pewien, jak zakodować blok, aby kontynuować rekursję danych wejściowych, dopóki nie uzyska się median. Następnie po uzyskaniu tej mediany, nie jestem pewien, jak użyć go jako osi obrotu, aby wyrzucić bezużyteczne informacje, aby podzielić dane wejściowe. getMediansArray
zwraca tablicę o wielkości sufitu (input.length/5) i getMedians
po prostu zwraca medianę z tablicy (używane tylko w tablicach o długości < = 5).Niezrozumienie mediany algorytmu mediana dla znalezienia elementu k
public static int[] findKthElement(int[] input, int k) {
int numOfMedians = (int) Math.ceil(input.length/5.0);
int[] medians = new int[numOfMedians];
medians = getMediansArray(input, medians)
// (1) This only gets the first iteration of medians of the
// input. How do I recurse on this until I just have one median?
// (2) how should I partition about the pivot once I get it?
}
public static int[] getMediansArray(int[] input, int[] medians) {
int numOfMedians = (int) Math.ceil(input.length/5.0);
int[] five = new int[5];
for (int i = 0; i < numOfMedians; i++) {
if (i != numOfMedians - 1) {
for (int j = 0; j < 5; j++) {
five[j] = input[(i*5)+j];
}
medians[i] = getMedian(five);
} else {
int numOfRemainders = input.length % 5;
int[] remainder = new int[numOfRemainders];
for (int j = 0; j < numOfRemainders; j++) {
remainder[j] = input[(i*5)+j];
}
medians[i] = getMedian(five);
}
}
return medians;
}
public static int getMedian(int[] input) {
Arrays.sort(input);
if (input.length % 2 == 0) {
return (input[input.length/2] + input[input.length/2 - 1])/2;
}
return input[input.length/2];
}
Tytuł prosi o element kth, a pytanie prosi o dokładną medianę. Chciałbym sobie wyobrazić, że moja opinia jest konstruktywna (choć nie tak pouczająca jak adres URL, z którym się łączyłem). – Daniel