2009-05-23 2 views
1

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

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

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

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

ответ

1

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

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

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

0

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

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