ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL_201006(재귀적 알고리즘)
    카테고리 없음 2020. 10. 6. 22:11

     

     

     

    부분집합 (Subset)

    function solution(arr) {
      let result = [];
      
      function search(index=0, subset=[]) {
        if (index === arr.length) {
        
          // 인덱스 값이 배열 길이 값과 같은 경우 종료
          result.push([...subset]);
          return
          
        } else {
          
          // 현재 인덱스의 요소를 부분 집합에 포함
          subset.push(arr[index]);
          search(index + 1, subset);
          
          // 현재 인덱스의 요소를 부분 집합에 포함하지 않음
          subset.pop();
          search(index + 1, subset);
        }
      }
      
      search();
      return result;
    }

     

     

    순열 (permutation)

    function solution(arr) {
      let result = [];
      
      function search(perArr=[], recordIndex=[]) {
        if (numberArr.length === perArr.length) {
        
          // 크기가 충족되면 종료
          result.push([...perArr]);
          return
          
        } else {
          for (let i = 0; i < numberArr.length; i++) {
          
          	// 이미 값이 들어갔다면 제외
            if (recordIndex[i]) continue;
    
            // 현재 인덱스의 값을 포함하는 경우
            perArr.push(numberArr[i]);
            recordIndex[i] = true;
            search(perArr, record);
    
            // 현재 인덱스의 값을 포함하지 않는 경우
            perArr.pop();
            recordIndex[i] = false;
          }
        }
      }
      
      search();
      return result;
    }

     

     

    주어진 배열의 요소로 만들 수 있는 모든 조합

    function solution(arr) {
      let result = [];
      
      function search(n, perArr=[], recordIndex=[]) {
        if (perArr.length === n) {
        
          // 크기가 충족되면 종료
          result.push([...perArr]);
          return
          
        } else {
          for (let i = 0; i < numberArr.length; i++) {
          
          	// 이미 값이 들어갔다면 제외
            if (recordIndex[i]) continue;
    
            // 현재 인덱스의 값을 포함하는 경우
            perArr.push(numberArr[i]);
            recordIndex[i] = true;
            search(n, perArr, record);
    
            // 현재 인덱스의 값을 포함하지 않는 경우
            perArr.pop();
            recordIndex[i] = false;
          }
        }
      }
      
      for (let k = 1; k < arr.length; k++) {
        search(k);
      }
    
      return result;
    }

    좀 더 효율적인 방법이 없을지 생각해봐야겠습니다.

     

     

     

    댓글

Designed by CHANUL