DataGhost schreef op zaterdag 4 december 2021 @ 14:39:
[...]
Als het gaat om grote O-notatie van looptijden maakt de omgeving bijna niks meer uit

Ik heb een andere oplossing uit dit topic getest op mijn nieuwe input en dat duurde ruim 33 minuten

Die van Kazu heb ik moeten aanpassen en die gaf na 25 seconden het verkeerde antwoord, dus dat ligt of aan mij of niet. Met de "verkeerde aanpak" ben je in ieder geval een orde van grootte (of twee) langer bezig en dan gaat geen snelle CPU je helpen. Ook staat in about van AoC dat alle oplossingen maximaal 15 seconden nodig hebben op 10 jaar oude hardware. Bij in ieder geval de wedstrijden waaraan ik heb meegedaan (BAPC en NWERC) was algoritmische complexiteit van zeer groot belang en moest je oplossing eigenlijk binnen een paar seconden eruit komen rollen anders werd 'ie niet goedgerekend.
Oh boy... Ik had ooit een oplossing geschreven die perfect werkte, maar toen we die in productie hadden gezet had die niet de verwachte performance. De hoeveelheid RAM was niet voldoende waar door het OS geheugen ging pagen. En dat realiseerde ik me pas toen we de interne cache op grote 0 zetten. Zonder paging deed het systeem het binnen 45 seconden ipv 900 seconden. Zelfs bij het testen van kleinere oplossing (zonder paging) was het systeem sneller. Les toen was: RAM (en paging) vermijden als je het met de CPU-cache ook kan zelfs al kost het meer CPU cycles.
En recentelijk had ik een algorithme geschreven waarbij ik er van uit ging dat er meerdere cores aanwezig waren. Dat had die wel op acceptatie, maar niet op productie. Dus daarbij laat ik de cache resultaten opslaan in de database. Toen ging de response tijd van 30 seconden terug naar 0.1 seconde.
Wat ik probeer te zeggen is dat de omgeving wel degelijk een grote invloed heeft op wat je schrijft.
Gezien de huidige datasets zeer klein zijn is naiefe oplossing in mijn ogen vaak ook de meest pragmatisch.
Als ik jouw code zo zie (nofi, qua code prima maar qua tijdscomplexiteit ziet het er niet heel snel uit) wil ik je daarom uitdagen om het binnen 15 seconden te laten lopen op welke hardware dan ook

Misschien dat je daar wel meer zin van krijgt om het "netjes te maken"

No offense taken. Het netjes maken en optimaliseren doe ik wanneer nodig is. Mijn grootste ergernis is telkens de parser. Daar jeuken mijn handen elke keer.
Edit: hoewel snelle code meestal niet heel netjes/duidelijk is voor een lezer. Maar het kan wel.
Absoluut, maar zoals een beroemde schrijfer ooit zei: Sorry voor deze lange brief, ik had weinig tijd.
"Doubt—the concern that my views may not be entirely correct—is the true friend of wisdom and (along with empathy, to which it’s related) the greatest enemy of polarization." -- Václav Havel