Самый быстрый способ реализовать mktree в FTP - PullRequest
1 голос
/ 23 мая 2009

Какой вообще самый быстрый алгоритм для рекурсивного создания каталога (аналогично UNIX mkdir -p) с использованием протокола FTP?

Я рассмотрел один подход:

  1. узел MKDIR
  2. если ошибка и оставленные узлы переходят в 1 со следующим узлом
  3. конец

Но это может иметь плохую производительность, если часть каталога, скорее всего, существует. Например, с некоторой амортизацией часть "/ a / b / c / d" пути "/ a / b / c / d / e / f / g" существует в 99% случаев.

Ответы [ 2 ]

1 голос
/ 24 мая 2009

Учитывая, что отправка команды и получение ответа занимает большую часть времени, самый быстрый способ создать путь к каталогу - использовать как можно меньше команд.

Поскольку нет другого способа, кроме как попытаться создать или перейти в каталог для проверки его существования, просто используя mkdir a; MKDIR A / B; ..., mkdir a / b / c / d / e / f был бы в общем случае самым быстрым способом (не переходите в подкаталоги для создания следующего, поскольку это продлит процесс)

Если вы создадите несколько каталогов таким образом, вы, конечно, сможете отслеживать, какие каталоги верхнего уровня вы уже создали. Кроме того, в зависимости от длины ваших путей и вероятности того, что верхние каталоги уже существуют, вы можете попробовать начать, например, с. mkdir a / b / c (для a / b / c / d / e / f), а затем откат назад, если это не удалось. Однако, если более вероятно, что каталоги не существуют, в конечном итоге это будет медленнее.

0 голосов
/ 24 мая 2009

Если существующая иерархия каталогов с равной вероятностью заканчивается на любой заданной глубине, то бинарный поиск для начальной позиции будет самым быстрым способом. Но, как указывает dseifert , если в большинстве случаев каталоги уже существуют вплоть до уровня k, то будет быстрее начать бинарный поиск на уровне k, а не на уровне n / 2.

Кстати, вам нужно создать много из очень глубоких каталогов, чтобы такая оптимизация стоила вашего времени. Вы уверены, что не оптимизируете преждевременно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...