>  기사  >  웹 프론트엔드  >  JavaScript_javascript 기술로 구현된 디지털 단계수 계산 알고리즘 공유

JavaScript_javascript 기술로 구현된 디지털 단계수 계산 알고리즘 공유

WBOY
WBOY원래의
2016-05-16 16:28:491527검색

지난 이틀간 어떤 마스터의 github을 보다가 그가 알고리즘에 더 관심이 있다는 것을 알게 되었고, 숫자를 계산하는 알고리즘 중 하나를 보고 흥미로워서 구현해 보았습니다. 나 자신.

알고리즘 설명 및 구현 원리

정수로 목표에 도달할 수 있는 동작 수를 계산합니다. 예를 들어 숫자 4는 다음과 같은 동작을 가질 수 있습니다.

코드 복사 코드는 다음과 같습니다.

[ 1, 3 ]
          [ 4 ]
[ 1, 1, 2 ]
                       [ 2, 2 ]
[ 1, 1, 1, 1 ]

사실 위의 조합을 통해 다음과 같은 결론이 도출될 수 있습니다.

1. 먼저 항목이 1인 모든 조합을 나열합니다
2. 왼쪽부터 아이템이 1개인 조합
3. 위 집합을 재귀적으로 실행하여 항목에서 1의 인덱스를 찾은 후 왼쪽부터 2개 항목의 값을 계산하면 결과는 재귀연산입니다
4. 상황 1과 2를 제외하세요

다음 세 가지 도구 기능이 제공됩니다.

코드 복사 코드는 다음과 같습니다.

// 배열의 값을 계산합니다
함수 계산(arg){
반환 eval(arg.join(' '));
}

//배열의 값을 출력합니다
함수 인쇄(arg){
for(var i = 0; i console.log(arg[i]);
}
}

//정방향 이동인지 역방향 이동인지 확인
함수 hasRepeat(src, dist){
(dist.length != 2)인 경우 false를 반환합니다.
for(var i = 0, len = src.length; i If(dist.length == src[i].length){
If(dist[0] == src[i][1]){
                   true를 반환합니다.
            }
}
}
거짓을 반환합니다.
}

알고리즘 구현은 아래와 같습니다.

코드 복사 코드는 다음과 같습니다.

함수 countSteps(n){
var 개수 = 0,i,j = 0;
var 결과 = [];
var newresult = [];
var 소스 = [];
var temparg = [];
// 모든 항목이 1인 배열을 생성합니다
for(i = 1; i           source.push(1);
}
If(n > 2){
for(j = 1; j Temparg.length = 0;
                 if(j // 왼쪽에서 오른쪽으로 항목이 1씩 증가하는 배열을 생성합니다
                                                   // 1.. 11.. 111..
                  Array.prototype.push.apply(temparg, source.slice(0, j));
                temparg.push(calculate(source.slice(j,n)));
                   result.push(temparg.slice(0));
                          // 항목에 1이 없을 때까지 배열의 내용을 반복합니다.
                   결합(temparg.slice(0));
            }
}
}
// 1을 포함하는 배열 항목 결합
// 111->21->3
함수 결합(arg){
var 선형 = [];
for(var i = 0; i If(arg[i] == 1){
If(i ==0 || i == 1){
Linearg.push(calculate(arg.slice(0,2)));
                     Array.prototype.push.apply(linearg, arg.slice(2, arg.length));
If(!hasRepeat(결과, 선형)){
                            result.push(linearg);
                         결합(linearg.slice(0));
                 }
                    반품;
                }
            }
}
}
//2개일 경우 1개보다 항목이 1개 더 있음
If(n == 2){
         result.push([2]);
}
// 모두 1인 경우 추가
result.push(출처);
// 모든 단계 출력
인쇄(결과);
console.log('총계:' result.length '이동 횟수');
}

//실행
countSteps(4);

//다음 내용 출력
/*
[ 1, 3 ]
[ 4 ]
[ 1, 1, 2 ]
[ 2, 2 ]
[ 1, 1, 1, 1 ]
총 5가지 걷기 유형이 있습니다
*/

요약

이 알고리즘은 실제로 특정 유형의 게임에 적용될 수 있습니다. 두 개체 사이의 거리가 일정할 경우 모든 가능성이 처리될 수 있습니다. 물론 대부분의 프런트엔드 엔지니어는 그렇지 않습니다. 알고리즘에 대한 지식은 상대적으로 적지만 여전히 가치가 있습니다. 알고리즘은 실제로 많은 UI 세부 사항에 사용됩니다. 앞으로 시간이 나면 더 많은 귀중한 의견을 게시하겠습니다. 🎜>

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.