|
Inpakken!Een oude programmeeropgave bij de Programmeerwedstrijden voor Universiteitsteams luidt als volgt:
Om in het nieuws te komen heeft kunstenaar Christo
besloten een hele stad in te pakken! Om de kosten zoveel mogelijk
te beperken, probeert hij een methode te vinden die
zo weinig mogelijk materiaal gebruikt.
De invoer.
Op de eerste regel staat het aantal gebouwen (1..100).
Vervolgens op iedere regel één gebouw, gegeven door de
plaats van de linkerkant, rechterkant en hoogte.
Dit zijn gehele getallen die liggen tussen 0 en 10000.
De uitvoer.
Op drie decimalen nauwkeurig de lengte van
het touw dat tenminste nodig is om de stad in te pakken.
|
We geven twee mogelijke oplossingen voor dit probleem:
inpakken en
strak trekken,
in de literatuur beter bekend als
Jarvis' March
en
Graham's Scan
.
Bij inpakken trekken we in gedachten het touw van links naar rechts over de gebouwen heen. Op elk moment kijken we vooruit en bepalen we het volgende punt waar het touw de gebouwen zal raken. Dat is steeds het punt dat we onder de grootste hoek vooruit zien. Bij strak trekken leggen we het touw naar het volgende punt, en kijken dan achteruit om te zien of er geen `kuiltje' ontstaat waaruit we het touw strak kunnen trekken. |
|
voordracht: pdf file
Wrapped Reichstag, Berlin 1971-95
|
Hoewel het tweede algoritme wat minder elementair oogt dan het eerste,
kunnen we beredeneren dat het bij grotere aantallen gebouwen
sneller zal werken.
Ook de ideeen van andere manieren om het probleem aan te pakken komen aan bod: quick hull een zogenaamde heuristiek die in de praktijk meestal snel werkt, maar niet gegarandeerd eficient rekent, en divide and conquer een algemene aanpak om problemen `recursief' op te lossen die ook hier toepasbaar is. Het probleem is dan ook geen speelgoed, maar staat in de theorie bekend als convex hull, en is belangrijk in de robotica en de computergrafiek. |
up up2 |