Problem 4 Step 2c

blablubb209
Neuling
Neuling
Beiträge: 9
Registriert: 19. Apr 2009 17:58

Problem 4 Step 2c

Beitrag von blablubb209 »

Ich verstehe nicht ganz was die Tests von mir wollen ....

Code: Alles auswählen

public void testRightTooDeep() {
		CounterIntelligence.Tree tree = null;
		tree = c.add(tree, new Interval(5, 6), "bob");
		tree = c.add(tree, new Interval(6, 7), "tod");
		tree = c.add(tree, new Interval(7, 8), "bob");
		assertEquals("tod is top", "tod", tree.agent);
		checkHeight(tree);
		checkBalanced(tree);
	}
Wenn ich dort dann tree = c.rebalance(tree); ist der test bestanden....

Code: Alles auswählen

public void testRightTooDeep() {
		CounterIntelligence.Tree tree = null;
		tree = c.add(tree, new Interval(5, 6), "bob");
		tree = c.add(tree, new Interval(6, 7), "tod");
		tree = c.add(tree, new Interval(7, 8), "bob");
                tree = c.rebalance(tree);
		assertEquals("tod is top", "tod", tree.agent);
		checkHeight(tree);
		checkBalanced(tree);
	}
Wenn ich allerdings versuche den baum in in add() zu rebalancen, da es ja die einzige Methode ist die im Test benutzt wird, funktionieren natürlich alte Tests nicht mehr.
Kann mir da jemand einen Tipp geben ?

Benutzeravatar
Mark_G
Mausschubser
Mausschubser
Beiträge: 67
Registriert: 8. Okt 2008 23:07

Re: Problem 4 Step 2c

Beitrag von Mark_G »

Du musst rebalance() in add() benutzen... und wenn die alten Tests nicht mehr gehen, dann liegt es wahrscheinlich am rebalance() bzw. an den Rotate-Funktionen.

mister_tt
Kernelcompilierer
Kernelcompilierer
Beiträge: 502
Registriert: 29. Sep 2008 15:54

Re: Problem 4 Step 2c

Beitrag von mister_tt »

Du musst aufpassen, dass du wirklich immer auf dem Parameter in den Rotations- und Balance-Funktionen arbeitest. Ich habe das nicht ganz geschafft und umgehe das jetzt so, dass ich immer direkt den Rückgabewert der Fkt. zurückgebe...

Beispiel: Da muss man ein bisschen aufpassen...

blablubb209
Neuling
Neuling
Beiträge: 9
Registriert: 19. Apr 2009 17:58

Re: Problem 4 Step 2c

Beitrag von blablubb209 »

ja liegt sehr wahrscheinlich an der rotate funktion .... is echt zum verrückt werden.
sobald ich will das 2c läuft versagt der 2b test und umgekerht.
das mit den return statements habe ich bereits so gemacht da sonst keine veränderung auftritt :D.
mit meiner rotate methode bin ich sehr unzufrieden da ihr aufbau irgendwie nicht logisch ist, sobald ichs nach
struktur ordne gibts stack overflows.
ein tipp wie in rotate zu arbeiten ist wäre vielleicht ganz gut :)

tigris
Mausschubser
Mausschubser
Beiträge: 89
Registriert: 2. Okt 2008 13:49

Re: Problem 4 Step 2c

Beitrag von tigris »

Orrientiere dich einfach an der Skizze, die als Kommentar über der Funktion steht. Es hilft sich mal Gedanken darüber zu mache, warum manche Knoten GROßgeschrieben sind und mache klein. Außerdem solltest du dir nochmal genau die Struktur eines Trees anschaun, damit du die Konstruktoren korrekt verwendest.
Es ist auch wichtig, dass du zwischen Funktionen unterscheidest, die ihr Argument in der Funktion verändern und zwischen Funktionen, die ein Ergebnis zurückgeben, ihr Argument aber nicht verändern. In machen Fällen musst du also eine Funktion nur aufrufen, manchmal solltest du aber lieber das Ergebnis der Funktion wieder an das zuweisen, was du als Parameter übergeben hast.

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

Re: Problem 4 Step 2c

Beitrag von hi01ebub »

Hey, ich hatte Anfangs auch ein paar Probleme mit den Tests. Bei mir lang es daran, dass ich die Höhe nicht richtig aktualisiert hatte. Jetzt laufen die Tests von 2c zwar durch, brauchen aber ziemlich lange. Darum wollte ich mal fragen, wie lange die bei euch so im Schnitt brauchen.

Danke

EDIT: Gibt es eigentlich wieder ein Zeitlimit? Wenn ja, ist es wieder bei 30 Sek?

blablubb209
Neuling
Neuling
Beiträge: 9
Registriert: 19. Apr 2009 17:58

Re: Problem 4 Step 2c

Beitrag von blablubb209 »

c braucht bei mir 0.6 sek, ich glaub langsam komme ich dem ganzen auf die spur :)

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

Re: Problem 4 Step 2c

Beitrag von hi01ebub »

mmmhhh, ok. Mein RandomTest braucht allein ca. 60 Sek. Da muss ich wohl noch ein bisschen dran arbeiten ;-)

sina
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 27. Mai 2009 13:58

Re: Problem 4 Step 2c

Beitrag von sina »

sobald ich rebalance in add() einbauen will gehen auch bei mir die tests nicht mehr....daher meine Frage..

ich muss doch bei rebalance einfach nur die entsprechende Rechts- oder Linksrotation durchführen wenn der Balancefaktor eines knotens >=2 oder <=-2ist,mehr nicht oder?

in meiner rotationsfkt. habe ich jeweils einen Einzeiler, ind em ich eigentlich nur node=.... setze und das dann zurückgebe,liegt dabei vielleicht der Fehler?

In add() muss ja eigentlich nur rebalance() dort einbauen,wo ich zuvor einfach node zurückgegeben habe,oder???

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

Re: Problem 4 Step 2c

Beitrag von daniel_b »

Ich hatte lange den Fehler, dass ich in .add() nur rebalance() statt "node = rebalance()" ausgeführt hab. Das war schuld, dass sämtliche Randomtests nich gingen.

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

Re: Problem 4 Step 2c

Beitrag von zimpfer »

sina hat geschrieben:sobald ich rebalance in add() einbauen will gehen auch bei mir die tests nicht mehr....daher meine Frage..

ich muss doch bei rebalance einfach nur die entsprechende Rechts- oder Linksrotation durchführen wenn der Balancefaktor eines knotens >=2 oder <=-2ist,mehr nicht oder?

in meiner rotationsfkt. habe ich jeweils einen Einzeiler, ind em ich eigentlich nur node=.... setze und das dann zurückgebe,liegt dabei vielleicht der Fehler?

In add() muss ja eigentlich nur rebalance() dort einbauen,wo ich zuvor einfach node zurückgegeben habe,oder???
nein, so einfach ist es nicht, lies nochmal in den Folien nach, denn du musst auch Doppelrotationen durchführen...

sina
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 27. Mai 2009 13:58

Re: Problem 4 Step 2c

Beitrag von sina »

hm...da hab ich gar nicht mehr dran gedacht,dann werde ich mich nachher mal mit den folien beschäftigen und notfalls nochmal nachfragen...blöd finde ich nur ,dass die Tests zu rotate() trotzdem gingen und erst später fehler auftreten, da freut man sich,dass mal was auf anhieb klappt und dann darf man später doch wieder nach fehlern suchen:-(

Benutzeravatar
Blub
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 244
Registriert: 24. Dez 2007 14:06

Re: Problem 4 Step 2c

Beitrag von Blub »

sina hat geschrieben:hm...da hab ich gar nicht mehr dran gedacht,dann werde ich mich nachher mal mit den folien beschäftigen und notfalls nochmal nachfragen...blöd finde ich nur ,dass die Tests zu rotate() trotzdem gingen und erst später fehler auftreten, da freut man sich,dass mal was auf anhieb klappt und dann darf man später doch wieder nach fehlern suchen:-(
das hat ja nichts mit den rotate funktionen zu tun.
Du musst beim ausbalancieren halt nicht immer nur eine rotation machen, sondern ab und an auch eine doppelrotation.

In den rotate Tests werden nur geprüft ob die gewollte Rotation richtig ausgeführt wird. Eine doppelrotation wird doch ja noch gar nicht verlangt ;)
Tutor GDI II SS12
Tutor Trusted Systems WS11/12, Tutor GDI II SS11
Tutor Trusted Systems WS10/11, GDI I WS10/11
Tutor GDI II SS10, Tutor Trusted Systems WS09/10

sina
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 27. Mai 2009 13:58

Re: Problem 4 Step 2c

Beitrag von sina »

ok,du meintest also dass es bei rebalance(),wie ich es gemacht habe,nicht reicht nur links oder rechts zu rotieren sondern auch irgendwie die doppelrotation einzufügen?

sina
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 27. Mai 2009 13:58

Re: Problem 4 Step 2c

Beitrag von sina »

also ich habe jetzt diverse fälle,die auftreten können betrachtet,denke auch dass ich nun alles berücksichtigt habe, dennoch treten fehler auf wenn ich ´rebalance() in add() anwenden will,ich glaube,dass es dieses mal daran liegt,dass ich rebalance nicht richtig in add() eingebunden habe.
ich dachte ich könnte in der add() nachdem ich updateheight() aufrufe rebalance() einbinden und dann node zurückgeben, habe es auch schon mit node=rbelance(node) probiert,aber es treten trotzdem fehler auf.... :(

Antworten

Zurück zu „Archiv“