【发布时间】:2009-05-24 22:26:59
【问题描述】:
使用 FTP 协议递归创建目录的最快算法(类似于 UNIX mkdir -p)通常是什么?
我考虑过一种方法:
- MKDIR 节点
- 如果错误和剩余节点与下一个节点一起转到 1
- 结束
但是如果目录的一部分很可能存在,这可能会导致性能不佳。例如,通过一些摊销,“/a/b/c/d/e/f/g”路径的“/a/b/c/d”部分存在 %99 的时间。
【问题讨论】:
标签: algorithm ftp file-transfer
使用 FTP 协议递归创建目录的最快算法(类似于 UNIX mkdir -p)通常是什么?
我考虑过一种方法:
但是如果目录的一部分很可能存在,这可能会导致性能不佳。例如,通过一些摊销,“/a/b/c/d/e/f/g”路径的“/a/b/c/d”部分存在 %99 的时间。
【问题讨论】:
标签: algorithm ftp file-transfer
考虑到发送命令和接收响应需要花费大部分时间,创建目录路径的最快方法是使用尽可能少的命令。
因为除了尝试创建或 cd 到一个目录来检查它的存在之外别无他法,只需要使用 mkdir a; mkdir a/b; ...,mkdir a/b/c/d/e/f 通常是最快的方法(不要 cd 进入子目录来创建下一个,因为这会延长过程)。
如果您以这种方式创建多个目录,您当然可以跟踪您已经创建了哪些顶级目录。此外,根据路径的长度和上层目录已经存在的可能性,您可以尝试从例如开始mkdir a/b/c(用于 a/b/c/d/e/f),如果不成功则回溯。但是,如果目录更可能不存在,从长远来看,这实际上会变慢。
【讨论】:
如果现有目录层次结构以任何给定深度结束的可能性相同,则 二进制搜索 开始位置将是最快的方法。但是作为dseifert points out,如果大多数时候目录已经存在到k级,那么在k级而不是n/2级开始二进制搜索会更快。
顺便说一句,您必须创建 很多 非常深 目录,这样的优化才值得您花时间。你确定你没有过早优化吗?
【讨论】: