Unit 3 Algorithms
Palindrome
Version 1
function palindrome(string) {
var copy = string.replace(/[^a-z|A-Z]+/g, "").toLowerCase();
var rev = copy.split("").reverse().join("");
return copy === rev;
}Palindrome
Version 2
function palindrome(string) {
var start = 0;
var end = copy.length - 1;
while(start < end) {
if (copy[start] !== copy[end]) return false;
start++;
end --;
}
return true;
}isPrime
O( √n ) time complexity
function isPrime(num) {
if (num === 2) return true;
if (num % 2 === 0 || num < 2) return false;
for (var i = 3, n = Math.sqrt(num); i < n; i += 2) {
if (num % i === 0) return false;
}
return true;
}Fibonacci
naive implementation
function nthFibonacci(num) {
if (num < 2) return num;
return nthFibonacci(num - 1) + nthFibonacci(num - 2);
}Fibonacci
O(n) time complexity & O(n) space complexity
function nthFibonacci(num) {
if (num < 2) return num;
var store = [0, 1];
for (var i = 1; i < num; i++) {
store.push(store[i] + store[i - 1]);
}
return store.pop();
}Fibonacci
O(n) time complexity & O(1) space complexity
function nthFibonacci(num) {
var sqrt5 = Math.sqrt(5);
var pow = Math.pow;
var numer = pow((1+sqrt5)/2, num) - pow((1-sqrt5)/2, num);
return Math.round(numer/sqrt5);
}Bind
version 1
function functionBind(func, context) {
context._func = func;
return function() {
return context._func();
}
}Bind
version 2
function functionBind(func, context) {
var obj = Object.assign(context, {func: func})
return function() {
return obj.func();
}
}Rock Paper Scissors
with recursion
function rockPaperScissors(num) {
var options = ["rock", "paper", "scissors"];
var outcomes = [];
if (num === 0) return outcomes;
function recRPS(game) {
if (game.length === num) outcomes.push(game);
else options.forEach( choice => recRPS(game.concat(choice)) );
}
recRPS([]);
return outcomes;
}Insertion Sort
O(n^2) time complexity
function insertionSort(array) {
for(var i = 1, n = array.length; i < n; i++) {
var temp = array[i];
var index = i;
while(index > 0 && temp < array[index-1]) {
array[index] = array[index-1];
index--;
}
array[index] = temp;
}
return array;
}Insertion Sort
O(n^2) time complexity
function insertionSort(array) {
for(var i = 1, n = array.length; i < n; i++) {
var temp = array[i];
var index = i;
while(index > 0 && temp < array[index-1]) {
array[index] = array[index-1];
index--;
}
array[index] = temp;
}
return array;
}Bubble Sort
O(n^2) time complexity
function bubbleSort(array) {
var isSorted = false;
var n = array.length;
while (!isSorted) {
isSorted = true;
for (var i = 1; i < n ; i++){
if( array[i-1] > array[i]) {
var temp = array[i-1]
array[i-1] = array[i];
array[i] = temp;
isSorted = false;
}
}
n--;
}
return array;
}Merge Sort
O( n log(n) ) time complexity
function mergeSort(array) {
if (array.length < 2) return array;
var mid = Math.floor(array.length /2);
var leftHalf = mergeSort(array.slice(0,mid));
var rightHalf = mergeSort(array.slice(mid));
return mergeArrays(leftHalf, rightHalf);
}function mergeArrays(arr1, arr2) {
var merged = [];
while (arr1.length > 0 && arr2.length > 0) {
merged.push( arr1[0] < arr2[0] ? arr1.shift() : arr2.shift() );
}
return merged.concat( arr1.length > 0 ? arr1 : arr2);
}Helper Function
Unit 3 Algorithms
By William Gottschalk
Unit 3 Algorithms
- 555