ダイナミックプログラミング
7487 ワード
説明
FactorialとPascal三角形を用いた動的計画法動的計画法は、それを適用するときには非常に混乱する傾向がある概念ですが、メモ化(記憶ではない)は私のためにそれを識別する特性の一つです.コンピューティングにおいて、回想またはメモは、主に高価な機能呼び出しの結果を格納して、同じ入力が再び起こるとき、キャッシュされた結果を返すことによって、コンピュータ・プログラムをスピードアップするために主に使用される最適化技術です.
問題点:
組み合わせでパスカルの三角形を実装します.
再帰的な階乗関数
例:
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;
}
三角形関数( main ):
function trianglePascal(rows) {
let triangle = [];
for (let p = 0; p < rows; ++p) {
triangle.push(row(p))
}
return triangle;
}
print funtion (テスト結果)
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