Løsningsforslag - oppgaver i Avsnitt 1.2.7


Oppgave 1

Permutasjoner med samme verdi førstSum antall
5 står først26
4 står først26
3 står først38
2 står først46
1 står først52

Gjennomsnittet:  (26 + 26 + 38 + 46 + 52)/120 = 188/120 = 2/3 + 2/4 + 2/5.

Her kommer alle de 120 permutasjonene av tallene 1 2 3 4 5 og for hver permutasjon er de tallene som er større enn det neste største foran markert med fet type:

     1 2 3 4 5    1 2 3 5 4    1 2 4 3 5    1 2 4 5 3
     1 2 5 3 4    1 2 5 4 3    1 3 2 4 5    1 3 2 5 4
     1 3 4 2 5    1 3 4 5 2    1 3 5 2 4    1 3 5 4 2
     1 4 2 3 5    1 4 2 5 3    1 4 3 2 5    1 4 3 5 2
     1 4 5 2 3    1 4 5 3 2    1 5 2 3 4    1 5 2 4 3
     1 5 3 2 4    1 5 3 4 2    1 5 4 2 3    1 5 4 3 2
     2 1 3 4 5    2 1 3 5 4    2 1 4 3 5    2 1 4 5 3
     2 1 5 3 4    2 1 5 4 3    2 3 1 4 5    2 3 1 5 4
     2 3 4 1 5    2 3 4 5 1    2 3 5 1 4    2 3 5 4 1
     2 4 1 3 5    2 4 1 5 3    2 4 3 1 5    2 4 3 5 1
     2 4 5 1 3    2 4 5 3 1    2 5 1 3 4    2 5 1 4 3
     2 5 3 1 4    2 5 3 4 1    2 5 4 1 3    2 5 4 3 1
     3 1 2 4 5    3 1 2 5 4    3 1 4 2 5    3 1 4 5 2
     3 1 5 2 4    3 1 5 4 2    3 2 1 4 5    3 2 1 5 4
     3 2 4 1 5    3 2 4 5 1    3 2 5 1 4    3 2 5 4 1
     3 4 1 2 5    3 4 1 5 2    3 4 2 1 5    3 4 2 5 1
     3 4 5 1 2    3 4 5 2 1    3 5 1 2 4    3 5 1 4 2
     3 5 2 1 4    3 5 2 4 1    3 5 4 1 2    3 5 4 2 1
     4 1 2 3 5    4 1 2 5 3    4 1 3 2 5    4 1 3 5 2
     4 1 5 2 3    4 1 5 3 2    4 2 1 3 5    4 2 1 5 3
     4 2 3 1 5    4 2 3 5 1    4 2 5 1 3    4 2 5 3 1
     4 3 1 2 5    4 3 1 5 2    4 3 2 1 5    4 3 2 5 1
     4 3 5 1 2    4 3 5 2 1    4 5 1 2 3    4 5 1 3 2
     4 5 2 1 3    4 5 2 3 1    4 5 3 1 2    4 5 3 2 1
     5 1 2 3 4    5 1 2 4 3    5 1 3 2 4    5 1 3 4 2
     5 1 4 2 3    5 1 4 3 2    5 2 1 3 4    5 2 1 4 3
     5 2 3 1 4    5 2 3 4 1    5 2 4 1 3    5 2 4 3 1
     5 3 1 2 4    5 3 1 4 2    5 3 2 1 4    5 3 2 4 1
     5 3 4 1 2    5 3 4 2 1    5 4 1 2 3    5 4 1 3 2
     5 4 2 1 3    5 4 2 3 1    5 4 3 1 2    5 4 3 2 1

Oppgave 2

  public static int antallNestMaks(int[] a)
  {
    if (a.length < 2)
      throw new IllegalArgumentException("Må ha a.length >= 2");

    int maksverdi = a[0], nestmaksverdi = a[1];
    if (maksverdi < nestmaksverdi)
    {
      maksverdi = a[1]; nestmaksverdi = a[0];
    }

    int antall = 0;

    for (int i = 2; i < a.length; i++)
    {
      if (a[i] > nestmaksverdi)
      {
        antall++;  // testen er sann

        if (a[i] > maksverdi)
        {
          nestmaksverdi = maksverdi;  // ny nest størst
          maksverdi = a[i];           // ny størst
        }
        else
        {
          nestmaksverdi = a[i];  // ny nest størst
        }
      }
    }

    return antall;

  } // antallNestMaks

Oppgave 3

Det beste tilfellet får vi hvis de to største ligger først. Da trengs én sammenligning for å avgjøre hvem av dem som er størst. Deretter vil sammenligningen a[i] > nestmaksverdi bli utført n - 2 ganger og er usann hver gang. Tilsammen n - 1 sammenligninger.