스택큐힙리스트

HTML 태그를 한국어로 번역하면 다음과 같습니다.제 객체의 파일들을 얻기 위해 파일 시스템 구조를 반복합니다. 본문

카테고리 없음

HTML 태그를 한국어로 번역하면 다음과 같습니다.제 객체의 파일들을 얻기 위해 파일 시스템 구조를 반복합니다.

스택큐힙리스트 2023. 12. 31. 01:07
반응형

저는 재귀를 조금 다뤄보고, 디렉토리에 하나의 자식만 있는 경우에 동작하는 멍청한 함수를 만들었습니다. 문제는 더 많은 자식을 처리할 방법을 이해할 수 없다는 것입니다. 모든 자식에 대해 반복하는 방법이 있을까요?


여기 제 코드가 있습니다:



var json = {path:/pages/services/project, is_dir:true, children:[{path:/pages/services/project/headline,is_dir:false,children:[]},{path:/pages/services/project/text,is_dir:false,children:[]},
{path:/pages/services/project/test/,is_dir:true,children:[{path:/pages/services/project/test/text,is_dir:false,children:[]},
{path:/pages/services/project/test/picture,is_dir:false,children:[]}]}]};
json.children.forEach(function (child) {
out(goToDeepestPoint(child).path);
});
function goToDeepestPoint(node) {
if (node.is_dir)
return goToDeepestPoint(node.children[0]);
else
return node;
}
function out()
{
var args = Array.prototype.slice.call(arguments, 0);
document.getElementById('output').innerHTML += args.join( ) + \n;
}

<pre id=output></pre>


답변 1

작동하는 솔루션:


var json = {path:/pages/services/project, is_dir:true, children:[{path:/pages/services/project/headline,is_dir:false,children:[]},{path:/pages/services/project/text,is_dir:false,children:[]},
{path:/pages/services/project/test/,is_dir:true,children:[{path:/pages/services/project/test/text,is_dir:false,children:[]},
{path:/pages/services/project/test/picture,is_dir:false,children:[]}]}]};
json.children.forEach(function (child) {
goToDeepestPoint(child);
});
function goToDeepestPoint(node) {
if (node.is_dir){
for(var i=0;i<node.children.length;i++){
goToDeepestPoint(node.children[i]);
}
}
else {
out(node.path);
}
}
function out()
{
var args = Array.prototype.slice.call(arguments, 0);
document.getElementById('output').innerHTML += args.join( ) + \n;
}

답변 2

제 객체 내 파일 시스템 구조를 순환(loop)하여 모든 파일을 가져오는 방법에 대해 알아볼 것입니다. 프로그래밍에서 파일 시스템 구조를 순회(loop)하는 것은 매우 일반적인 작업입니다. 하지만 이 작업을 효율적으로 수행하기 위해서는 적절한 알고리즘과 방법이 필요합니다. 이제 제가 어떻게 파일 시스템 구조를 순회(loop)하여 모든 파일을 가져오는지 설명드리겠습니다.
우선, 제 객체에는 파일 시스템 구조를 나타내는 트리(tree)가 있다고 가정하겠습니다. 트리의 각 노드(node)는 디렉토리(Directory) 혹은 파일(File)을 나타냅니다. 제 첫 번째 알고리즘은 재귀(recursive)를 사용하는 방법입니다.
재귀 알고리즘은 노드를 입력으로 받아 해당 노드가 디렉토리인지 파일인지 확인합니다. 디렉토리라면, 해당 디렉토리 내의 모든 파일과 서브 디렉토리(sub-directory)에 대해 재귀적으로 같은 알고리즘을 호출합니다. 이렇게 재귀적으로 실행될 때마다 파일이나 디렉토리를 찾을 때마다 결과 리스트에 해당 파일을 추가합니다.
만약 노드가 파일인 경우에는 해당 파일을 결과 리스트에 추가합니다. 이와 같은 방법으로 재귀 알고리즘은 모든 파일을 순회하여 제 객체에 저장된 결과 리스트에 추가합니다.
두 번째 알고리즘은 스택(stack)을 사용하는 방법입니다. 스택은 후입선출(LIFO) 구조로 파일 시스템 구조를 순회하는 데에 적합합니다.
이 알고리즘에서는 초기에 루트 디렉토리를 스택에 넣습니다. 그러면 반복문을 실행하면서 스택에서 디렉토리를 하나씩 꺼내는데, 해당 디렉토리의 모든 파일과 디렉토리를 찾아 스택에 추가합니다. 이렇게 반복문을 실행하면 모든 파일을 찾을 때까지 반복합니다.
알고리즘의 핵심은 디렉토리를 순회할 때 해당 디렉토리의 모든 파일과 디렉토리를 찾아 스택에 추가하는 것입니다. 이렇게 스택을 사용하면 파일 시스템 구조를 효율적으로 순회할 수 있습니다.
이처럼, 제 객체의 파일 시스템 구조를 순회하여 모든 파일을 가져오는 알고리즘에는 재귀적인 방법과 스택을 사용하는 방법이 있습니다. 두 가지 방법 모두 효과적이지만 재귀 알고리즘은 메모리를 더 많이 사용하고, 스택 알고리즘은 반복을 사용하기 때문에 약간의 성능 차이가 있을 수 있습니다.
이로써 파일 시스템 구조를 순회(loop)하여 모든 파일을 가져오는 방법에 대해 알아보았습니다. 이 알고리즘을 적절하게 구현하면 제 객체의 파일 시스템 구조에서 필요한 모든 파일을 효율적으로 찾을 수 있을 것입니다.

반응형
Comments