Duplikate in STL Container und ein Knoten im Kopf
Verfasst: Di Jan 03, 2012 8:12 am
Der Titel ist Programm. Seit zwei Tagen grüble ich, wie ich einen ordentlichen Algorithmus für die Duplikate hinbekommen. Folgende Datenstrukturen bilden den Rahmen der Handlung:
So weit die Infrastruktur. Ich hole mir jetzt alle Dateien aus der Datenbank und will alle Duplikate herausgreifen und in die obigen Datenstrukturen einsortieren, damit das ganze dann ans Userinterface übergeben werden kann und der User entscheidet, wie es weiter geht. Die richtigen Dateien einfach per SQL Abfrage zu suchen, halte ich für ziemlich langsam, weil jedesmal ein Plattenzugriff erfolgt. Wie könnte so ein Algorithmus aussehen? Ich habe schon ein paar Ansätze im Kopf, aber vielleicht fällt jemandem ja eine elegantere Lösung ein.
Code: Alles auswählen
/**
*HandleDuplicates is used to say, what to do
*with founded Duplicates
*/
enum HandleDuplicates
{
Empty, ///Default value
Keep, ///Keep file
MarkAsKeep, /// Mark file as "keep" in the database
Delete ///delete file from hdd
};
/**
*DupHandle represents a single file, paired with a message, which says
*to do with it.
*/
typedef std::pair<Dedupe::FileInfo, HandleDuplicates> DupHandle;
/**
*DuplicateGroup represents Files with the same hash value
*/
typedef std::vector<DupHandle> DuplicateGroup;
/**
*Duplicates represents all founded Duplicates, cleanly grouped to
*process it to the user
*/
typedef std::vector<DuplicateGroup> Duplicates;