동적 프로그래밍 및 메모이제이션



설명:



계승 및 파스칼 삼각형을 사용한 동적 프로그래밍 기법(메모이제이션). 동적 프로그래밍은 그것을 적용할 때 상당히 혼란스러운 개념이지만, 메모이제이션(암기가 아님)은 나를 식별하는 특성 중 하나입니다. 컴퓨팅에서 메모이제이션 또는 메모이제이션은 비용이 많이 드는 함수 호출의 결과를 저장하고 동일한 입력이 다시 발생할 때 캐시된 결과를 반환하여 컴퓨터 프로그램 속도를 높이는 데 주로 사용되는 최적화 기술입니다.

문제:



파스칼의 삼각형을 조합으로 구현합니다.

재귀 계승 함수:



예시:



    factorial de 4! =  4*3*2*1*0!
    0! = 1

메모이제이션 및 재귀를 사용한 계승 함수:



function factorialDynamic() {

    let cache = new Map();

    return function factorial(n) {
        if (cache.has(n)) {
            return cache.get(n)
        } else {
            if (n <= 1) return 1;
            cache.set(n, n * factorial(n - 1));
            return cache.get(n);

    }

}
const factorial = factorialDynamic();

조합 기능:




예시:


    Function: (P Q) = P! / (Q!-(P-Q)!)



function combinatorial(p, q) {
    return (factorial(p) / (factorial(q) * factorial(p - q)));
}

파스칼 삼각형 함수:




예시:


Combinatorial:

fila          (p q)
0             (0 0)
1           (1 0) (1 1)
2        (2 0) (2 1) (2 2)
3     (3 0) (3 1) (3 2) (3 3)



행 함수:


function row(p) {

    let row = [];

    for (let q = 0; q <= p; ++q) {
        row.push(combinatorial(p, q));
    }
    return row;

}

삼각형 기능(메인):



function trianglePascal(rows) {

    let triangle = [];

    for (let p = 0; p < rows; ++p) {
        triangle.push(row(p))
    }
    return triangle;
}

인쇄 기능(테스트 결과):



function print(triangle) {

    for (let row of triangle) {
        console.log(row);
    }
}
print(trianglePascal(6));

1              [ 1 ]
2             [ 1, 1 ]
3           [ 1, 2, 1 ]
4         [ 1, 3, 3, 1 ]
5       [ 1, 4, 6, 4, 1 ]
6     [ 1, 5, 10, 10, 5, 1 ]


확인할 수 있습니다code by @difo23.

좋은 웹페이지 즐겨찾기