Open StefanUniBonn opened 1 year ago
Das hast du inzischen an den meisten Stellen gut umgesetzt. Vermutlich würde es aber laufzeitmäßig nochmal ganz gut helfen, wenn man die Belegung weniger oft kopieren würde! Wie oben schon erwähnt würde ich die vier Funktionen
void set_belegung(const std::vector<int>& neubelegung); //ganz neue belegung geben
void set_belegung(const int pos, const int val); //belegung an eine Position ändern
void set_belegung(const int pos); //belegung an eine Position ändern (0 ->1, 1 ->0, 2 ->2)
std::vector<int> get_belegung() const; //gibt Belegung zurück
einfach durch eine einzige Funktion
std::vector<int> & get_belegung()
ersetzen. Dann muss man den Code in test.cpp natürlich entsprechend anpassen, z.B. statt
sat.set_belegung(depth, 0);
einfach
sat.get_belegung()[0] = depth;
und statt
std::vector<int> belegung = sat.get_belegung(); //diese ist die improved version von der obere und schaut sich an welche die größte Variable ist die sich in eine falsche Klausel befindet um nicht durch alle nach diese gehen zu müssen, da man direkt diese verändern kann
(...)
sat.set_belegung(belegung);
einfach nur
std::vector<int> & belegung = sat.get_belegung(); //diese ist die improved version von der obere und schaut sich an welche die größte Variable ist die sich in eine falsche Klausel befindet um nicht durch alle nach diese gehen zu müssen, da man direkt diese verändern kann
Objekte wie SATs oder vectoren will man normalerweise nicht unnötig kopieren, weil das Laufzeit kostet. Das machst du an sehr vielen Stellen.
Beispiel:
Hier git es keinen Grund, das ganze SAT zu kopieren! Du kannst stattdessen einfach
std::vector<int> next(SAT const & sat, int depth)
verwenden.Beispiel: Um zur nächsten Belegung zu gehen, wird die Belegung beim Aufruf von get_belegung ein mal zu kopieren, dann beim Aufruf von set_belegung noch ein zweites mal, und innerhalb der Impementierung von set_belegung ein drittes mal! Hier ist ein Beispiel, wie man das besser machen könnte:
Es gibt aber wie gesagt auch viele weiter Stellen, wo man Kopien vermeiden sollte