Array vs. Listen
Posted by pantsu On 9. September 2014
Array |
Listen |
| statische DS | dynamische DS |
| feste länge | beliebig erweiterbar |
| es kann ungenutzten Speicherplatz geben | es gibt keinen verschnitt |
| schneller als Listen | langsam |
| der Platz bleibt immer identisch * | beim löschen wird automatisch eine neue Verkettung gebildet (es wird aufgerutscht) * |
Eine weitere Besonderheit bei Listen ist, das bei ihnen der Datensatz endgültig gelöscht werden kann. Bei einem Array kann man nur einen reservierten Platz mit einem neuen Datensatz überschreiben, aber nie endgültig löschen.
Bei der Liste hingegen übernimmt dies automatisch der Garbage Collector
Exceptions
Posted by pantsu On 9. September 2014
hier wird alles erklärt was ihr zum Thema Ausnahmebehandlungen (exceptions) wissen müsst.
minimaler Spannbaum
Posted by pantsu On 3. September 2014
Berechnung des Minimalen Spannbaums
Dies geht einmal über KRUSKAL und einmal über PRIM
hier kurz die wichtigsten Unterschiede:
[später wird dieser Post noch um ein paar Details erweitert]
im wesentlichen:
Kruskal:
– man fängt am kleinsten kanten gewicht an.
– man geht zum nächst kleinen, und das immer so weiter. bis alle knoten einmal besucht worden.
– NUR knoten. nicht kanten. Die Kantengewichte dürfen keine Fläche bilden!
Prim:
– man sucht sich einfach irgendeinen punkt aus. dieser bleibt die ganze zeit über Ausgangspunkt.
– Man prüft immer wieder am aktuellen und allen alten (unbesuchten) kanten, wo ist die kleinste mögliche Kante zum laufen. Und dann wird dort neu verbunden. Das ganze solange bis alle Knoten besucht worden.
– Die Kantengewichte dürfen keine Fläche bilden!
Info Maximaler Spannbaum
Funktioniert im Endeffekt genauso. nur das man hierbei vom größt möglichen Punkt ausgeht, statt dem kleinsten.
Euklidischer Algorithmus
Posted by pantsu On 31. August 2014
Der Euklidische Algorithmus ist der älteste Algorithmus auf der Welt.
Er ist eine vereinfachte / verkürzte Methode um den GGT zu berechnen.
Mein Ansatz zum Euklid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $x = 18; $y = 12; while ( $x != 0 && $y != 0){ if($x > $y){ $x = $x % $y; }else { $y = $y % $x; } } echo $x+$y; // warum x+y? da einer der beiden werte in jedem Fall 0 sein wird. // und der jeweils andere beeinhaltet das ergebnis ?> |
% = Modulo => zur Berechnung des Restes einer Divison.
Und jetzt das ganze noch einmal ausführlich:
immer noch nicht genug gelernt?
schaut mal bei proggen.org rein
Maximale Teilsumme
Posted by pantsu On 31. August 2014
Einfache Algorithmen, dargestellt in php Quellcode.
Max TeilSumme
Berechnung der Maximalen Teilsumme in einem Array
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $randmax = 0; $bishermax = 0; $array = array(5,-8,3,3,-5,7,-2,-7,3,5); for ($i = 0;$i < count($array) ; $i++) { $randmax = max(0, $randmax + $array[$i]); $bishermax = max($bishermax, $randmax); } echo $randmax; ?> |
Zahlenfolge: 5,-8,3,3,-5,7,-2,-7,3,5
Ergebnis: 8
Einfache Algorithmen [GGT, KGV]
Posted by pantsu On 31. August 2014
Einfache Algorithmen, dargestellt in php Quellcode.
GGT
Zuerst mal etwas ganz einfaches; der GGT (größte gemeinsame Teiler) => Dieser ist ein teil des EUKLID
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $x = 55; $y = 20; while($x != $y) { if($x > $y){ $x -=$y; } else { $y -= $x; } } echo $x; ?> |
Ergebnis : 5
Erst wird geprüft ob die zahlen nicht eh identisch sind, falls ja, ist das dass Ergebnis.
Wenn nicht: schau welche Zahle größer als die andere ist, und zieh dann die kleinere davon ab. Und das ganze solange bis die beiden werte identisch sind.
(Das ganze lässt sich natürlich auch noch anders / komplexer lösen. z.B. mit Modulo (%) )
Ablauf des Algorithmus :
55 – 20 = 35
35 – 20 = 15
15 – 20 = 5
Ergebnis = 5
————————-
KGB
Berechnung des KGV (kleinste gemeinsame vielfaches)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $m = 1; $n = 1; $x = 12; $y = 18; while ($m * $x != $n * $y){ if($m * $x > $n * $y){ $n++; }else{ $m++; } } echo $m*$x; ?> |
Die Abbruchbedingung ist erneut wenn beide Werte identisch sind.
Dann wird wieder geschaut welcher Wert der größere ist, und der jeweils kleinere erhält bei jedem durchlauf einen neuen multiplikator (anfangs 1, dann 2, 3, 3…n)
Und das ganze wird solange weiter multipliziert, bist die beiden Werte identisch sind.
Dies ist dann das KGV.
Am Anfang haben wir also (1*12) != (1*18)
1*12 > 1*18 – no
2*12 > 1*18 – yes
2*12 > 2*18 – no
3*12 == 2*18 – yes
KGV Ergebnis: 36
Sollten noch etwas unklar sein, oder wenn ihr es noch ausführlicher erklärt haben wollt, schreibt einfach kurz etwas in die Kommentare ^^
————
Frage: Warum eigentlich php ?
Antwort: Weil php „dirty“ ist. php verzeiht einem vieles, und man muss dabei auch nicht vieles beachten. Es gibt zudem keine DT die einen nur unnötig aufhalten.
SuchAlgorithmen
Posted by pantsu On 30. August 2014
Die bekanntesten SuchAlgorithmen
Sortieralgorithmen
Posted by pantsu On 30. August 2014
Sortieren
Spezifikationen (kommen später):
Heap: UpHeap / DownHeap
Formale Algorithmen
Posted by pantsu On 26. August 2014
Grundwissen / Vorbereitung
Zum einem gibt es mehrere Vorlesungen von verschiedenen Universitäten Online anzusehen.
Was hierbei auch immer ein guter tipp ist: ladet euch Itunes runter. auch wenn ihr gar keine apple Produkte besitzt!
z.B.
UniStreams
Der Vorteil von Unistreams: Dort gibt es auch Vorlesungen zum Thema Datenbanksysteme und Computergrafik.
Alternativ:
Logt euch bei Video2Brain mit eurem EDU-Login (Shibboleth) ein.
Und sucht dann nach Algorithmen.
Darunter gibt es z.b. ein zweistündiges Video das über die praktische Anwendung von Algorithmen in verschiedene Programmiersprachen berichtet.
Unter „Videos“ gibt es dann noch ein paar Sachen zum Thema Hash etc.
Was ich auf jedenfal empfehlen kann, ist das Buch: „Taschenbuch der Algorithmen“
Dieses findet ihr auch bei uns im Fronter unter FMA.
so ich glaub das reicht erstmal.
Ansonsten google und wikipedia sind eure besten freunde :D
Grundlagen Analysis
Posted by pantsu On 17. August 2014
das absolute minimum an grundwissen das jeder drauf haben sollte :3
