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