Ik ben op het moment met een project van school bezig, een simulator van het een en ander. Een onderdeel daarvan is het berekenen van een route van punt A naar punt B. Ik heb zelf gekozen voor het gebruik van Waypoints, punten met een X, een Y, en een link naar zijn buur / buren.
Nu heb ik een recursieve functie geschreven die de snelste route uitrekent en deze opslaat als een LinkedList van Waypoints, welke het vehikel vervolgens gewoon af kan lopen. Tot zover werkt het.
Het probleem waar ik tegenaanloop is dat ik het ietsje optimaliseren wil. Door middel van het opslaan van de tijd in ms zie ik dat het berekenen van een route over 100 Waypoints ongeveer 300-600 ms duurt.
Om dit nu voor elke keer dat een route gereden moet worden te doen lijkt mij een beetje overkill, dus ik dacht, dat kan ik wel opslaan. Met andere woorden, ik op zoek naar een manier om een LinkedList op te slaan, met als indices de ID van het huidige en het ID van de doel-waypoint.
Klinkt eenvoudig, min of meer. Maar dat valt tegen
Het probleem waar ik echter tegenaan loop is nogal extreem geheugengebruik. Er zijn op het moment ~3000 waypoints, met veel snijden valt dit wel met een paar honderd terug te brengen, maar ook dat zal niet werken. De array die ik op het moment gebruik is een 3-dimensionale array, met als index 1 de bron ID, index 2 de doel ID, en index 3 is dan de lijst met Waypoints (de route, op het moment max 500).
Om nu alle mogelijke combinaties op te slaan van punt A naar punt B heb ik 3000*3000*500 = 4.500.000.000 Waypoints nodig, wat, natuurlijk, veel te veel is.
Om alles nu samen te vatten: Wat is de beste manier zijn om een LinkedList zodanig op te slaan dat hij terug te vinden is door een bron ID en een doel ID op te geven, waar in ieder geval de routes tussen 3000 waypoints op te slaan zijn, zonder dat het al te veel geheugen gebruikt?
(Ik heb ook al een hashTable gebruikt, maar daar kon ik geen goede index voor vinden. Het gebruiken van een string als index (met bv de bron id en doel id als index) werkte niet, omdat hij de String als een andere zag dan er al in zat)
(Ook heb ik al met een leraar overlegd, die stelde de array methode voor. Deze gebruikt echter veel te veel geheugen)
(Ik vraag niet om het uiteindelijke antwoord, ik wil op het moment alleen maar suggesties en dergelijke voor de opslag)
(En als laatste, ik kan ook wel doen dat hij gewoon elke keer de route opnieuw uitrekent; met een beetje geluk komt het bijna nooit voor dat er veel (>10) routes in een kloktik (van een seconde) uitgerekend hoeven te worden)