-
Neueste Beiträge
Archive
- Juni 2019
- Januar 2019
- Juli 2018
- Juni 2018
- Januar 2017
- Dezember 2016
- August 2016
- Mai 2016
- April 2016
- März 2016
- Februar 2016
- Dezember 2015
- November 2015
- Oktober 2015
- September 2015
- August 2015
- April 2015
- Februar 2015
- Januar 2015
- August 2014
- Juli 2014
- Mai 2014
- März 2014
- Februar 2014
- Januar 2014
- Dezember 2013
- November 2013
- Oktober 2013
Kategorien
Meta
Monatsarchive: November 2015
Hase-Igel-Algorithmus
Mein Chef bat mich, Endlosschleifen zu vermeiden, die in einem alten Programm gelegentlich auftauchen, wenn die Daten “unsauber” eingegeben wurden. Die zugrundeliegende Datenstruktur ist eine einfach verkettete Liste. Im folgenden skizziere ich einen Weg, das zu ermöglichen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
/** * Hase und Igel * * siehe https://de.wikipedia.org/wiki/Hase-Igel-Algorithmus * * Dies ist der Startpunkt, um die Hase-Igel-Thematik an drei Beispielen * zu zeigen. Eine Liste enthält einen Zirkel, eine andere nicht und * schließlich wird ein Grenzfall ausprobiert: Eine Liste mit nur einem * Element.<br> * <br> * Diese Implementierung ist anders als die im Artikel bei Wikipedia. Aber * die zugrundeliegende Idee ist diesselbe. */ public class Main { public static void main ( String[] args ) { /* ------------------ Vorbereitung ---------------------------------- */ /* Dokumenten-Kette aufbauen ... */ Document[] d = new Document[6]; for (int i = 0; i<6; i++) { d[i] = new Document (); d[i].id = Integer.toString ( i ); } for (int i = 0; i<5; i++) { d[i].next = d[i+1]; } d[5].next = d[1]; // ... mit Zirkel!! /* Rekursive Funktion aufrufen; Zirkel vorhanden; ------------------- */ printAnzahlDerRekursionen ( d[0] ); /* ------------------ anderes Szenario ------------------------------ */ resetHaseIgelStatics (); d[5].next = null; // Zirkel entfernen; printAnzahlDerRekursionen ( d[0] ); /* ------------------ anderes Szenario ------------------------------ */ resetHaseIgelStatics (); d[0].next = null; // Liste endet nach dem ersten Element; printAnzahlDerRekursionen ( d[0] ); } private static void resetHaseIgelStatics () { HaseIgel.cnt = 0; HaseIgel.hase = null; HaseIgel.igel = null; HaseIgel.ersterAufruf = true; } private static void printAnzahlDerRekursionen ( Document d ) { int anzahlDerRekursionen = 0; anzahlDerRekursionen = HaseIgel.eineFunktion ( d ); System.out.println ( "Main.main() anzahlDerRekursionen ist " + anzahlDerRekursionen ); } } |
Veröffentlicht unter Allgemein
Kommentare deaktiviert für Hase-Igel-Algorithmus