- wie finde ich heraus, welche datenstruktur wie optimal für die laufzeit und den arbeitsspeicherverbrauch ist?
Durch nachdenken oder googeln. Nein ernsthaft, für viele Probleme gibt es nur "optimal unter den Bedingungen..." oder es wurde noch keine Lösung gefunden. Wenn dich Datenstrukturen und Laufzeiten interessieren, lernst du wahrscheinlich am schnellsten und besten, wenn du dich in die entsprechenden Vorlesungen für Informatiker mit reinsetzt (z.B. "Algorithmen und Datenstrukturen" oder wie auch immer sie heißen mögen).
Wenn du wirklich lieber liest und auch ein wenig Zeit investieren willst, sind "The Art Of Computer Programming" was für dich. Da geht es _richtig_ ans Eingemachte und es ist sehr gut. Wird dir als Mathematiker auch nicht so schwer fallen.
ich frage mich oft, ob ich besser etwas in "long" oder "int" berechne oder lieber ein objekt mit mehreren "boolean" baue. ich glaube die vergleichseinheit zum optimieren wären bytes? oder kommt das immer auf den rechner an?
Kommt drauf an, welches Kriterium du optimieren willst. Wenn du effizient programmieren willst, wäre die "beste Optimierung" darüber gar nicht nachzudenken. ;)
- warum brauchen einige programmiersprachen länger für 1==1 als andere?
Weil 1==1 nicht in allen Programmiersprachen das gleiche ist.
- was ist ein prozessor (was threads sind weiß ich) und welchen einfluss hat dieser? sollte ich diesen beim programmieren berücksichtigen? wie würde ich das machen?
Wenn du DAS wissen willst, dann lern Assembler.
- was liegt einer programmiersprache zugrunde? (interpretersprachen ausgenommen)
Besuch die Vorlesung "Compilerbau".
- was ist cpu und was hab ich davon?
Siehe 3.
- wie funktioniert das internet (große frage ich weiß, aber ich verstehe nix von servern etc., ich kann sie zwar benutzen.... oder sowas in der art, aber verstehe nicht was da passiert)?
Lies die entsprechenden RFCs zu den OSI Schichten. Von da wirst du weiterkommen.
- wie werden dateien von einem programm eingelesen (die absoluten grundlagen interessieren mich, also keine konkreten befehle)
Festplattenarm spührt Polarisierung (oder so) von den Eisenteilchen, wandelt das um in elektrische Signale, die über Mainboard und dann CPU verarbeitet und im Arbeitsspeicher abgelegt werden, von dem aus dein Programm dann darauf zugreift.
Vorher sorgt noch das Betriebssystem, wohin der Festplattenarm soll und ob er das überhaupt darf.
und zu folgenden themen muss ich beizeiten auch mehr wissen ansammeln:
- welche teile brauche ich für mehr arbeitsspeicher? wie funktionieren diese teile?
- welche teile brauche ich für mehr cpu etc.?
- 1 und 2 mit besonderem blick auf vm's
Langweilig. :P
dieses wissen brauche ich, um zb herauszufinden, wie ich einen AVL baum so programmiere, dass er sehr schnell arbeitet.
Tu einfach das, was ich oben geschrieben habe.
konkrete fragen wären wieder:
- wie weiß ich welche datenstruktur für "nodes" bei welcher programmiersprache zu welchem pc optimal wäre
Die Datenstruktur ist ziemlich unabhängig von der Programmiersprache (sofern die kein Schrott ist). In der Regel passt man die Datenstruktur an die Algorithmen und dieser wiederum an das Problem an.
Das richtige Vorgehen ist also: du hast ein Problem und überlegst dir einen Algorithmus (mit primitiven Datenstrukturen) um das Problem zu lösen. Dann berechnest du die vereinfachte Laufzeitkomplexität dieses Algorithmus. Wenn du damit unzufrieden bist, dann überlegst du dir, wie man das besser lösen kann und versuchst die Struktur des Problems auszunutzen, um eine geringere Laufzeitkomplexität zu erreichen. Und wenn du dann noch weitergehst, kannst du die Laufzeitkomplexität auch abhängig von der verwendeten Hardware berechnen, das ist allerdings VIEL schwieriger, als eine vereinfachte Laufzeitkomplexität zu berechnen. Bei letzter gehst du z.B. davon aus, dass ein Vergleich "einen Punkt" kostet usw. Das für richtige Hardware zu berechnen ist quasi unmöglich, also schlag es dir lieber aus dem Kopf und begnüg dich mit der vereinfachten Laufzeitkomplexität, das ist sinnvoller und bringt mehr Freude.