Oppgave 2
public static void perm(int[] a, int k) // permuterer a[k:a.length> { if (k == a.length - 2) Tabell.skrivln(a); // skriver ut else perm(a,k+1); // permuterer a[k+1:a.length> for (int i = k + 1; i < a.length; i++) { Tabell.bytt(a,k,i); // bytter om a[k] og a[i] if (k == a.length - 2) Tabell.skrivln(a); // skriver ut else perm(a,k+1); // permuterer a[k+1:a.length> Tabell.bytt(a,k,i); // bytter tilbake } } //Generisk versjon public static <T> void perm(T[] a, int k, Oppgave<T[]> o) { if (k == a.length - 2) o.utførOppgave(a); // utfører oppgaven else perm(a,k+1,o); // permuterer a[k:a.length> for (int i = k + 1; i < a.length; i++) { Tabell.bytt(a,k,i); // bytter om a[k] og a[i] if (k == a.length - 2) o.utførOppgave(a); // utfører oppgaven else perm(a,k+1,o); // permuterer a[k+1:a.length> Tabell.bytt(a,k,i); // bytter tilbake } } // perm
Oppgave 3
public static <T> void permLeksikografisk(T[] a, int k, Oppgave<T[]> o) { if (k == a.length - 1) o.utførOppgave(a); else { for (int i = k; i < a.length; i++) { // bytter og holder det sortert fra i+1 T temp = a[i]; for (int j = i; j > k; j--) a[j] = a[j-1]; a[k] = temp; permLeksikografisk(a,k+1,o); // flytter det tilbake slik det var temp = a[k]; for (int j = k; j < i; j++) a[j] = a[j+1]; a[i] = temp; } } } // Metoden kan kalles slik: Integer[] a = {1,2,3,4}; permLeksikografisk(a, 0, p -> System.out.println(Arrays.toString(a)));
Oppgave 4
public static <T> void perm2(T[] a, int n, Oppgave<T[]> o) { if (n == 1) o.utførOppgave(a); else { for (int i = 0; i < n; i++) { Tabell.bytt(a,i,n-1); perm2(a,n-1,o); Tabell.bytt(a,i,n-1); } } } // Metoden kan kalles slik: Integer[] a = {1,2,3,4}; perm2(a, a.length, p -> System.out.println(Arrays.toString(a)));
Oppgave 5 - 10
Løsning mangler.