Я ищу эффективный метод для анализа списка файлов в дереве. Могут быть сотни миллионов путей к файлам.Создание дерева каталогов из списка путей к файлу
Решение грубой силы должно разбивать каждый путь на появление разделителя каталогов и перемещаться по дереву, добавляя в записи каталога и файла, выполняя строковые сравнения, но это будет исключительно медленным.
Входные данные обычно сортируются в алфавитном порядке, так что список будет что-то вроде:
C: \ Users \ Aaron \ AppData \ Amarok \ AFile
C: \ Users \ Aaron \ AppData \ Amarok \ Afile2
C: \ Users \ Aaron \ AppData \ Amarok \ Afile3
C: \ Users \ Aaron \ AppData \ Blender \ alibrary.dll
C: \ Users \ Aaron \ AppData \ Blender \ and_so_on.txt
Из этого заказа моей естественной реакции является разделение списков каталогов в группы ... как-то ... прежде чем делать медленные сравнения строк. Я действительно не уверен. Буду признателен за любые идеи.
Редактировать: Было бы лучше, если бы это дерево было лениво загружено сверху вниз, если это возможно.
Почему, по вашему мнению, это будет исключительно медленно? Если есть n строк, и каждая строка имеет до m символов (поэтому есть <= m компонентов каталога), это займет время O (nm). Для каждой строки вставьте ее в trie с глубиной не более m. nm - размер входных данных, поэтому он линейный. – p00ya