> 웹 프론트엔드 > JS 튜토리얼 > JavaScript로 간단한 메모 기능 코드를 작성하는 방법은 무엇입니까?

JavaScript로 간단한 메모 기능 코드를 작성하는 방법은 무엇입니까?

PHPz
풀어 주다: 2023-08-25 08:17:02
앞으로
873명이 탐색했습니다.

如何用 JavaScript 编写简单的 Memoization 函数代码?

메모리는 기능 성능을 향상시키기 위한 최적화 기술입니다. 암기 기술을 시작하기 전에 다음 예를 사용하여 그것이 필요한 이유를 이해해 봅시다.

예(피보나치 수를 찾는 쉬운 방법)

아래 예에서는 n번째 피보나치 수를 찾는 간단한 방법을 구현했습니다. 우리는 n번째 피보나치 수를 찾기 위해 재귀적 방법을 사용합니다.

으아악

위의 예는 1000 미만의 작은 입력값에 대해서는 잘 작동하지만, 104 범위의 입력값을 입력하면 평소보다 시간이 더 걸리고, 106 범위의 입력에 대해서는, 메모리 범위를 벗어났기 때문에 브라우저가 충돌합니다.

이전 계산 결과를 저장할 수 있는 메모리 기술을 사용하여 위 코드를 최적화할 수 있습니다. 예를 들어, 4번째 피보나치 수를 찾으려면 3번째와 2번째 피보나치 수를 찾아야 합니다. 마찬가지로 세 번째 피보나치 수를 찾으려면 두 번째와 첫 번째 피보나치 수를 찾아야 합니다. 그래서 여기서는 두 번째 피보나치 수를 두 번 계산합니다.

이제 피보나치 수열의 n번째로 큰 값을 구한다고 가정하면, 이를 몇 번 반복해야 하는지 생각해 볼 수 있습니다. 따라서 최적화 목적을 위해 처음으로 두 번째 피보나치 수를 계산하고 이를 임시 변수에 저장할 수 있습니다. 나중에 두 번째 피보나치 수를 다시 계산해야 할 때 배열에서 액세스할 수 있으므로 코드가 더 효율적이 됩니다.

또한 이전에 계산한 결과를 나중에 사용할 수 있도록 배열에 저장하는 것도 메모이제이션입니다.

문법

사용자는 아래 구문을 따라 n번째 피보나치 수를 기억할 수 있습니다.

으아악

위 구문에서는 먼저 'temp' 개체에 n번째 피보나치 수가 이미 있는지 확인한 다음 값을 반환합니다. 그렇지 않으면 해당 값을 계산하고 임시 개체에 광석을 추가합니다.

방법

1단계 – if 문을 사용하여 n의 결과가 임시 개체에 있는지 확인합니다. 그렇다면 이전에 계산된 값이 반환됩니다.

2단계 – n이 1보다 작거나 같으면 재귀 함수의 기본 사례로 1을 반환합니다.

3단계 – n-1 및 n-2 피보나치 수를 계산하고 이를 추가한 후 나중에 사용할 수 있도록 임시 개체에 저장합니다.

4단계 - n번째 피보나치 수를 저장하고 임시 객체에 반환합니다.

예(메모리를 사용하여 n번째 피보나치 수 찾기)

메모이제이션 기술을 사용하여 아래 예제의 첫 번째 예제에 대한 코드를 최적화했습니다. 이전 계산 결과를 저장하기 위해 임시 개체를 사용합니다. 출력에서 사용자는 아래 코드가 첫 번째 예제의 코드보다 더 효율적이라는 것을 확인할 수 있습니다.

으아악

방법: 추가 공간을 사용하지 않고 메모리 사용

1단계 – a를 0으로, b를 1로 초기화합니다.

2단계 – n번째 반복에 for 루프를 사용하여 n번째 피보나치 수를 찾습니다.

3단계 – 여기서 c는 (i-1)번째 피보나치 수를 저장하는 임시 변수입니다.

4단계 – b 변수의 값을 a에 저장합니다.

5단계 – 변수 c의 값을 변수 b에 저장합니다.

아래 예도 첫 번째 예의 최적화된 변형입니다. 두 번째 예에서는 임시 개체를 사용하여 이전 계산 결과를 저장했지만 아래 코드에서는 c라는 단일 임시 변수를 사용합니다.

아래 코드는 시간 복잡도가 O(n)이고 공간 복잡도가 O(1)이므로 피보나치 수열을 찾는 가장 효율적인 방법입니다.

으아악

이 튜토리얼에서는 시간과 공간을 더 효율적으로 만들기 위해 코드를 최적화하는 메모리 기술에 대해 배웠습니다. 사용자는 두 번째 및 세 번째 예에서 서로 다른 알고리즘을 사용하여 첫 번째 예의 코드를 어떻게 최적화했는지 확인할 수 있습니다.

위 내용은 JavaScript로 간단한 메모 기능 코드를 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿