Bird
Raised Fist0
Data Structures Theoryknowledge~6 mins

Time complexity (Big O notation) in Data Structures Theory - Full Explanation

Choose your learning style10 modes available
Introduction
Imagine you want to know how long a task will take as the size of the input grows. Time complexity helps us understand how the time needed changes when we handle bigger problems.
Explanation
What is Time Complexity
Time complexity measures how the number of steps an algorithm takes grows as the input size increases. It focuses on the main factor that affects running time, ignoring small details.
Time complexity shows how an algorithm's running time changes with input size.
Big O Notation
Big O notation is a way to describe the upper limit of time complexity. It tells us the worst-case scenario for how long an algorithm might take, using simple expressions like O(n) or O(n²).
Big O notation expresses the worst-case growth rate of an algorithm's running time.
Common Big O Classes
Some common time complexities are constant time O(1), linear time O(n), quadratic time O(n²), and logarithmic time O(log n). Each describes how the time grows as input size n increases.
Different Big O classes describe different growth rates of running time.
Why Time Complexity Matters
Knowing time complexity helps us choose efficient algorithms that run faster on large inputs. It guides us to avoid slow methods that become impractical as data grows.
Time complexity helps pick algorithms that stay efficient as input size grows.
Real World Analogy

Imagine sorting a deck of cards. If you have just a few cards, sorting is quick. But if you have hundreds, some ways of sorting take much longer than others. Time complexity is like knowing how your sorting time grows as you add more cards.

What is Time Complexity → How the time to sort cards increases as you add more cards
Big O Notation → A simple label like 'fast' or 'slow' that tells you the worst time sorting might take
Common Big O Classes → Different sorting methods that take different amounts of time, like sorting by hand (slow) or using a machine (fast)
Why Time Complexity Matters → Choosing the best way to sort so you don't waste time when the deck is big
Diagram
Diagram
┌───────────────┐
│ Input Size n  │
└──────┬────────┘
       │
       ▼
┌─────────────────────────┐
│ Time Complexity Growth   │
│                         │
│ O(1)  ──┐               │
│ O(log n)│               │
│ O(n)   │               │
│ O(n²)  │               │
└────────┴───────────────┘
Diagram showing how time complexity grows with input size for different Big O classes.
Key Facts
Time Complexity → A measure of how the running time of an algorithm changes as input size grows.
Big O Notation → A notation that describes the upper bound of an algorithm's running time.
O(1) - Constant Time → An algorithm that takes the same time regardless of input size.
O(n) - Linear Time → An algorithm whose running time grows directly with input size.
O(n²) - Quadratic Time → An algorithm whose running time grows proportionally to the square of input size.
O(log n) - Logarithmic Time → An algorithm whose running time grows slowly as input size increases.
Code Example
Data Structures Theory
def linear_search(arr, target):
    for i in range(len(arr)):
        if arr[i] == target:
            return i
    return -1

print(linear_search([1, 3, 5, 7, 9], 7))
OutputSuccess
Common Confusions
Big O shows exact running time
Big O shows exact running time Big O only shows the growth trend, not the exact time or number of steps.
Lower Big O always means faster in practice
Lower Big O always means faster in practice Sometimes algorithms with better Big O are slower for small inputs due to overhead.
Big O includes all details of running time
Big O includes all details of running time Big O ignores constants and small terms to focus on main growth factors.
Summary
Time complexity helps us understand how an algorithm's running time grows with input size.
Big O notation describes the worst-case growth rate using simple expressions like O(n) or O(n²).
Knowing time complexity guides us to choose efficient algorithms for large inputs.

Practice

(1/5)
1. What does O(n) time complexity mean in simple terms?
easy
A. The running time stays constant regardless of input size
B. The running time grows linearly with input size
C. The running time grows exponentially with input size
D. The running time grows logarithmically with input size

Solution

  1. Step 1: Understand the meaning of O(n)

    O(n) means the time grows in direct proportion to the input size n.
  2. Step 2: Compare with other growth types

    Unlike constant time O(1) or logarithmic O(log n), O(n) means if input doubles, time roughly doubles.
  3. Final Answer:

    The running time grows linearly with input size -> Option B
  4. Quick Check:

    Linear growth = O(n) [OK]
Hint: Linear means time grows directly with input size [OK]
Common Mistakes:
  • Confusing O(n) with constant time O(1)
  • Thinking O(n) means exponential growth
  • Mixing up logarithmic and linear growth
2. Which of the following is the correct way to express constant time complexity in Big O notation?
easy
A. O(1)
B. O(n^2)
C. O(n)
D. O(log n)

Solution

  1. Step 1: Recall constant time definition

    Constant time means the operation takes the same time regardless of input size.
  2. Step 2: Match with Big O notation

    O(1) represents constant time complexity.
  3. Final Answer:

    O(1) -> Option A
  4. Quick Check:

    Constant time = O(1) [OK]
Hint: Constant time is always O(1) regardless of input [OK]
Common Mistakes:
  • Choosing O(n) for constant time
  • Confusing logarithmic with constant time
  • Writing O(0) which is invalid
3. Consider the following code snippet:
for i in range(n):
    for j in range(n):
        print(i, j)

What is the time complexity of this code?
medium
A. O(n)
B. O(1)
C. O(n log n)
D. O(n^2)

Solution

  1. Step 1: Analyze the outer loop

    The outer loop runs n times.
  2. Step 2: Analyze the inner loop

    For each iteration of the outer loop, the inner loop runs n times.
  3. Step 3: Calculate total operations

    Total operations = n * n = n², so time complexity is O(n^2).
  4. Final Answer:

    O(n^2) -> Option D
  5. Quick Check:

    Nested loops each running n times = O(n²) [OK]
Hint: Nested loops multiplying iterations = O(n²) [OK]
Common Mistakes:
  • Counting only one loop's iterations
  • Confusing O(n log n) with O(n²)
  • Assuming constant time for nested loops
4. Identify the error in the following time complexity analysis:
def example(n):
    for i in range(n):
        for j in range(10):
            print(i, j)

Claimed time complexity: O(n^2). What is the correct time complexity?
medium
A. O(n)
B. O(1)
C. O(10n)
D. O(n^2)

Solution

  1. Step 1: Analyze the outer loop

    The outer loop runs n times.
  2. Step 2: Analyze the inner loop

    The inner loop runs a fixed 10 times, which is constant.
  3. Step 3: Calculate total operations

    Total operations = n * 10 = 10n, which simplifies to O(n).
  4. Final Answer:

    O(n) -> Option A
  5. Quick Check:

    Fixed inner loop means linear time = O(n) [OK]
Hint: Ignore constants in Big O, fixed loops mean linear [OK]
Common Mistakes:
  • Treating fixed inner loop as variable
  • Writing O(n^2) without checking inner loop range
  • Confusing constant factors with growth rates
5. You have a function that processes a list of n items. It first sorts the list using an efficient algorithm, then scans it once to find duplicates.
What is the overall time complexity of this function?
hard
A. O(n)
B. O(n^2)
C. O(n log n)
D. O(log n)

Solution

  1. Step 1: Analyze sorting step

    Efficient sorting algorithms like mergesort or heapsort run in O(n log n) time.
  2. Step 2: Analyze scanning step

    Scanning the sorted list once is O(n).
  3. Step 3: Combine complexities

    Total time is dominated by the slower step, which is sorting at O(n log n).
  4. Final Answer:

    O(n log n) -> Option C
  5. Quick Check:

    Sorting dominates scanning, so O(n log n) [OK]
Hint: Big O is max step time; sorting dominates scanning [OK]
Common Mistakes:
  • Adding complexities instead of taking max
  • Assuming scanning adds to sorting complexity
  • Confusing sorting time with linear time
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard