Volledige versie bekijken : problemen met bedenken van algo's



rommeke
23 March 2010, 18:28
Besten

Ik ben tegenwoordig vooral bezig met programmeren in c#, php en dergelijke.
Ik ondervind aan mezelf dat ik nogal veel tijd nodig heb om een oplossing te bedenken voor een gesteld probleem.

Daarom zou ik graag wat tips of advies hebben ivm met het opstellen van een algoritme.

Mvg

Rommeke

ultddave
24 March 2010, 01:33
Hetgeen ik meestal doe is:
1 - In de eerste plaats ga ik het algoritme vereenvoudigen en proberen te linken aan algoritmes die ik al ken. (Naarmate je meer en meer programmeert is dat uiteraard makkelijker.)

Wat ik hiermee bedoel is dus dat als je bijvoorbeeld een algoritme moet schrijven dat een aantal strings alfabetisch uitschrijft. Dan ga je dat probleem normaal gezien linken aan het 'sorteer' probleem. Want voor dingen in alfabetische volgorde uit te schrijven, moeten ze gesorteerd zijn.

Meestal ga je die problemen linken aan wiskundige problemen of vraagstukken. Een voorbeeld: http://nl.wikipedia.org/wiki/Handelsreizigersprobleem .
http://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Weighted_K4.svg/600px-Weighted_K4.svg.png

Het probleem gaat zo:

Als er 4 steden gegeven zijn die een handelsreiziger moet bezoeken, samen met de afstand tussen ieder paar van deze steden, vind dan de kortste weg die kan worden gebruikt, waarbij iedere stad precies eenmaal wordt bezocht.

Dit vraagstuk lijkt in de eerste plaats geen echt nut te hebben. Maar als je er wat over nadenkt kan je dit voor veel dingen gebruiken. Bijvoorbeeld voor de kortste weg te berekenen met de GPS.

PS: Voor dit probleem zijn er verschillende mogelijke oplossingen met elk voor -en nadelen. ;)

2 - Het probleem op papier schrijven met simpele waarden.

Stel dat je bijvoorbeeld een sorteer algoritme moet schrijven voor een tabel van 10.000 getallen. Dan ga ik dat eerst uitwerken op papier met 4 getallen tussen -5 en 5. Door wat te testen op papier krijg je meestal al een goed idee waar je moet op letten en hoe je het algoritme kan implementeren.

Of bij dat handelsreiziger probleem van hierboven, ga je uiteraard niet direct iets proberen uit te werken met 7000 steden. Als je het algoritme wilt vinden, begin je best met kleine invoerwaarden.

3 - Als ik al een idee heb hoe ik het ga implementeren, ga ik kijken op internet of het algoritme misschien al bestaat. Want als ik dat kan overnemen en aanpassen, bespaar ik meestal veel tijd uit.

4 - Het algoritme implementeren. Het is best om goed te kijken welke libraries beschikbaar zijn. Sommige libraries maken het implementeren van bepaalde algoritmes makkelijker. En sommige algoritmes zijn al voorzien in bepaalde libraries. Sorteeralgoritmes bijvoorbeeld vind je meestal al in een library. ;)

5 - Testen. Zeer belangrijk. Gebruik extreme testwaarden om je programma te testen. Bijvoorbeeld bij dat sorteren van de rij kan je deze waarden gebruiken:
0 0 0 0 0
5 4 3 2 1
5 5 5 4 5
-4 5 3 0 -19

En dergelijke. ;)

6 - Optimaliseren. Kijken of het algoritme misschien verbeterd kan worden. Of misschien kan je bepaalde stukken code optimaliseren zodat het sneller uitgevoerd word. ;)

***************

Maar naarmate je meer en meer dingen programmeert, gaat alles makkelijker gaan.

In het proffesionele leven ga je meestal nog de tijdscomplexiteit berekenen van je algoritme (als het een belangrijk algoritme is - bijvoorbeeld de AI berekeningen bij computergames). Zodat je kan zien of het algoritme snel of traag is. En eventueel kan vergelijken met andere algoritmes.

En je kan uiteraard ook altijd informatie of hulp vragen op sites en fora indien nodig. Hier ook. ;)

Hier stel ik mijn vragen altijd als ik iets niet vind: http://www.codeguru.com/forum/forumdisplay.php?f=65

Mvg,
Dave