tree-based diff Algorithmus (Code-Vergleiche)
tree-based diff Algorithmus (Code-Vergleiche)
Hallo
Ich habe mich für einen Bachelor-Arbeit entschieden, in der ich einen line-based und einen tree-based diff algoritmus um zwei Codestücke zu vergleichen. Der Input sind XML-Files, welche ich intern wohl zuerst in Code umwandle. Es geht nicht darum einen Algorithmus zu erfinden, sondern nur einen bestehenden zu implementieren. Die Programmiersprache ist jetzt hier nicht relevant, da es mir zur Zeit nur ums Grundprinzip geht.
Nun muss ich leider bis nächste Woche bereits einen tree-based Algorithmus auswählen, leider habe ich aber praktisch keine Zeit, da ich einige Prüfungen habe.
Könntet ihr mir da vielleicht einen tree-based diff Algorithmus empfehlen? Er sollte nicht zu kompliziert sein, gut dokumentiert (Literatur) und v.a. sollte bereits eine Implementation z.B. in Java vorhanden sein (ich muss in einer anderen Programmiersprache implementieren).
Wäre nett wenn da jemand weiterhelfen könnte.
PS: Falls jemand auch gleich noch einen guten line-based diff Algorithmus empfehlen könnte, wäre ich auch froh.
Ich habe mich für einen Bachelor-Arbeit entschieden, in der ich einen line-based und einen tree-based diff algoritmus um zwei Codestücke zu vergleichen. Der Input sind XML-Files, welche ich intern wohl zuerst in Code umwandle. Es geht nicht darum einen Algorithmus zu erfinden, sondern nur einen bestehenden zu implementieren. Die Programmiersprache ist jetzt hier nicht relevant, da es mir zur Zeit nur ums Grundprinzip geht.
Nun muss ich leider bis nächste Woche bereits einen tree-based Algorithmus auswählen, leider habe ich aber praktisch keine Zeit, da ich einige Prüfungen habe.
Könntet ihr mir da vielleicht einen tree-based diff Algorithmus empfehlen? Er sollte nicht zu kompliziert sein, gut dokumentiert (Literatur) und v.a. sollte bereits eine Implementation z.B. in Java vorhanden sein (ich muss in einer anderen Programmiersprache implementieren).
Wäre nett wenn da jemand weiterhelfen könnte.
PS: Falls jemand auch gleich noch einen guten line-based diff Algorithmus empfehlen könnte, wäre ich auch froh.
Re: tree-based diff Algorithmus (Code-Vergleiche)
Unwissenheit ist ein Segen
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: tree-based diff Algorithmus (Code-Vergleiche)
Ich habe jetzt mal flott in 5 Büchern nach diff geguckt, aber nichts gefunden - jedenfalls nicht unter "diff". Wenn in "Art of Computer Programming" nix dazu drin steht, gibt's diese Algorithmen nichtMrTiger hat geschrieben:Ich habe mich für einen Bachelor-Arbeit entschieden, in der ich einen line-based und einen tree-based diff algoritmus um zwei Codestücke zu vergleichen. Der Input sind XML-Files, welche ich intern wohl zuerst in Code umwandle. Es geht nicht darum einen Algorithmus zu erfinden, sondern nur einen bestehenden zu implementieren.

Also muss ich mal gucken, was es sonst noch für Suchbare Stichworte dazu gibt.
Dann solltest Du die Bachelorarbeit günstiger legen.MrTiger hat geschrieben:Nun muss ich leider bis nächste Woche bereits einen tree-based Algorithmus auswählen, leider habe ich aber praktisch keine Zeit, da ich einige Prüfungen habe.
Aber schau mal hier:
http://neil.fraser.name/writing/diff/
Hehehe, soll noch WünscheMrTiger hat geschrieben:Könntet ihr mir da vielleicht einen tree-based diff Algorithmus empfehlen? Er sollte nicht zu kompliziert sein, gut dokumentiert (Literatur) und v.a. sollte bereits eine Implementation z.B. in Java vorhanden sein (ich muss in einer anderen Programmiersprache implementieren).

Ich interessiere mich für das Thema, weil ich auch ein Diff implementieren muss. Ich weiß nicht, ob das schon akut ist, wenn Du Deine Bachelorarbeit schreibst, aber ich biete mich zumindest schonmal an, sie vorab zu lesen und zu kommentieren.MrTiger hat geschrieben:PS: Falls jemand auch gleich noch einen guten line-based diff Algorithmus empfehlen könnte, wäre ich auch froh.
Zum einen bin ich daran interessiert, das heißt, ich würde Deine Beschreibung nacharbeiten, zum anderen bin ich Diplom-Informatiker, als Ghostwriter ein Bachelor-Arbeit brauche ich Dich also nicht mehr

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: tree-based diff Algorithmus (Code-Vergleiche)
Ich danke dir vielmals Xin.
Ich habe jetzt etwas gefunden. Einen Zeilenbasierten diff Algorithmus macht man wohl am besten mit longest common subsequence (dynamic programming). Dazu habe ich auch einige Literatur gefunden, leider aber kein Code-Beispiel in Java. Kennst du da vielleicht gerade was?
Den Baum-basierten Algorithmus macht man wohl mit Levenshtein. Dazu habe ich aber noch keine Literatur gefunden (also auf den Verwendungszweck als diff Algorithmus) und auch noch kein Code. Kannst du da vielleicht weiterhelfen?

In wie fern musst du denn einen Diff implementieren (in welchem Zusammenhang)?
Ich habe jetzt etwas gefunden. Einen Zeilenbasierten diff Algorithmus macht man wohl am besten mit longest common subsequence (dynamic programming). Dazu habe ich auch einige Literatur gefunden, leider aber kein Code-Beispiel in Java. Kennst du da vielleicht gerade was?
Den Baum-basierten Algorithmus macht man wohl mit Levenshtein. Dazu habe ich aber noch keine Literatur gefunden (also auf den Verwendungszweck als diff Algorithmus) und auch noch kein Code. Kannst du da vielleicht weiterhelfen?

Vielen Dank für das Angebot. Ich habe ja noch nicht mit der Arbeit begonnen, bin erst im Anfangsstadium.Ich interessiere mich für das Thema, weil ich auch ein Diff implementieren muss. Ich weiß nicht, ob das schon akut ist, wenn Du Deine Bachelorarbeit schreibst, aber ich biete mich zumindest schonmal an, sie vorab zu lesen und zu kommentieren.
Zum einen bin ich daran interessiert, das heißt, ich würde Deine Beschreibung nacharbeiten, zum anderen bin ich Diplom-Informatiker, als Ghostwriter ein Bachelor-Arbeit brauche ich Dich also nicht mehr

In wie fern musst du denn einen Diff implementieren (in welchem Zusammenhang)?
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: tree-based diff Algorithmus (Code-Vergleiche)
Bisher nicht.MrTiger hat geschrieben:Ich habe jetzt etwas gefunden. Einen Zeilenbasierten diff Algorithmus macht man wohl am besten mit longest common subsequence (dynamic programming). Dazu habe ich auch einige Literatur gefunden, leider aber kein Code-Beispiel in Java. Kennst du da vielleicht gerade was?
Meine Algorithmenbücher werfen da nicht viel ab.
Auch hier schweigen sich die Bücher aus. Lediglich 'The Art of Computer Programming' (Bd. 3) erwähnt Levenshtein ohne ihn zu beschreiben.MrTiger hat geschrieben:Den Baum-basierten Algorithmus macht man wohl mit Levenshtein. Dazu habe ich aber noch keine Literatur gefunden (also auf den Verwendungszweck als diff Algorithmus) und auch noch kein Code. Kannst du da vielleicht weiterhelfen?
Ich muss eine Versionsverwaltung abbilden und dafür muss ich die Unterschiede zwischen Texten erkennen können.MrTiger hat geschrieben:Vielen Dank für das Angebot. Ich habe ja noch nicht mit der Arbeit begonnen, bin erst im Anfangsstadium.Ich interessiere mich für das Thema, weil ich auch ein Diff implementieren muss. Ich weiß nicht, ob das schon akut ist, wenn Du Deine Bachelorarbeit schreibst, aber ich biete mich zumindest schonmal an, sie vorab zu lesen und zu kommentieren.
Zum einen bin ich daran interessiert, das heißt, ich würde Deine Beschreibung nacharbeiten, zum anderen bin ich Diplom-Informatiker, als Ghostwriter ein Bachelor-Arbeit brauche ich Dich also nicht mehr
In wie fern musst du denn einen Diff implementieren (in welchem Zusammenhang)?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: tree-based diff Algorithmus (Code-Vergleiche)
Einen dynamisierten LCS-Algorithmus kann ich dir schon erklären, aber was machst du dann mit dem Ergebnis?!MrTiger hat geschrieben:Ich habe jetzt etwas gefunden. Einen Zeilenbasierten diff Algorithmus macht man wohl am besten mit longest common subsequence (dynamic programming). Dazu habe ich auch einige Literatur gefunden, leider aber kein Code-Beispiel in Java. Kennst du da vielleicht gerade was?
Re: tree-based diff Algorithmus (Code-Vergleiche)
Für eine Bachelor- oder Master-Arbeit?Ich muss eine Versionsverwaltung abbilden und dafür muss ich die Unterschiede zwischen Texten erkennen können.
Zum Zeilenbasierten bzw. LCS-Algorithmus habe ich schon einige Literatur und Beispiele gefunden, das werde ich zuerst einmal durchlesen. Vielleicht habe ich dann noch fragen.Einen dynamisierten LCS-Algorithmus kann ich dir schon erklären, aber was machst du dann mit dem Ergebnis?!


Wie meinst du was ich mit dem Ergebnis mache? Das Ergebnis wird in einem GUI visualisiert. Also zuerst wird wohl ein Array mit den Differenzen zurückgegeben und mit einer seperaten Funktion kann man es dann in einem GUI visualisieren.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: tree-based diff Algorithmus (Code-Vergleiche)
Für ein Content-Management-System.MrTiger hat geschrieben:Für eine Bachelor- oder Master-Arbeit?Ich muss eine Versionsverwaltung abbilden und dafür muss ich die Unterschiede zwischen Texten erkennen können.
Ich bin schon Diplom-Informatiker (FH), ich programmiere für das wahre Leben

Ich spiele zwar mit dem Gedanken mal spaßeshalber einen M. Sc. hinterherzuschieben, aber zum einen fehlt die Zeit und zum anderen Diplom ist ja auch ganz schön. Schon witzig... der eine macht eine Indexbasierte-Suchmaschine als Master-Arbeit, Du den Diff. Da frage ich mich echt, warum ich mir bei meiner Diplomarbeit damals soviel Aufwand gemacht habe.
Vielleicht sollte ich einfach mal meine privaten Quellcodes zur Uni tragen und mir einen Doktor aushändigen lassen ;-D
Ich mache hier keine Recherche, aber zu Levenshtein habe ich auf die Schnelle die Distanz zwischen Wörtern gefunden.MrTiger hat geschrieben:Zum Zeilenbasierten bzw. LCS-Algorithmus habe ich schon einige Literatur und Beispiele gefunden, das werde ich zuerst einmal durchlesen. Vielleicht habe ich dann noch fragen.Einen dynamisierten LCS-Algorithmus kann ich dir schon erklären, aber was machst du dann mit dem Ergebnis?!Zum Baumbasierten bzw. Levenshtein habe ich aber noch fast nichts gefunden.
Das ist dann wohl eher das Problem.
Den nächsten Gedankenschritt drängt sich auf und doch musste ich ihn hier leider hier wieder entfernen, denn den nächsten Gedanken zu fassen, sollte Teil Deiner Leistung zur Bachelorarbeit sein.
Zu Diskutieren wäre jedoch, ob die Ergebnisse von Levenshtein optimal für einen Diff-Algorithmus sind.
Wie gesagt, ich stehe vor einem ähnlichen Problem. Inkl. der Visualisierung, ob das in einer GUI oder dem Web passiert, spielt dabei ja keine Rolle. Von daher bin ich am Ergebnis Deiner Arbeit in C++ interessiert, weil es mir Arbeit abnehmen könnte - im Gegenzug liest jemand Deine Bachelor-Arbeit, bevor es der Prof tut.MrTiger hat geschrieben: Wie meinst du was ich mit dem Ergebnis mache? Das Ergebnis wird in einem GUI visualisiert. Also zuerst wird wohl ein Array mit den Differenzen zurückgegeben und mit einer seperaten Funktion kann man es dann in einem GUI visualisieren.
Dank der kurzen Recherche für diesen Thread sehe ich mich inzwischen aber auch ganz gut gerüstet, den Diff zu implementieren.
Momentan habe ich noch keinen Diff. Ich kann Dir in diesem Sinne anbieten, in Deine Bachelorarbeit einzupflegen, dass der Nutzen Deiner Arbeit schon dadurch gegeben ist, dass Dein Code anschließend produktiv verwendet wird - das spart mir eventuell die Arbeit und Deine Arbeit wird von einer Hausaufgabe zu einem produktiv genutztem Werk. Dafür wäre allerdings das C++ Fähnchen zu schwenken und zwar als Template.
Beim Template kann ich Dir bei Bedarf noch helfen, da Du ja den Algorithmus (be-)schreiben sollst und nicht C++-Templates. Dazu kann ich Dir dann ggfs. für C++ bei Unit-Tests zuarbeiten, denn das ist ja auch nicht Deine Aufgabe, sichert aber Deine Arbeit ab. Sprich das aber ggfs. mit Deinem Prof ab.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: tree-based diff Algorithmus (Code-Vergleiche)
Moin,
http://de.wikipedia.org/wiki/Suffixbaum
http://de.wikipedia.org/wiki/Levenshtein-Distanz
http://xlinux.nist.gov/dads/
http://www.delphipraxis.net/58797-proze ... tteln.html
http://www.delphipraxis.net/399584-post.html#472481
http://www.koders.com/delphi/fid54DC48F ... s=download
http://www.h-j-luecking.de/wiki/Einfach ... in_Distanz
http://www.sound-ex.de/
http://levenshtein.de/
zu Levenshtein habe ich einige Links:MrTiger hat geschrieben:Den Baum-basierten Algorithmus macht man wohl mit Levenshtein. Dazu habe ich aber noch keine Literatur gefunden (also auf den Verwendungszweck als diff Algorithmus) und auch noch kein Code. Kannst du da vielleicht weiterhelfen?
http://de.wikipedia.org/wiki/Suffixbaum
http://de.wikipedia.org/wiki/Levenshtein-Distanz
http://xlinux.nist.gov/dads/
http://www.delphipraxis.net/58797-proze ... tteln.html
http://www.delphipraxis.net/399584-post.html#472481
http://www.koders.com/delphi/fid54DC48F ... s=download
http://www.h-j-luecking.de/wiki/Einfach ... in_Distanz
http://www.sound-ex.de/
http://levenshtein.de/
Liebe Grüße
turbo
turbo
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: tree-based diff Algorithmus (Code-Vergleiche)
@turbo: Wir brauchen eine +1 Funktion im neuen CMS 

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.