Beste Sprache um Algorithmen zu lernen



  • Turing-vollständig setzt unendlichen Speicher voraus. Und jetzt? 🙄



  • breitengrad schrieb:

    Um Algorithmen zu machen braucht man gute Container. ...

    Das Argument ist nicht von der Hand zu weisen. C bietet das natürlich auch schon, aber in C++ oder C# ist das vlt. bequemer zu handhaben. C, C++, C#, was einem halt am besten für die jeweilige Aufgabe liegt. Wichtig ist, dass man die Sprache beherrscht, damit man Abläufe flink und sicher variieren und debuggen kann.



  • Um Algorithmen zu lernen braucht man doch keine Container, die sind eher hinderlich. Die Sprache sollte so einfach wie möglich sein, damit man sich ganz auf die Algorithmen konzentrieren kann. Auf keinen Fall braucht man da generalisierte Datentypen wie mit void* in C, Templates in C++ etc.

    Später bei einer echten Implementierung sieht das anders aus, obwohl es bei Algos ja eher darum geht den richtigen zu wählen und weniger ob der nun doppelt so schnell in C++ wie in Java läuft, das sind Konstanten im O-Kalkül und die sind eh für die Laufzeit ziemlich irrelevant.



  • Erhard Henkes schrieb:

    breitengrad schrieb:

    Um Algorithmen zu machen braucht man gute Container. ...

    Das Argument ist nicht von der Hand zu weisen.

    Doch. Selber bauen natürlich. Es ging darum, diese Fähigkeit zu erlernen.
    Obs nu Algorithmen
    http://www.cplusplus.com/reference/algorithm/make_heap/
    oder Datenstrukturen
    https://commons.apache.org/proper/commons-collections/javadocs/api-2.1.1/org/apache/commons/collections/BinaryHeap.html
    heißt, juckt uns weniger, gell?

    AlgoResearch schrieb:

    Um Algorithmen zu lernen braucht man doch keine Container, die sind eher hinderlich. Die Sprache sollte so einfach wie möglich sein, damit man sich ganz auf die Algorithmen konzentrieren kann.

    Da werd ich ja religiös.
    http://www.inf.tu-dresden.de/index.php?node_id=3389&ln=de
    http://www.amazon.de/Algorithmen-Datenstrukturen-Thomas-Ottmann/dp/3827410290
    Und versuch mal den Dijksta zu implementieren ohne eine PriorityQueue zu benutzen. (Oder ein Primzahlensieb ohne Array.)



  • Für den Dijkstra kann ich zum Lernen ganz normale Ints nehmen und ein Array würde ich nun nicht gerade einen Container nennen, so wie er hier kommuniziert wurde. Ein Array ist einfach ein zusammenhängender Speicherbereich und kein spezieller Container für mich.



  • AlgoResearch schrieb:

    Für den Dijkstra kann ich zum Lernen ganz normale Ints nehmen

    Ach, findMin in O(n). Das wird lahmer UND umständlicher zum Proggern.



  • Es geht hier nicht um Geschwindigkeit, es darum einen Algo zu lernen und das geht mit Ints und Arrays wunderbar. Warum willst du hier was anderes verkaufen?



  • Die Queue hat man bei dem Thema auch schon vorher gecodet gehabt und kann sie einsetzen und auch da brauchte ich keine STL-Container. Int, Zeiger und Speicher mehr brauche ich nicht um einen Algo zu lernen, so einfach ist das. Wenn ich einen andere einfacherer Datenstruktur dafür brauche, dann habe ich die doch eh schon vorher implementiert. Ich starte doch bei dem Thema nicht mit Graphen, sondern mit Stack, Heap, LinkedList etc.

    Ist dir dies alles nicht bewusst?



  • AlgoResearch schrieb:

    Die Queue hat man bei dem Thema auch schon vorher gecodet gehabt und kann sie einsetzen

    Also gehts um Algorithmen und Datenstrukturen. Sag ich doch.

    AlgoResearch schrieb:

    und auch da brauchte ich keine STL-Container.

    Stimmt. Selber schreiben, wie ich 29.12.14 07:10:02 vorschlug.

    AlgoResearch schrieb:

    Int, Zeiger und Speicher mehr brauche ich nicht um einen Algo zu lernen, so einfach ist das.

    Und je nach Algo am besten auch ein paar Container (die man gerne vorher gebastelt hat oder zu diesem Zwecke baut).

    AlgoResearch schrieb:

    Wenn ich einen andere einfacherer Datenstruktur dafür brauche, dann habe ich die doch eh schon vorher implementiert. Ich starte doch bei dem Thema nicht mit Graphen, sondern mit Stack, Heap, LinkedList etc.

    Deshalb widersprach ich auch zur These, Java sei wegen mangelhafter COntainer ungeeignet.

    AlgoResearch schrieb:

    Ist dir dies alles nicht bewusst?

    Eigentlich schon. Deine Postings hatte ich anders verstanden, als wölltest Du zum Beispiel ganz pacaloid rangehen.



  • Ja ok, wenn man dann die einfachen Datenstrukturen noch nicht gelernt und damit implementiert hat, mag Java ein Nachteil haben. Obwohl ich dies in jeder Sprache durch eine Lib auch wieder ausgleichen könnte.

    Ich finde es trotzdem leichter Algos+DS zu lernen, wenn mir die komplexe Sprache nicht ständig im Weg steht. Mir ist schon klar, dass diese strenge Compilerprüfung in C++ seine Vorteile hat, aber rein zum Lernen hält das meiner Meinung nach nur auf.

    Man sollte doch eh verschiedenen Programmiersprachen lernen, bzw. die Konzepte der Software und der Informatik verstehen. Das muss man nun nicht wirklich alles in C++ machen, da man in einem Studium wohl kaum die Zeit hat C++ wirklich gut zu lernen, ist die Gefahr sogar groß viel Mist zu lernen.

    Nicht mal die Uni-Professoren können C++ wirklich, da dann lieber Java, da kann man nicht viel falsch machen und die Konzepte werden trotzdem gut vermittelt, ohne großen Schaden anzurichten.



  • Ich sehe immer noch keinen Nachteil dabei mit Java Container schreiben zu lernen.



  • Pseudocode und Papier reichen vollkommen aus.
    Alles andere ist nur unnötiger Ballast.

    Ob man dann das Ergebnis auf bayrisch, sächsisch oder hessisch präsentiert ist total egal.



  • MichelRT schrieb:

    Pseudocode und Papier reichen vollkommen aus.
    Alles andere ist nur unnötiger Ballast.

    Ob man dann das Ergebnis auf bayrisch, sächsisch oder hessisch präsentiert ist total egal.

    nein. an ein array hinten was dranzuhängen, wie zum Beispiel std::vector::push_back hat subtile Feinheiten, die man auf einem Blatt papier nicht immer so sieht - aber bei bestimmten Tests gehts dann halt kaputt.



  • otze schrieb:

    nein. an ein array hinten was dranzuhängen, wie zum Beispiel std::vector::push_back hat subtile Feinheiten, die man auf einem Blatt papier nicht immer so sieht - aber bei bestimmten Tests gehts dann halt kaputt.

    Das ist ein Implementationsdetail. Soweit sind wir noch lange nicht 😃
    Einen std::vector gibt es im Pseudocode nicht.



  • Die beste Sprache um Algorithmen zu lernen ist für mich ganz klar Java. Da stimmt wirklich alles. Die Sprache ist einfach, aber ausreichend schnell. Die IDEs sind vorbildlich und nehmen einen nervige Fehler schon beim Eintippen ab und man hat zur Visualisierung gleich mehrere GUIs eingebaut, zudem ist es ziemlich unabhängig von der Plattform.

    Bei allen anderen Sprachen fehlt irgendwas oder ist etwas unnötig kompliziert. Wer viel Lebenszeit zu verschenken hat, der kann Algos natürlich auch mit anderen Sprachen lernen, da ja die Sprache an sich ziemlich egal ist.

    Den mit Abstand besten plattformunabhängigen Workflow habe ich mit Java erlebt, dann kommt eine Weile gar nichts und dann irgendwann mal C++ mit Qt-Creator, da nervt das C++ leider immer wieder beim lernen der Algos. Schließloch will man sich um die Algos kümmern und sich nicht ewig mit den Grundlagen der Programmiersprache aufhalten müssen. Wir leben schließlich nicht mehr in den 90er.



  • Troll 😡 👎



  • Ja natürlich, wenn man Java als beste Sprache für was ansieht, ist man gleich ein Troll. Das Java so erfolgreich ist, ist doch nicht meine Schuld.



  • DerAndroide schrieb:

    Ja natürlich, wenn man Java als beste Sprache für was ansieht, ist man gleich ein Troll. Das Java so erfolgreich ist, ist doch nicht meine Schuld.

    Ich glaube kaum, dass Java im Algorithmenentwurf oder Algorithmenlehren erfolgreich ist (und darum geht es in diesem Thread).

    Spiele, Bildbearbeitungsprogramme, Suchmaschinen, Datenbanken sind quasi alle in C oder C++ geschrieben.



  • Weil du hier von Dingen mit sehr hohen Performanceanforderungen sprichst.
    Zum Algorithmen lernen finde ich Java ebenfalls gut geeignet.



  • Ethon schrieb:

    Weil du hier von Dingen mit sehr hohen Performanceanforderungen sprichst.
    Zum Algorithmen lernen finde ich Java ebenfalls gut geeignet.

    Dieser Meinung kann man sein. Aber plattformunabhängiger Workflow und Erfolg von Java ist kein gültiges Argument (sogar ein nachweisbares Gegenargument).


Anmelden zum Antworten