Competitive Programming Academy · Les

Cycli detecteren in simulaties

Vooruit springen wanneer de toestand zich herhaalt

Les 3 van 413 stappen

Cycli detecteren in simulaties is een gratis Competitive Programming Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Competitive Programming Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Competitive Programming Academy bevat in totaal 4 lessen.

Wanneer stappen zich herhalen

Sommige simulaties vragen naar de toestand na een enorm aantal stappen, bijvoorbeeld een biljoen. Eén voor één stappen zou nooit op tijd klaar zijn. ⏳

Toestanden zijn eindig

Als het aantal mogelijke toestanden beperkt is, moet de simulatie er uiteindelijk één opnieuw bezoeken. Vanaf dat moment herhaalt alles zich voor altijd in een cyclus.

Hoe een cyclus eruitziet

Het pad heeft een aanloop die naar de lus leidt, waarna de lus zich herhaalt. Als je de lus vindt, kun je miljarden stappen overslaan.

Onthoud waar je bent geweest

Sla elke toestand op in een woordenboek en koppel die aan het stapnummer waarop je haar voor het eerst zag. Als je haar opnieuw ziet, heb je de cyclus gevonden.

seen = {}

Vind de herhaling

Controleer vóór elke stap of de huidige toestand al in seen staat. Als dat zo is, heb je de lus zojuist gesloten.

if state in seen:
    start = seen[state]

Meet de cycluslengte

De lengte is het huidige stapnummer min het stapnummer waarop je deze toestand voor het eerst zag. Na zoveel stappen kom je precies bij de toestand terug.

length = step - seen[state]

Sla stappen over met modulo

Trek eerst de aanloop af en neem daarna het aantal resterende stappen modulo de cycluslengte. Nu hoef je nog maar een klein overgebleven stuk te simuleren.

rem = (N - start) % length

Werk de overgebleven stappen af

Voer de simulatie vanaf het begin van de cyclus alleen uit voor die resterende stappen. De eindtoestand komt dan precies overeen met stap N.

for _ in range(rem):
    state = step_fn(state)

Houd de toestand hasjbaar

Sleutels van een woordenboek moeten hasjbaar zijn, dus zet lijsten om in tupels voordat je ze opslaat. Een veranderlijke toestand kan geen sleutel zijn.

key = tuple(row)

Floyd zonder geheugen

Als toestanden te groot zijn om op te slaan, vindt de methode van Floyd met de schildpad en de haas een cyclus met twee verwijzingen en vrijwel geen extra geheugen.

Waarom dit de oplossing biedt

Cyclusdetectie verandert een onmogelijke lus van een biljoen stappen in een paar duizend stappen. Herhaling herkennen is de hele truc.

Korte controle

Je zag de huidige toestand voor het eerst bij stap s en bent nu bij stap t.

Samenvatting

Wanneer toestanden zich herhalen, registreer je elke toestand in een tabel, vind je de cycluslengte, sla je stappen over met modulo en simuleer je alleen de overgebleven stappen. 🚀

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Cycli detecteren in simulaties” gratis?

Ja — de volledige tekst van “Cycli detecteren in simulaties” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Competitive Programming Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Competitive Programming Academy bevat in totaal 4 lessen.

Wat leer ik in “Cycli detecteren in simulaties”?

Vooruit springen wanneer de toestand zich herhaalt Je oefent met Competitive Programming Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Competitive Programming Academy te beginnen?

Ervaring vooraf is niet nodig. Competitive Programming Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Cycli detecteren in simulaties”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Competitive Programming Academy?

Ja. Elke les over Competitive Programming Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Toestand modelleren en vooruitgaan
  2. Rasterwandelingen en richtingsvectoren
  3. Cycli detecteren in simulaties
  4. Lastige randgevallen beheersen
← Terug naar Competitive Programming Academy