동적 프로그래밍 및 메모이제이션
설명:
계승 및 파스칼 삼각형을 사용한 동적 프로그래밍 기법(메모이제이션). 동적 프로그래밍은 그것을 적용할 때 상당히 혼란스러운 개념이지만, 메모이제이션(암기가 아님)은 나를 식별하는 특성 중 하나입니다. 컴퓨팅에서 메모이제이션 또는 메모이제이션은 비용이 많이 드는 함수 호출의 결과를 저장하고 동일한 입력이 다시 발생할 때 캐시된 결과를 반환하여 컴퓨터 프로그램 속도를 높이는 데 주로 사용되는 최적화 기술입니다.
문제:
파스칼의 삼각형을 조합으로 구현합니다.
재귀 계승 함수:
예시:
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.
Reference
이 문제에 관하여(동적 프로그래밍 및 메모이제이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/difo23/dynamic-programming-and-memoization-5c83
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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);
}
}
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 ]
Reference
이 문제에 관하여(동적 프로그래밍 및 메모이제이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/difo23/dynamic-programming-and-memoization-5c83텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)