이 글은 JavaScript(코드)에서의 메모이제이션 사용법을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
memoization은 라틴어 memorandum("기억하다")에서 유래되었으며, 암기와 혼동하지 마세요.
먼저 Wikipedia의 설명을 살펴보겠습니다.
컴퓨팅에서 메모이제이션은 비용이 많이 드는 함수 호출의 결과를 저장하고 동일한 입력이 발생할 때 캐시된 결과를 반환함으로써 컴퓨터 프로그램 속도를 높이는 데 주로 사용되는 최적화 기술입니다.간단히 말해서, 메모이제이션은 비용이 많이 드는 함수 호출의 결과를 저장하고 동일한 입력이 다시 발생할 때 캐시된 결과를 반환함으로써 컴퓨터 프로그램 속도를 높이는 데 주로 사용되는 최적화 기술입니다.
이 글에서는 먼저 메모이제이션 최적화 기술을 활용한 간단한 예시를 소개한 후 밑줄에 메모이제이션을 활용한 소스코드를 해석하고 라이브러리를 다시 선택해 이해를 깊게 했습니다. ㅋㅋㅋ 함께 :
const factorial = n => { if (n === 1) { return 1 } else { return factorial(n - 1) * n } };
계속 변환하는 방법이 가장 일반적인 형태입니다.
const cache = [] const factorial = n => { if (n === 1) { return 1 } else if (cache[n - 1]) { return cache[n - 1] } else { let result = factorial(n - 1) * n cache[n - 1] = result return result } };
이 팩토리얼의 예를 통해 메모이제이션은 실행 결과를 저장하는 방식이라는 것을 알 수 있습니다. 다음에 동일한 입력이 발생하면 결과가 바로 출력되므로 실행 속도가 향상됩니다. .
소스코드에 밑줄 메모const factorialMemo = () => {
const cache = []
const factorial = n => {
if (n === 1) {
return 1
} else if (cache[n - 1]) {
console.log(`get factorial(${n}) from cache...`)
return cache[n - 1]
} else {
let result = factorial(n - 1) * n
cache[n - 1] = result
return result
}
}
return factorial
};
const factorial = factorialMemo();
const factorialMemo = func => { const cache = [] return function(n) { if (cache[n - 1]) { console.log(`get factorial(${n}) from cache...`) return cache[n - 1] } else { const result = func.apply(null, arguments) cache[n - 1] = result return result } } } const factorial = factorialMemo(function(n) { return n === 1 ? 1 : factorial(n - 1) * n });
이 소스코드를 참고하면 위의 계승은 다음과 같이 계속해서 변형될 수 있습니다. :// Memoize an expensive function by storing its results.
_.memoize = function(func, hasher) {
var memoize = function(key) {
var cache = memoize.cache;
var address = '' + (hasher ? hasher.apply(this, arguments) : key);
if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
return cache[address];
};
memoize.cache = {};
return memoize;
};
const factorial = _.memoize(function(n) { return n === 1 ? 1 : factorial(n - 1) * n });
소스 코드를 보면 lastArgs가 인수와 동일하면 func가 실행되지 않는다는 것을 알 수 있습니다.
요약메모이제이션은 불필요한 반복 계산을 방지하고 계산 속도를 향상시킬 수 있는 최적화 기술입니다.
위 내용은 JavaScript에서의 Memoization 사용법 소개(코드)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!