Seite 1 von 1

Prim: checkInvariant

Verfasst: 22. Jun 2017 15:13
von Vykyfikation
Hallo,
ich beiße mir grade an checkInvariant ein wenig die Zähne aus. In der Aufgabenstellung steht ja, man soll überprüfen, obfolgendes zutrifft:
  • nach i Iteration ist die größe des MST gleich i-1
  • nach i Iteration sind i Knoten besucht, solange nicht alle Knoten in visited sind
Ich habe das mit dem Code:

Code: Alles auswählen

{
    if(getVisited().size() != getIterations()) throw new InvalidInvariantException("blab");
    if(getMst().size()-1 !=  getIterations() ) throw new InvalidInvariantException("blub");
}
versucht, schaffe aber nur 1 von zwei Test. die zweite Abfrage scheint nicht richtig zu sein. Hat jemand eine Ahnung, was ich hier anders machen muss?
Der Errorcode ist wie so oft:

Code: Alles auswählen

    Testheadder – testMSTSizeVisitedSize(graph.algorithm.prim.PrimInvariantTest)

    Message – It seems like the method default throws the exception

Re: Prim: checkInvariant

Verfasst: 22. Jun 2017 19:05
von Kabooom
Hallo Vykyfikation,

so wie ich es verstehe sollte man sich hier nicht nach der Aufgabenstellung sondern eher nach dem Javadoc richten. Ich hatte übrigens hier schonmal beschrieben, wie ich die Tests zum laufen bekommen habe: viewtopic.php?f=167&t=36362

Re: Prim: checkInvariant

Verfasst: 22. Jun 2017 19:09
von LukasPhysiker
Hallo Vykyfikation,

dein Fehler ist einfach erstmal, dass du das -1 auf die falsche Seite gesetzt hast. getMst().size() soll i-1 sein, nicht i soll getMst().size()-1 sein. Ich habe dann aber mal deinen Code in korrigierter Form in die Aufgabe eingefügt und bekomme wieder den gleichen Fehler. Dann habe ich das mit meinem, funktionierenden Code verglichen:

Code: Alles auswählen

public void checkInvariant() throws InvalidInvariantException
{
    if(getMst().size() != getVisited().size()-1) throw new InvalidInvariantException();
    if(getVisited().size() != getIterations()) throw new InvalidInvariantException();
}
Um es kurz zu fassen, dies Aufgabe ist mal wieder total verbuggt, genau wie Dijkstra: invariant. Ob die Fehler kommen, kommt anscheinend darauf an, in welcher Reihenfolge du die beiden if-Abfragen machst und welche Seite links und rechts des Ungleichheitszeichens ist.

An Marcel Beuth und Tristan Wirth: Bitte korrigieren.