You are on page 1of 3

Complexiteit Huiswerkopgave 3

a.
int ndegrootte(int a[], int n){
int i = 2*n;
int j = 4*n;
int ngrootste = 0;

while( i > 0 && j > 0){


ngrootste++;
if(a[i] > a[j]){
if(ngrootste == n)
return a[i];
else
i--;
}
else{
if(ngrootste == n)
return a[i];
else
j--;
}
}
}

b. Zie laatste pagina

c. Het n-de getal zal altijd tussen de laatste n getallen van de twee deelrijtjes zitten aangezien deze
van klein naar groot gesorteerd zijn. De eerste n getallen van de deelrijtjes zijn dan nooit kandidaat-
oplossingen. Er zijn dus 2n kandidaten voor de n-de in grootte.

d.

Voor elk algoritme dat dit probleem oplost door middel van vervolg vergelijkingen geldt dat in een
worst case minstens het volgende aantal vergelijkingen wordt gedaan:

⌈𝑙𝑔𝑛⌉ + 1

Aangezien de algoritmes werken door middel van array vergelijkingen kan een beslissingsboom
voor elk algoritme gegeven worden voor elk algoritme dat de werking van de algoritmes beschrijft
op elke mogelijke invoer.

Voor een beslissingsboom geldt het volgende:

ℎ ≥ ⌈𝑙𝑔𝑏⌉
Waarbij h de hoogte van de boom is en b het aantal bladeren. Het aantal vergelijkingen dat gedaan
wordt in een worst case geval is gelijk aan h.

Bij c is al gezegd dat er 2n mogelijke kandidaat oplossingen zijn. Elk blad stelt een oplossing voor.
Elke oplossing moet minstens een keer voorkomen, aangezien het algoritme voor elk mogelijk
invoerrijtje moet gelden. Dit betekent dus het volgende:
𝑏 ≥ 2n

Dus het aantal vergelijkingen dat in een worst case geval minstens gedaan wordt is dan:

ℎ ≥ ⌈𝑙𝑔2n⌉ → ℎ ≥ ⌈𝑙𝑔𝑛⌉ + 𝑙𝑔2 → ℎ ≥ ⌈𝑙𝑔𝑛⌉ + 1

⌈𝑙𝑔𝑛⌉ + 1is dus inderdaad een ondergens voor de worst case complexiteit

e. Het aantal kandidaat antwoorden verandert niet, daardoor blijft de ondergrens nog steeds gelden.

f. Alhoewel ⌈𝑙𝑔𝑛⌉ + 1 ≤ 𝑛bestaat de mogelijkheid dat er een scherpere ondergrens gevonden kan
worden. Er kan dus niet gezegd worden dat het algoritme uit a niet optimaal is. Het enige dat
gezegd wordt is dat er minstens ⌈𝑙𝑔𝑛⌉ + 1vergelijkingen gedaan worden door een algoritme dat dit
probleem oplost door arrayvergelijkingen.

You might also like