Algorytm plecakowy zachłanny - kilka pytan

0

Nie rozumie kilku rzeczy w tym kodzie z wykładów. Program pakuje w pierwszej kolejności najcenniejsze rzeczy.
Jakim cudem " if (!rozw[i]) " sie wykonuje, skoro "rozw[i]" wszystko jest false ? Gdzie w programie dodaje sie rzeczy do tej tablicy ?

package aisd_lab4.zad1;

public class AISD_Lab4Zad1 {

    final static int N = 6; // liczba przedmiotów
    final static int MAX_V = 10; // objetość plecaka
    final static int[] V = {2, 6, 3, 3, 1, 2}; // objetości przedmiotów
    final static int[] W = {4, 6, 5, 10, 2, 7}; // wartości przedmiotów

    public static void pakujCenne() {
// tablica na optymalny podzbior
        boolean[] rozw = new boolean[N];
        for (int i = 0; i < N; i++) {
// Na poczatku nic nie zostalo zabrane (pusty plecak)
            rozw[i] = false;
        }
        int sumW = 0;
        int sumV = 0;
        while (true) {
            int maxW = 0;
            int maxPoz = -1;
// Szukamy najcenniejszego przedmiotu, ktory jeszcze nie zostal zabrany
            for (int i = 0; i < N; i++) {
// jesli jeszcze nie zabrany
                if (!rozw[i]) {
                    if ((sumV + V[i] <= MAX_V) && (W[i] > maxW)) {
                        maxW = W[i];
                        maxPoz = i;
                    };
                }
            }
            if (maxPoz > -1) {
                rozw[maxPoz] = true;
                sumW = sumW + W[maxPoz];
                sumV = sumV + V[maxPoz];
            } else {
                break;
            }
        }
        System.out.println("Wartosc optymalnie zapakowanego plecaka: " + sumW);
        System.out.print("Przedmioty w plecaku: ");
        for (int i = 0; i < N; i++) {
            if (rozw[i]) {
                System.out.print(i + " ");
            }
        }
        System.out.println();
    }
    
      public static void main(String[] args) {
      pakujCenne();
    }
}
1

rozw[i] == false => !rozw[i] == true => if (!rozw[i]) się wykonuje.
Albo inaczej mówiąc if (!rozw[i]) znaczy jeśli rozw[i] jest false wykonaj.

0

A wytłumaczy mi ktoś jeszcze po co jest ta zmienna "maxPoz", jakie ma znaczenie ? Co ona oznacza maxymalną pozycje, ale czego ?

0

pozycja (indeks w tablicy) ostatnio wybranego przedmiotu

1 użytkowników online, w tym zalogowanych: 0, gości: 1