This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let memo = {}; | |
function factorial(n) { | |
// if this function has calculated factorial(n) previously, | |
// fetch the stored result in memo | |
if (n in memo) return memo[n]; | |
if (n === 1) return 1; | |
// otherwise, it havs not calculated factorial(n) previously, | |
// so calculate it now, but store the result in case it is |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// O(1) | |
function constant1(n) { | |
return n * 2 + 1; | |
} | |
// O(1) | |
function constant2(n) { | |
for (let i = 1; i <= 100; i++) { | |
console.log(i); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// O(log(n)) | |
function logarithmic1(n) { | |
if (n <= 1) return; | |
logarithmic1(n / 2); | |
} | |
// O(log(n)) | |
function logarithmic2(n) { | |
let i = n; | |
while (i > 1) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// O(n) | |
function linear1(n) { | |
for (let i = 1; i <= n; i++) { | |
console.log(i); | |
} | |
} | |
// O(n), where n is the length of the array | |
function linear2(array) { | |
for (let i = 0; i < array.length; i++) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// O(n * log(n)) | |
function loglinear(n) { | |
if (n <= 1) return; | |
for (let i = 1; i <= n; i++) { | |
console.log(i); | |
} | |
loglinear(n / 2); | |
loglinear(n / 2); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// O(n^2) | |
function quadratic(n) { | |
for (let i = 1; i <= n; i++) { | |
for (let j = 1; j <= n; j++) {} | |
} | |
} | |
//Example of Quadratic and Cubic runtime. | |
// O(n^3) | |
function cubic(n) { | |
for (let i = 1; i <= n; i++) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// O(2^n) | |
function exponential2n(n) { | |
if (n === 1) return; | |
exponential_2n(n - 1); | |
exponential_2n(n - 1); | |
} | |
// O(3^n) | |
function exponential3n(n) { | |
if (n === 0) return; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function fastFib(n, memo = {}) { | |
if (n in memo) return memo[n]; | |
if (n === 1 || n === 2) return 1; | |
memo[n] = fastFib(n - 1, memo) + fastFib(n - 2, memo); | |
return memo[n]; | |
} | |
fastFib(6); // => 8 | |
fastFib(50); // => 12586269025 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function fib(n) { | |
let mostRecentCalcs = [0, 1]; | |
if (n === 0) return mostRecentCalcs[0]; | |
for (let i = 2; i <= n; i++) { | |
const [secondLast, last] = mostRecentCalcs; | |
mostRecentCalcs = [last, secondLast + last]; | |
} | |
return mostRecentCalcs[1]; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function fibMemo(n, memo = { 0: 0, 1: 1 }) { | |
if (n in memo) return memo[n]; | |
memo[n] = fibMemo(n - 1) + fibMemo(n - 2); | |
return memo[n]; | |
} |
OlderNewer