DEV Community

lguaregua
lguaregua

Posted on

The Two Pillars of Algorithm Performance: Time and Space Complexity

Hey Coders!

Have you ever looked at your code and wondered why it's taking ages to run, or why it's eating up your memory like there's no tomorrow? Well, fret no more! Let's dive deep into the world of Time and Space complexities and decode their mysteries!

Time Complexity – The Need for Speed

Simply put, time complexity is how long your code takes to run. But as the cool kids of computer science say, we express it using Big O notation – because who doesn't like a little math in their life?

  • O(1): Constant Time - When your code is lightning fast and doesn't care about the size of the input, it's got O(1) complexity. Like when you just get the first item from an array:
function getFirst(arr){
    return arr[0];
}
Enter fullscreen mode Exit fullscreen mode
  • O(n): Linear Time - This one's a straight shooter. Your code takes time proportional to the input size. A good old-fashioned linear search is a perfect example:
function linearSearch(arr, target){
    for(let i = 0; i < arr.length; i++){
        if(arr[i] === target){
            return i; 
        }
    }
    return -1; 
}
Enter fullscreen mode Exit fullscreen mode
  • O(n^2): Quadratic Time - Here's when things start to slow down a bit. For every input, you're running another loop – like a clumsy bubble sort:
function bubbleSort(arr){
    let len = arr.length;
    for(let i = 0; i < len; i++){
        for(let j = 0; j < len - i - 1; j++){
            if(arr[j] > arr[j+1]){
                let temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    return arr;
}
Enter fullscreen mode Exit fullscreen mode
  • O(log n): Logarithmic Time - Now, this is where it gets fancy. Your code becomes faster as the input size increases, like with a binary search:
function binarySearch(arr, target){
    let left = 0;
    let right = arr.length - 1;
    while (left <= right) {
        const mid = left + Math.floor((right - left) / 2);
        if (arr[mid] === target) {
            return mid;
        }
        if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}
Enter fullscreen mode Exit fullscreen mode

Space Complexity – How Much Room Do You Need?

Space complexity is all about how much memory your code needs. Because while time is money, memory isn't free either!

  • If your code creates a new array of the same size, the space complexity is O(n). Like doubling the elements of an array:
function doubleArray(arr){
    let newArray = [];
    for(let i = 0; i < arr.length; i++){
        newArray.push(2 * arr[i]);
    }
    return newArray;
}
Enter fullscreen mode Exit fullscreen mode
  • If your code uses a fixed amount of space no matter the size of the input, it has O(1) space complexity. Like summing up an array:
function sumArray(arr){
    let sum = 0;
    for(let i = 0; i < arr.length; i++){
        sum += arr[i];
    }
    return sum;
}
Enter fullscreen mode Exit fullscreen mode

So, there you have it, folks! Understanding time and space complexities is a game-changer. It helps us write more efficient code, and who doesn't love that? But remember, balancing time and space efficiency is an art. So keep experimenting, keep coding, and most importantly, keep having fun!

Stay tuned for more exciting dives into the world of coding!

Top comments (2)

Collapse
 
cloudkungfu profile image
Javel Rowe

Great overview of two important topics!

Collapse
 
manuelcv1 profile image
Manuel

Excellent and simple explanation!