Crashers - 3.17 Algorithmic Efficiency Javascript Hacks
Learn about algorithms and how they can be more or less efficient
Algorithmic Efficiency Hacks: Javascript
Let’s test your knowledge on algorithmic efficiency!
Hack 1: How Much Time?
Objective: write the time complexity of the algorithm below using Big-O notation.
(don’t worry about special cases such as n = 1 or n = 0).
%%javascript
let n = 10; // change this value to test different outputs!
for (let i = 0; i < n * 2; i++) {
console.log(i);
}
//TODO: print the above algorithm's time complexity
console.log("O(n)");
<IPython.core.display.Javascript object>
Hack 2: Your Turn!
Objective: write an algorithm with O(n^2) time complexity.
%%javascript
const n = 10; // change this if you want.
// O(n^2) example — nested loops
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
console.log(i, j);
}
}
console.log("Time complexity: O(n^2)");
<IPython.core.display.Javascript object>
Hack 3: Gotta Go Fast!
Objective: Optimize this algorithm so that it has a lower time complexity without modifying the outer loop
%%javascript
const n = 10; // change this
let count = 0;
for (let i = 0; i < n; i++) { // Outer loop, DO NOT MODIFY
// Instead of looping j < i, add i directly
count += i;
}
console.log(count);
console.log("Time complexity: O(n)");
<IPython.core.display.Javascript object>
Hack 4: Extra Challenge
Objective: Write an algorithm that does NOT have a time complexity of O(1), O(n), or O(n^x) and identify the time complexity
(I will not accept O(n^3) or some other power, it needs to be more complex.)
%%javascript
import itertools
n = int(input())
nums = list(range(n))
perms = list(itertools.permutations(nums))
print(len(perms))
print("Time complexity: O(n!)")
<IPython.core.display.Javascript object>