0
0
DSA Javascriptprogramming~5 mins

Min Heap vs Max Heap When to Use Which in DSA Javascript - Complexity Comparison

Choose your learning style9 modes available
Time Complexity: Min Heap vs Max Heap When to Use Which
O(log n)
Understanding Time Complexity

We want to understand how fast operations run in Min Heaps and Max Heaps.

Which heap is better depends on what we want to do with the data.

Scenario Under Consideration

Analyze the time complexity of inserting and removing elements in Min and Max Heaps.


class Heap {
  constructor(compare) {
    this.data = [];
    this.compare = compare;
  }

  insert(value) {
    this.data.push(value);
    this.bubbleUp();
  }

  bubbleUp() {
    let index = this.data.length - 1;
    while (index > 0) {
      let parentIndex = Math.floor((index - 1) / 2);
      if (this.compare(this.data[index], this.data[parentIndex])) {
        [this.data[index], this.data[parentIndex]] = [this.data[parentIndex], this.data[index]];
        index = parentIndex;
      } else {
        break;
      }
    }
  }

  remove() {
    if (this.data.length === 0) return null;
    const root = this.data[0];
    const end = this.data.pop();
    if (this.data.length > 0) {
      this.data[0] = end;
      this.bubbleDown();
    }
    return root;
  }

  bubbleDown() {
    let index = 0;
    const length = this.data.length;
    const element = this.data[0];

    while (true) {
      let leftChildIndex = 2 * index + 1;
      let rightChildIndex = 2 * index + 2;
      let swapIndex = null;

      if (leftChildIndex < length) {
        if (this.compare(this.data[leftChildIndex], element)) {
          swapIndex = leftChildIndex;
        }
      }

      if (rightChildIndex < length) {
        if (
          (swapIndex === null && this.compare(this.data[rightChildIndex], element)) ||
          (swapIndex !== null && this.compare(this.data[rightChildIndex], this.data[leftChildIndex]))
        ) {
          swapIndex = rightChildIndex;
        }
      }

      if (swapIndex === null) break;

      [this.data[index], this.data[swapIndex]] = [this.data[swapIndex], this.data[index]];
      index = swapIndex;
    }
  }
}

// Min Heap: compare = (a, b) => a < b
// Max Heap: compare = (a, b) => a > b

This code shows how insertion and removal work in both Min and Max Heaps using a comparison function.

Identify Repeating Operations

We look at the main repeated steps in the code.

  • Primary operation: The bubbleUp and bubbleDown loops that move elements up or down the tree.
  • How many times: At most, they run once per level of the heap, which is about log of the number of elements.
How Execution Grows With Input

As the heap grows, the number of levels increases slowly.

Input Size (n)Approx. Operations (bubbleUp or bubbleDown steps)
10About 3 to 4 steps
100About 6 to 7 steps
1000About 9 to 10 steps

Pattern observation: The steps grow slowly, roughly adding one step each time the input size multiplies by 2.

Final Time Complexity

Time Complexity: O(log n)

This means inserting or removing an element takes time that grows slowly as the heap gets bigger.

Common Mistake

[X] Wrong: "Min Heap and Max Heap have different time complexities for insert and remove."

[OK] Correct: Both heaps use the same structure and operations, so their time complexities are the same; only the comparison direction changes.

Interview Connect

Knowing when to use Min or Max Heap and understanding their time costs helps you solve problems efficiently and explain your choices clearly.

Self-Check

What if we changed the heap to a balanced binary search tree? How would the time complexity for insert and remove compare?