Nutzt ihr Libs für Algorithmen und Datenstrukturen?



  • Guten Morgen,

    ich befasse mich gerade mit Algorithmen und Datenstrukturen(Binärbaum, Traversieren etc.). Ich kann mir aber kaum vorstellen dass sich jemand heute noch die Mühe macht und das alles selbst implementiert, ausser vielleicht wie ich zu Lernzwecken.

    Meine Frage daher, nutzt ihr Libs dafür und wenn ja welche?

    Beste Grüße
    Chris



  • Ja. Sollen sie auf einer anderen Architektur laufen, dienen die Libraries als Vergleich.



  • knivil schrieb:

    Ja. Sollen sie auf einer anderen Architektur laufen, dienen die Libraries als Vergleich.

    Tut mir leid, das verstehe ich nicht ganz. Du nutzt also andere Libs? Wenn ja, warum kannst du die denn nicht auf einer anderen Architektur kompilieren? Liegt es daran, dass du proprietäre Libs verwendest?



  • Grundlegende Algorithmen/Datenstrukturen bringen die meisten Programmiersprachen doch mit. In C++ hast du doch die ganzen Algo/Dat aus der STL: vector, list, etc.



  • Aber keine Bäume oder Graphen, sondern eher Listen oder? Aber ich kann mich auch irren, die STL habe ich bis jetzt nur leicht angekratzt.





  • Ah, ok danke. So wie ich das bis jetzt rausbekommen habe ist die map wohl als Rot-Schwarz-Baum implementiert und für Graphen gibt es was in den Boost-Libs. Ich habe immer noch die Frage ob ihr diese Möglichkeiten auch nutzt oder ob ihr doch andere Libs dafür bevorzugt, aus z.B. Performancegründen?



  • was man wohl am häufigsten braucht, ist list, set, map, queue und selten vielleicht auch mal stack. das sollte doch wohl jede moderne programmiersprache schon von haus aus mitbringen.

    mit graphen hat man - wenn man objekt orientiert programmiert - implizit ja eh immer zu tun. einen expliziten graphen als generische datenstruktur mitsamt der durch die graphentheorie bekannten algorithmen brauchte ich im programmier-alltag bisher eher selten bis gar nicht.



  • Für Graphen benutze ich Lemon. Ist deutlich einfacher zu benutzen als boost::graph.



  • Schaut schon mal sehr interessant aus.
    @lolhehe: Mich interessiert das Thema im Moment halt, mehr ist es auch nicht und wenn ich es irgendwann mal wirklich brauchen sollte schaue ich halt in meine Notizen nach. Ich mache C++ auch nur als Hobby und da werde ich sicherlich noch jede Menge machen, was man eigentlich nicht wirklich braucht, aber darum geht es mir auch nicht, sondern darum nach Lust und Laune zu lernen.



  • justchris schrieb:

    Wenn ja, warum kannst du die denn nicht auf einer anderen Architektur kompilieren? Liegt es daran, dass du proprietäre Libs verwendest?

    Wenn ich beispielsweise AES implementiere, dann kann ich durchaus einfach eine Bibliothek verwenden und dort uebersetzen. Leider werden die besonderen Features des Prozessor nicht genutzt und die Funktion ist langsam.



  • Gerade Kryptozeugs ist nun aber etwas, dessen Selbstimplementierung man im Allgemeinen tunlichst unterlassen sollte, wenn brauchbarer, bewährter und auditierter, Code zur Verfügung steht. Gut möglich, dass du da recht sicher drin bist (und AES ist ja nun auch nicht das komplizierteste auf dieser Welt), aber es gibt da einfach so viele Fallstricke, dass ich diesen Hinweis hier einfach für nötig halte.



  • Es kommt drauf an. Natuerlich waer's prinzipiell immer besser, eine (gute) Library zu haben.

    Manchmal ergibt es sich ganz natuerlich dass man seine Daten z. B. als verkettete Liste oder als Binaerbaum representiert, ohne dass man viel drueber nachdenkt... z. B. wenn man einen Parser fuer simple Ausdruecke schreiben will, passierts ganz schnell dass man (oft auch ohne es zu merken) irgendwo einen (nicht-balancierten) Binaerbaum implementiert. Fuer so einfache Dinge verwende ich dann keine Library.

    Wenn ich jetzt irgendwas schreiben wuerde, das intensivere Arbeit mit Graphen verlangt, oder ich irgendwo Daten in einer Liste abspeichern will, aber selbst nicht sonderlich viel Kontrolle ueber die Liste benoetige ( = die Liste nicht inhaerenter Betandteil der Datenstruktur ist), oder ich irgend einen nicht-trivialen Algorithmus auf der Datenstruktur ausfuehren muss, greif ich zu einer Lib, wenn moeglich.

    Ist aber auch eine Frage davon, was die Sprache mitbringt. In C schreib ich mir meine Listen meist selber, weil ich einfach keine gute Algorithmen-und-Datenstrukturen Sammlung gefunden hab, wie sie C++ von Haus aus mitbringt (Empfehlungen herzlich willkommen!).


Log in to reply