2009-05-23 5 views
1

일반적으로 FTP 프로토콜을 사용하여 재귀 적으로 디렉토리를 만드는 가장 빠른 알고리즘은 무엇입니까 (UNIX mkdir -p와 유사)?FTP에서 mktree를 구현하는 가장 빠른 방법

나는 한 가지 방법으로 간주 한 : 오류 및 노드가 다음 노드

  • 과 1로 이동 왼쪽 경우

    1. MKDIR 노드
    2. 하지만이 부분의 경우 나쁜 성능을 가질 수 의 디렉토리가 존재할 확률이 높습니다. 예를 들어, 일부 상각을 사용하면 "/ a/b/c/d/e/f/g"경로의 "/ a/b/c/d"부분이 % 99 번 존재합니다.

    답변

    1

    명령을 보내고 응답을 수신하는 것이 대부분의 시간을 차지하는 것을 고려하면 디렉토리 경로를 만드는 가장 빠른 방법은 가능한 한 적은 수의 명령을 사용하는 것입니다.

    mkdir a를 사용하여 디렉토리를 만들거나 cd로 디렉토리의 존재 여부를 확인하는 방법 외에는 없습니다. 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라고 말하면 레벨이 n/2가 아닌 레벨 k에서 이진 검색을 시작하는 것이 더 빠릅니다.

    BTW, 당신은 많은 최적화 이런 종류의에 대한 매우 깊은 디렉토리의 당신의 시간 가치가있을 수 를 작성해야 할 것입니다. 조기에 최적화하지 않았습니까?