P4 - Step 4

Niggi
Mausschubser
Mausschubser
Beiträge: 82
Registriert: 15. Apr 2009 15:16
Kontaktdaten:

Re: P4 - Step 4

Beitrag von Niggi »

erstmal danke O_kut , ich war wirklich so blöd und hab kein .equals beim Stringvergleich gebraucht, was tückisch war , war die Beschreibung über der funktion wo wirklich agent = node.agent stand und da wurds einfach ma so übernommen =). Mittlererweile bin ich auch nah dran, dass der randomTest durchläuft nur irgendwie löscht er bei mir nicht die 5000 knoten auf 4000 runter sondern nur auf 4017, was ich sehr merkwürdig finde.


EDIT : Fehler gefunden, hab vergessen beim rekursiv weiter runter gehen zu beachten , dass interval gleich sein kann aber name anders wie dumm eigentlich
Zuletzt geändert von Niggi am 14. Jun 2009 17:51, insgesamt 1-mal geändert.

romansemko
Neuling
Neuling
Beiträge: 10
Registriert: 5. Mai 2009 09:27

Re: P4 - Step 4

Beitrag von romansemko »

Niggi hat geschrieben:das lustige bei mir ist, alle test ohne random laufen durch aber bei random, löscht er einfach gar nichts , es verbleiben 5000 von 5000 knoten und ich weiß nich warum LOL
seltsamerweise kommt bei mir genau das gleiche heraus... alle tests laufen durch ausser random und random size ist immer 5000 :(
Kann jmnd nen Tipp geben?

Niggi
Mausschubser
Mausschubser
Beiträge: 82
Registriert: 15. Apr 2009 15:16
Kontaktdaten:

Re: P4 - Step 4

Beitrag von Niggi »

bei mir lag der fehler beim Stringvergleich, dass er einfach nie den knoten gefunden hat ... also nicht "==" benutzen sondern .equals(agent)

romansemko
Neuling
Neuling
Beiträge: 10
Registriert: 5. Mai 2009 09:27

Re: P4 - Step 4

Beitrag von romansemko »

ok, jetzt hab ich node.agent.equal(agent) statt "==". Dennoch blebt es bei 4974 stecken. :(
Komischerweise laufen alle anderen tests von Step1 bis Step4.random durch. Was könnte das Problem sein? :S

Sitze schon einige Stunden an dem Bug und finde nichts! :cry:

romansemko
Neuling
Neuling
Beiträge: 10
Registriert: 5. Mai 2009 09:27

Re: P4 - Step 4

Beitrag von romansemko »

ich bin schon soweit gekommen, dass ich eigene tests für removesmallest geschrieben habe, um es isoliert zu testen. läuft einwandfrei. Also muss das problem irgendwo in "remove" liegen. Wie gesagt, alle anderen tests ausser random laufen problemlos durch...
?

Benutzeravatar
Le_Coeur
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 18. Apr 2009 12:39
Kontaktdaten:

Re: P4 - Step 4

Beitrag von Le_Coeur »

Probier mal diesen Test:

Code: Alles auswählen

public void testRandomchen() {
		MTRandom rand = new MTRandom(42);
		for (int i = 1; i <= 300; ++i) {
			List<Interval> ivs = new ArrayList<Interval>();
			for (int j = 0; j < 5000; ++j) {
				int x = rand.nextInt(100000), y = rand.nextInt(100000);
				if (x > y) ivs.add(new Interval(y, x)); else ivs.add(new Interval(x, y));
			}
			CounterIntelligence.Tree tree = null;
			for (int j = 0; j < 20; ++j)
				tree = c.add(tree, ivs.get(j), Integer.toString(j));
			for (int j = 0; j < 10; ++j) 
				tree = c.remove(tree, ivs.get(j), Integer.toString(j));
			assertEquals("still 4000 elements", 10, size(tree));
			check(tree);
			for (int j = 10; j < 20; ++j)
				assertTrue("Interval is present", contains(tree, ivs.get(j), Integer.toString(j)));
		}
	}
Falls nicht klapt, kannst du da Probleme finden, denn es gibt nur 20 Knoten:)

hi01ebub
Mausschubser
Mausschubser
Beiträge: 66
Registriert: 14. Dez 2008 17:37

Re: P4 - Step 4

Beitrag von hi01ebub »

Danke für den Test. Hat mir echt beim debuggen geholfen. War schon halb am verzweifeln, weil ich einen Fehler im RandomTest nicht rausbekommen habe.

romansemko
Neuling
Neuling
Beiträge: 10
Registriert: 5. Mai 2009 09:27

Re: P4 - Step 4

Beitrag von romansemko »

Ja. Der Test war ein guter Ansatz. Bei mir ist es herausgekommen, dass ich den smallestNode von LINKEN Baum, und nicht vom RECHTEN gesucht habe!! Wie blöd. Komischerweise, laufen mit dem linken Baum alle andere Tests durch, deswegen habe ich so ein Fehler gar nicht vermutet. :mrgreen:

daniel_b
Computerversteher
Computerversteher
Beiträge: 363
Registriert: 15. Okt 2008 16:23

Re: P4 - Step 4

Beitrag von daniel_b »

* Eingabe: Ein Unterbaum, der genau ein Knoten mit
* node.interval.start == x.start und node.agent == agent hat.
Heißt das, dass ein solcher Knoten irgendwo im Unterbaum ist oder dass der Unterbaum aus diesem einen Knoten besteht?

VMann
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 16. Apr 2009 11:51

Re: P4 - Step 4

Beitrag von VMann »

Es bedeutet dass der Knoten irgendwo im Unterbaum ist, er darf auch noch weitere Knoten haben.
Computer tun nicht das, was du von ihnen willst, sie tun das, was du ihnen sagst.

Benutzeravatar
zimpfer
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 15. Mär 2009 01:07

Re: P4 - Step 4

Beitrag von zimpfer »

Ich hab jetzt beim remove()-Test unzählige StackOverflows...

Ich gehe mal stark davon aus, dass es daran liegt, dass ich removeSmallest(), wie auch remove(), rekursiv gelöst habe, weil ich einfach nicht drauf gekommen bin, wie ich es sonst machen soll.

remove() sieht bei mir so aus:
1. Prüfen, ob Agent gefunden, falls ja, die 4 möglichen fälle durchgehen und löschen
2. Falls nicht, remove() auf node.left/right
Da liegt wohl kaum der Fehler

Anfangs hatte ich removeSmallest mit einer while-Schleife:
Tree smallest=node;
while(smallest.left exists) {
smallest=smallest.left;
}

Das läuft nicht, weil ich keinen neuen Baum erstelle und somit verändere ich bei der neuen Zuweisung an smallest in der Schleife auch node, was eigentlich nicht passieren soll.


Wie habt ihr das gemacht?

Jonathan
Mausschubser
Mausschubser
Beiträge: 47
Registriert: 10. Okt 2008 13:37

Re: P4 - Step 4

Beitrag von Jonathan »

Man kann problemlos alles rekursiv lösen, ohne auf Probleme mit der Stack-Größe zu stoßen. Das deutet bei die vielmehr darauf hin, dass du aus Versehen eine Endlosrekursion machst.

tanne
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 162
Registriert: 30. Sep 2008 16:05

Re: P4 - Step 4

Beitrag von tanne »

zimpfer hat geschrieben:Ich hab jetzt beim remove()-Test unzählige StackOverflows...

Ich gehe mal stark davon aus, dass es daran liegt, dass ich removeSmallest(), wie auch remove(), rekursiv gelöst habe, weil ich einfach nicht drauf gekommen bin, wie ich es sonst machen soll.

remove() sieht bei mir so aus:
1. Prüfen, ob Agent gefunden, falls ja, die 4 möglichen fälle durchgehen und löschen
2. Falls nicht, remove() auf node.left/right
Da liegt wohl kaum der Fehler

Anfangs hatte ich removeSmallest mit einer while-Schleife:
Tree smallest=node;
while(smallest.left exists) {
smallest=smallest.left;
}

Das läuft nicht, weil ich keinen neuen Baum erstelle und somit verändere ich bei der neuen Zuweisung an smallest in der Schleife auch node, was eigentlich nicht passieren soll.


Wie habt ihr das gemacht?
hast du einen rekursionsanker falls der knoten nicht im (teil)baum enthalten ist ?

Benutzeravatar
zimpfer
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 15. Mär 2009 01:07

Re: P4 - Step 4

Beitrag von zimpfer »

Ja, hab ich.

Ich gehe den Baum durch so wie bei add(), bis ich entweder den Agenten gefunden habe und ihn lösche oder bis der Teilbaum nur noch ein Blatt ist, dann rufe ich die Rekursion nicht mehr auf und node wird zurückgegeben...

tanne
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 162
Registriert: 30. Sep 2008 16:05

Re: P4 - Step 4

Beitrag von tanne »

wie steigst du rekursiv links und rechts ab ? mit welchen bedingungen ?

Antworten

Zurück zu „Archiv“