Quiz on Complexity analysis for DSA

Test your ability to evaluate algorithms, identify efficient solutions, and optimize code. This quiz challenges your knowledge of time and space complexity analysis.

Last Updated :
Discuss
Comments

Question 1

Which of the following best represents the time complexity of accessing an element in an array by its index?

  • O(1)

  • O(n)

  • O(log n)

  • O(n^2)

Question 2

What is the time complexity of a nested loop where the outer loop runs n times and the inner loop runs m times?

  • O(n)

  • O(m)

  • O(n * m)

  • O(n + m)

Question 3

Consider an algorithm that takes an array of size n and performs a loop from 1 to n^2. What is the time complexity of this algorithm?

  • O(n)

  • O(n2)

  • O(n3)

  • O(n4)

Question 4

Which of the following is true about the Big O notation (O(f(n)))?

  • It describes the lower bound of the runtime of an algorithm.

  • It describes the exact runtime of an algorithm.

  • It describes the upper bound of the runtime of an algorithm.

  • It describes the average runtime of an algorithm.

Question 5

Which of the following options correctly matches the notation with the parameters they define

  • Big-O Notation (O-notation) : Average Case complexity

    Omega Notation (Ω-notation) : Worst Case complexity

    Theta Notation (Θ-notation) : Best Case complexity

  • Big-O Notation (O-notation) : Best Case complexity

    Omega Notation (Ω-notation) : Average Case complexity

    Theta Notation (Θ-notation) : Worst Case complexity

  • Big-O Notation (O-notation) : Worst Case complexity

    Omega Notation (Ω-notation) : Average Case complexity

    Theta Notation (Θ-notation) : Best Case complexity

  • Big-O Notation (O-notation) : Worst Case complexity

    Omega Notation (Ω-notation) : Best Case complexity

    Theta Notation (Θ-notation) : Average Case complexity

Question 6

If an algorithm’s time complexity is O(n^2), which of the following best describes its performance when the input size is doubled?

  • The time taken will double.

  • The time taken will remain the same.

  • The time taken will increase by a factor of 2^2.

  • The time taken will quadruple.

Question 7

What does O(n) time complexity indicate in an algorithm?

  • The algorithm's execution time grows exponentially with the input size.

  • The algorithm's execution time grows linearly with the input size.

  • The algorithm’s execution time does not depend on the input size.

  • The algorithm’s execution time is constant, irrespective of the input size.

Question 8

Determine the time complexity for the following recursive function :

C++
int recursive(n)
{
    if (n <= 1) return 1;
    else 
    {
        return recursive(n - 1) + recursive(n - 1);
    }
    
}
C
int recursive(n)
{
    if (n <= 1) return 1;
    else 
    {
        return recursive(n - 1) + recursive(n - 1);
    }
    
}
Java
public static int recursive(int n) {
        if (n <= 1) {
            return 1;
        } else {
            return recursive(n - 1) + recursive(n - 1);
        }
    }
Python
def recursive(n):
    if n <= 1:
        return 1
    else:
        return recursive(n - 1) + recursive(n - 1)
JavaScript
function recursive(n) {
    if (n <= 1) {
        return 1;
    } else {
        return recursive(n - 1) + recursive(n - 1);
    }
}


  • O(n)

  • O(log n)

  • O(2^n)

  • O(n^2)

Question 9

What is the time complexity of the following recursive function?
Note : The merge function takes linear time.

C++
vector<int> mergeSort(const vector<int>& arr) {
    if (arr.size() <= 1) {
        return arr;
    }
    int mid = arr.size() / 2;
    vector<int> left = mergeSort(vector<int>(arr.begin(), arr.begin() + mid));
    vector<int> right = mergeSort(vector<int>(arr.begin() + mid, arr.end()));

    return merge(left, right);
}
C
void mergeSort(int arr[], int size) {
    if (size <= 1) {
        return;
    }

    int mid = size / 2;
    int* left = (int*)malloc(mid * sizeof(int));
    int* right = (int*)malloc((size - mid) * sizeof(int));

    for (int i = 0; i < mid; i++) {
        left[i] = arr[i];
    }
    for (int i = mid; i < size; i++) {
        right[i - mid] = arr[i];
    }

    mergeSort(left, mid);
    mergeSort(right, size - mid);
    merge(arr, left, mid, right, size - mid);
}
Java
public static int[] mergeSort(int[] arr) {
        if (arr.length <= 1) {
            return arr;
        }
        int mid = arr.length / 2;
        int[] left = mergeSort(Arrays.copyOfRange(arr, 0, mid));
        int[] right = mergeSort(Arrays.copyOfRange(arr, mid, arr.length));

        return merge(left, right);
    }
Python
def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    
    return merge(left, right)
JavaScript
function mergeSort(arr) {
    if (arr.length <= 1) {
        return arr;
    }
    const mid = Math.floor(arr.length / 2);
    const left = mergeSort(arr.slice(0, mid));
    const right = mergeSort(arr.slice(mid));

    return merge(left, right);
}


  • O(log n)

  • O(n log n)

  • O(n^2)

  • O(n)

Question 10

Consider a recursive function with a branching factor of 3 and a depth of recursion of n. What would be the time complexity of this recursion?

  • O(3n)

  • O(n3)

  • O(3n)

  • O(n2)

Tags:

There are 17 questions to complete.

Take a part in the ongoing discussion