Forumregels
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
Gebruikersavatar
Energyfellow
Artikelen: 0
Berichten: 122
Lid geworden op: zo 30 sep 2012, 12:01

Algoritmen T(n) berekenen while lus

Hallo,

Ik heb na lang zoeken het min of meer onder de knie gekregen hoe ik een for lus in pseudocode uit een algoritme moet omzetten naar een som (
\(\sum \)
) en hieruit dan de Thèta n (T(n)) berekenen.

Maar ik worstel nu met het volgende: hoe doe ik dit met while lus?

Kan er mij iemand helpen hij het oplossen van onderstaande twee oefeningen?

Opdracht: bereken T(n).
While
While 825 keer bekeken
Dank bij voorbaat,

Roger
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Algoritmen T(n) berekenen while lus

Wat betekent T(n) ?
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
Gebruikersavatar
Energyfellow
Artikelen: 0
Berichten: 122
Lid geworden op: zo 30 sep 2012, 12:01

Re: Algoritmen T(n) berekenen while lus

We noteren voor een inputgrootte n de uitvoeringstijd T van het algoritme als een functie van n, dus als T(n).
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Algoritmen T(n) berekenen while lus

Beide oefeningen gaan op dezelfde manier.

Vraag jezelf het volgende af: hoe vaak wordt de buitenste lus uitgevoerd?
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
Gebruikersavatar
Energyfellow
Artikelen: 0
Berichten: 122
Lid geworden op: zo 30 sep 2012, 12:01

Re: Algoritmen T(n) berekenen while lus

Volgens mij wordt die 'k' keer uitgevoerd.
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Algoritmen T(n) berekenen while lus

Klopt.

De binnenste lus wordt duidelijk j keer uitgevoerd. Je krijgt dus twee sommaties, één met een index die loopt van 1 tot k en één die loopt van 1 tot j.

Probeer dit eens uit te schrijven met sommatie tekens.
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
Gebruikersavatar
Energyfellow
Artikelen: 0
Berichten: 122
Lid geworden op: zo 30 sep 2012, 12:01

Re: Algoritmen T(n) berekenen while lus

Ik denk dat dit zou moeten kloppen:
\(\sum_{i=1}^{k}\sum_{i=1}^{j}1\)
Waarbij
\(\sum_{i=1}^{k}\)
we hier die while lus beschrijven.
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Algoritmen T(n) berekenen while lus

Klopt, al moet je bij die eerste sommatie van 1 tot k eigenlijk een andere index dan i gebruiken, bijvoorbeeld m.

Volgende stap: de sommatie van 1 tot j kun je gemakkelijk vereenvoudigen.
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
Gebruikersavatar
Energyfellow
Artikelen: 0
Berichten: 122
Lid geworden op: zo 30 sep 2012, 12:01

Re: Algoritmen T(n) berekenen while lus

Dus
\(\sum_{i=1}^{j}\)
= j + 1 - 1 = j.

Dan krijgen we:
\(\sum_{a=1}^{k} j\)
= j * k waarbij j = n, dat geeft ons dan n * k.

Als we dat eens neerpennen met links n en rechts k:

1 3

2 9

3 27

= Log(n) k, we hebben hier dus een logaritmisch tijdverloop.
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Algoritmen T(n) berekenen while lus

Energyfellow schreef: wo 03 apr 2013, 14:05
Dan krijgen we:
\(\sum_{m=1}^{k} j\)
= j * k
Hier ga je iets te kort door de bocht! j is namelijk afhankelijk van m!

hoe kun je j als functie van m schrijven?
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
Gebruikersavatar
Energyfellow
Artikelen: 0
Berichten: 122
Lid geworden op: zo 30 sep 2012, 12:01

Re: Algoritmen T(n) berekenen while lus

Ik denk dat je het volgende bedoelt:
\(\sum_{i=1}^{k}3^{i}\)
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Algoritmen T(n) berekenen while lus

Hint:

De eerste keer dat de buitenste lus wordt doorlopen hebben we m=1 en j=n

De tweede keer dat de buitenste lus wordt doorlopen hebben we m=2 en j=...

etc..
Energyfellow schreef: wo 03 apr 2013, 14:22
Ik denk dat je het volgende bedoelt:
\(\sum_{i=1}^{k}3^{i}\)
inderdaad
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Algoritmen T(n) berekenen while lus

Ben je bekend met meetkundige rijen?
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
Gebruikersavatar
Energyfellow
Artikelen: 0
Berichten: 122
Lid geworden op: zo 30 sep 2012, 12:01

Re: Algoritmen T(n) berekenen while lus

Nee, maar wat niet is ik kan komen hé ;) .

Maar voor de tweede heb ik wel een een logaritmische tijdeenheid hé.
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Algoritmen T(n) berekenen while lus

Ah, ja, inderdaad, voor de tweede opgave klopt het wel wat je zei.

De sommatie bij de eerste opgave kun je verder uitwerken met:

http://nl.wikipedia.org/wiki/Meetkundige_rij

En de laatste stap is dan het uitschrijven van k als functie van n.
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }

Terug naar “Wiskunde”