Memandangkan fungsi fn, kembalikan versi dihafal bagi fungsi itu.
Fungsi dihafal ialah fungsi yang tidak akan dipanggil dua kali dengan input yang sama. Sebaliknya ia akan mengembalikan nilai cache.
Anda boleh menganggap terdapat 3 kemungkinan fungsi input: jumlah, fib dan faktorial.
jumlah menerima dua integer a dan b dan mengembalikan a b. Andaikan bahawa jika nilai telah dicache untuk argumen (b, a) di mana a != b, ia tidak boleh digunakan untuk argumen (a, b). Contohnya, jika hujahnya ialah (3, 2) dan (2, 3), dua panggilan berasingan harus dibuat.
fib menerima integer tunggal n dan mengembalikan 1 jika n <= 1 atau fib(n - 1) fib(n - 2) sebaliknya.
faktorial menerima integer tunggal n dan mengembalikan 1 jika n <= 1 atau faktorial(n - 1) * n sebaliknya.
Contoh 1:
Input:
fnName = "sum" actions = ["call","call","getCallCount","call","getCallCount"] values = [[2,2],[2,2],[],[1,2],[]]
Output: [4,4,1,3,2]
Penjelasan:
const sum = (a, b) => a + b; const memoizedSum = memoize(sum); memoizedSum(2, 2); // "call" - returns 4. sum() was called as (2, 2) was not seen before. memoizedSum(2, 2); // "call" - returns 4. However sum() was not called because the same inputs were seen before. // "getCallCount" - total call count: 1 memoizedSum(1, 2); // "call" - returns 3. sum() was called as (1, 2) was not seen before. // "getCallCount" - total call count: 2 </p> <p><strong>Contoh 2:</strong></p> <p><strong>Input:</strong><br> </p> <pre class="brush:php;toolbar:false">fnName = "factorial" actions = ["call","call","call","getCallCount","call","getCallCount"] values = [[2],[3],[2],[],[3],[]]
Output: [2,6,2,2,6,2]
Penjelasan:
const factorial = (n) => (n <= 1) ? 1 : (n * factorial(n - 1)); const memoFactorial = memoize(factorial); memoFactorial(2); // "call" - returns 2. memoFactorial(3); // "call" - returns 6. memoFactorial(2); // "call" - returns 2. However factorial was not called because 2 was seen before. // "getCallCount" - total call count: 2 memoFactorial(3); // "call" - returns 6. However factorial was not called because 3 was seen before. // "getCallCount" - total call count: 2
Contoh 3:
Input:
fnName = "fib" actions = ["call","getCallCount"] values = [[5],[]]
Output: [8,1]
Penjelasan:
fib(5) = 8 // "call" // "getCallCount" - total call count: 1
Kekangan:
> 0 <= a, b <= 105 > 1 <= n <= 10 > 0 <= actions.length <= 105 > actions.length === values.length
tindakan[i] ialah salah satu daripada "panggilan" dan "getCallCount"
fnName ialah salah satu daripada "jumlah", "faktorial" dan "fib"
Sambil anda terus membangunkan dan mengoptimumkan aplikasi JavaScript anda, ingat kuasa penghafalan. Dengan mengenal pasti fungsi yang betul untuk menghafal dan melaksanakan strategi caching yang sesuai, anda boleh membuka kunci keuntungan prestasi yang ketara dan mencipta pengalaman pengguna yang lebih lancar dan responsif untuk pelanggan anda.
Saya harap artikel ini membantu. Jika anda menyukai artikel tersebut, sila tinggalkan suka dan jangan ragu untuk meninggalkan sebarang kebimbangan di bahagian komen. Itu sahaja untuk hari ini.
Atas ialah kandungan terperinci Letcode #Memoize. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!