2009-05-23 24 views
1

什么是使用FTP协议递归制作目录(类似于UNIX mkdir -p)的最快算法?在FTP中实现mktree的最快方法

我也考虑过一种方法:

  1. MKDIR节点
  2. 如果错误和节点离开去1下一个节点
  3. 结束

但是,这可能会表现不好,如果部分目录最有可能存在。例如,对于某些分期付款,“/ a/b/c/d/e/f/g”路径的“/ a/b/c/d”部分存在%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级开始二进制搜索会更快。

顺便说一句,你就必须要创建很多很深目录对于这种优化是值得你花时间。你确定你没有过早优化吗?