Aufgabe 10.2


So, nachdem ich mich heute nachmittag auch endlich mal an die Aufgabe gesetzt hab, hab ich auch ein schönes Ergebnis… :slight_smile:

Das Bild zur Vorgabe-Karte schaut zwar ein bisschen anders aus, aber es entstehen die gleichen Wegkosten von 45. Vermutlich steckt also irgendwo beim Prioritätsvergleich ein [m]<[/m] statt einem [m]<=[/m] oder andersrum…

Wurscht, jedenfalls hätten wir dann mittlerweile (vorausgesetzt meine stimmt…) zwei Lösungen in der Sammlung:

##############################
##############################
######################  ######
###################### #######
#####################  #######
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
#############         ########
############  ################
####         #################
##############################
111111111111111111111111111111
111111111222222444533111281111
1112222222222111115341  771111
1112222244444223113334 3531111
1111111111111111111111 1111111
5555555555555555555111 1111111
1111111111111111123211 1666666
1111111188811111115111 1111111
1111111188888888888881 1111111
1111111188888888888881 1111111
1111111111111111118887 7771111
1111111111111111118881 1111111
1111666666666111118881 1111111
1111111116666111118881 1777777
111111111667627461111  1111111
112222111566711129347 92211111
1122221116666111111   94883497
1122221111661111111 8732584391
1122                1111111111
111111111111111111111111111111

Ich sollte erst denken, dann schreiben…


@liwo
leider kann ich deine beiden test-dateien nicht kompilieren :frowning:
beim haldeTest bekomm ich ganze 41 fehler. und bei dem anderen einen: IntSchlangenEintrag.java:45: operator > cannot be applied to java.lang.Integer,java.lang.Integer

:#:


Liegt wohl daran, dass du mit java 1.4.2 kompilieren willst?
liwo’s Tests brauchen 1.5.0


oh… hm… na gut. dann muss ich das wohl mal aendern… danke

[edit:]
grummel, 1.5 kann man nicht so leicht auf mac os x 10.3 installieren :frowning: ich glaub ich lass es fuer heute… :open_mouth:


Ups, das hab ich gar nicht bedacht… ich füg gleich mal nen hinweis auf der Seite ein und versuch das noch zu ändern…

EDIT: Hab die Tests geändert, sie liefen bei mir jetzt auch unter 1.4.2


Ich hab noch eine minimal andere Lösung:

##############################
##############################
####################### ######
####################### ######
#####################   ######
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
##################### ########
#############         ########
############  ################
####         #################
##############################

Wegkosten sind ebenfalls 45, und in meiner geschlossenen Liste befinden sich 440 Einträge.

Und wenn ich statt des Euklidischen Abstands die h-Kosten einfach so berechne:
h = |Δx| + |Δy|
dann komme ich auf noch ein anderes Ergebnis (aber auch mit Kosten 45), für das ich nur 379 Einträge in der geschlossenen Halde habe.


Geschlossene Halde? Es steht doch nirgends, dass die geschlossene Liste eine Halde sein muss, oder?

Und auch wenn der “Manhatten-Abstand” in dem Fall effizienter zu sein scheint, so steht doch in der Aufgabe, dass sich die Verwendung des Euklidischen Abstands “empfiehlt”, also bleibe ich lieber bei dem… auch wenn er nach der Formulierung nicht zwingend vorgeschrieben ist…


Ich muss sagen ich fänds mit “Manhatten-Abstand” auch besser, schon von der Laufzeit her gesehen.
Aber wenn halt euklid dasteht. Und das ist halt:
h = √(Δx² + Δy²)
(ich denke daher rührt auch, dass wir vorgegebenerweise mit “double” arbeiten…)

Und die geschlossene Liste ist bei mir ein Array.

Unterschiede entstehen halt, je nachdem wie man zwei gleich priorisierte Elemente in der Halde behandelt, wie man da seinen Umsortieralgorithmus einbaut.
Ich finds aber witzig, dass es scheinbar echt mehrere gleich gute Wege gibt.


Hast Recht, die Sortierfunktion braucht man in der geschlossenen Liste im Prinzip gar nicht. Da verschenke ich eigentlich eine Menge Prozessorzeit.


vergessts, war ein Denkfehler meinerseits.


Tjo, aber ich hab noch mal eine Frage zum Einstieg in die Halde.
Basiert die bei euch auf einem Array oder auf einer verlinkten Liste?

Bisher hab ich es auf einem Array…


Hab auch ein Array, ist meiner Meinung nach auch wesentlich einfacher und unkomplizierter und das wichtigste: Es funktioniert wunderbar!!!


Gut… Ich bin da grad am Anfang - ich weiß im Moment auch noch gar nicht um was es in diesem A* genau geht.
Daher war ich mir auch nicht sicher, ob etwas mit “fester” Größe reicht, oder ob ich lieber doch was mit “flexibler” Größe machen sollte.

Bei der Theorie, hab ich für den zweiten Punkt die Halde genommen, die ich aus Punkt 1 gewonnen habe. Aber kann gut sein, dass die das von der Ursprungshalde wollen.

Ich frag mich eh, wie ich das als PDF-Abgeben will.


Ich hab für die Theorie Dia genommen, als Grafik exportiert und die kann ich dann wieder in meine LaTeX-Datei einbauen… ok, allzu toll ausschauen tuts net, aber das ist ja auch nicht verlangt :wink:


ich glaub ich scanns einfach ein. wobei^^ sind doch nur 10 punkte :stuck_out_tongue: :gun:


Aber sichere 10 Punkte!


Zum HaldeTester.java> THX erstmal.
Kann es sein dass der Tester ein Fehler beim Auslesen der Elemente hat? Bei mir throwed er naemlich immer NullPointerExceptions.
Darauf hin hab ich mir erlaubt aus den Teser die try & catch-Bloecke rauszuloeschen. Gut, Kompiliert und ausgefuehrt> Resultat:

“Pruefe auslesen von Elementen… Exception in thread “main” java.lang.NullPointerException at HaldeTest.main(HaldeTest.java:90)”

D. h. schliess ich draus dass meine Halde in Ordnung ist, da ich ja keinen Querverweis auf die NullPointerException in meinen Code bekommen hab. Lieg ich da richtig? :#:


servus zusammen. mal ne ganz blöde Frage. Bei der Halde hab ich nen Wert und ne Priorität. Soll ich die in ner extra Klasse implementieren. (Beim Testcase vom Leidensgenossen ist das alles in ner extra Klasse) Das Interface Schlangeneintrag ist ja nur für die Mehtoden. Irgenwie steh ich da ufm Schlauch. :wand:

Danke
Jörg


Ok, ich hab die HaldeTest leicht modifiziert, jetzt solltest du ne Meldung erhalten dass du null zurücklieferst bei pop() :wink: