Bird
Raised Fist0
DSA Cprogramming~5 mins

Activity Selection Problem in DSA C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main goal of the Activity Selection Problem?
To select the maximum number of activities that don't overlap in time from a given set of activities.
Click to reveal answer
beginner
Which greedy choice is used in the Activity Selection Problem?
Always pick the activity that finishes earliest among the remaining activities.
Click to reveal answer
beginner
Why do we sort activities by their finish time in the Activity Selection Problem?
Sorting by finish time helps to easily pick the next activity that finishes earliest and does not overlap with previously selected activities.
Click to reveal answer
intermediate
What is the time complexity of the Activity Selection Problem solution using the greedy approach?
O(n log n) due to sorting the activities by their finish time. The selection process itself is O(n).
Click to reveal answer
intermediate
In the Activity Selection Problem, what happens if two activities have the same finish time?
You can choose either one since both finish at the same time; the greedy approach still works correctly.
Click to reveal answer
What is the first step in solving the Activity Selection Problem?
ASort activities by their finish time
BSort activities by their start time
CSelect the longest activity first
DSelect activities randomly
After selecting an activity, what is the next step?
ASelect the next activity that starts after the current activity finishes
BSelect the next activity that starts before the current activity finishes
CSelect the activity with the longest duration
DSelect the activity with the earliest start time
What type of algorithm is used to solve the Activity Selection Problem efficiently?
ABacktracking
BDynamic programming
CDivide and conquer
DGreedy algorithm
If activities are not sorted, what is the impact on the solution?
AThe solution will be optimal anyway
BThe solution will run faster
CThe solution may not be optimal
DSorting is not needed
What is the output of the Activity Selection Problem?
AAll activities sorted by duration
BMaximum set of non-overlapping activities
CAll activities sorted by start time
DMinimum set of overlapping activities
Explain the greedy strategy used in the Activity Selection Problem and why it guarantees an optimal solution.
Think about how picking the earliest finishing activity leaves room for more activities.
You got /3 concepts.
    Describe the steps to implement the Activity Selection Problem solution in C.
    Start with sorting, then pick activities one by one checking start and finish times.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main goal of the Activity Selection Problem?
      easy
      A. Calculate the total time of all activities
      B. Find the activity with the longest duration
      C. Select the maximum number of activities that don't overlap in time
      D. Sort activities by their start time

      Solution

      1. Step 1: Understand the problem goal

        The Activity Selection Problem aims to choose the largest set of activities that do not overlap in their time intervals.
      2. Step 2: Identify the correct goal

        Among the options, only selecting the maximum number of non-overlapping activities matches the problem's goal.
      3. Final Answer:

        Select the maximum number of activities that don't overlap in time -> Option C
      4. Quick Check:

        Goal = Max non-overlapping activities [OK]
      Hint: Choose activities that finish earliest to fit more [OK]
      Common Mistakes:
      • Confusing longest duration with maximum count
      • Sorting by start time only
      • Trying to sum all activity times
      2. Which of the following C code snippets correctly sorts activities by their finish time for the Activity Selection Problem?
      easy
      A. qsort(activities, n, sizeof(Activity), compareStart);
      B. qsort(activities, n, sizeof(Activity), compareFinish);
      C. sort(activities, n, sizeof(Activity), compareDuration);
      D. qsort(activities, n, sizeof(Activity), compareName);

      Solution

      1. Step 1: Identify sorting criteria

        For the Activity Selection Problem, activities must be sorted by their finish time to select the maximum number of non-overlapping activities.
      2. Step 2: Match sorting function

        Only qsort with compareFinish sorts by finish time correctly.
      3. Final Answer:

        qsort(activities, n, sizeof(Activity), compareFinish); -> Option B
      4. Quick Check:

        Sort by finish time = qsort + compareFinish [OK]
      Hint: Sort activities by finish time using qsort and compareFinish [OK]
      Common Mistakes:
      • Sorting by start time instead of finish time
      • Using undefined compare functions
      • Using wrong sorting function name
      3. What is the output of the following C code snippet for the Activity Selection Problem?
      typedef struct {
        int start;
        int finish;
      } Activity;
      
      Activity activities[] = {{1, 4}, {3, 5}, {0, 6}, {5, 7}, {8, 9}, {5, 9}};
      int n = 6;
      
      // Assume activities are sorted by finish time
      int count = 1;
      int last_finish = activities[0].finish;
      for (int i = 1; i < n; i++) {
        if (activities[i].start >= last_finish) {
          count++;
          last_finish = activities[i].finish;
        }
      }
      printf("%d\n", count);
      medium
      A. 6
      B. 3
      C. 5
      D. 4

      Solution

      1. Step 1: Trace the selection process

        Activities sorted by finish time: (1,4), (3,5), (0,6), (5,7), (8,9), (5,9). Start with count=1, last_finish=4.
        Check each activity:
        - (3,5): start 3 < 4, skip
        - (0,6): start 0 < 4, skip
        - (5,7): start 5 >= 4, select, count=2, last_finish=7
        - (8,9): start 8 >= 7, select, count=3, last_finish=9
        - (5,9): start 5 < 9, skip
      2. Step 2: Final count of selected activities

        Total selected activities = 4
      3. Final Answer:

        4 -> Option D
      4. Quick Check:

        Selected count = 4 [OK]
      Hint: Count activities starting after last selected finish time [OK]
      Common Mistakes:
      • Not sorting activities by finish time
      • Selecting overlapping activities
      • Incorrectly updating last_finish
      4. Identify the error in the following C code snippet for the Activity Selection Problem:
      typedef struct {
        int start;
        int finish;
      } Activity;
      
      Activity activities[] = {{1, 3}, {2, 5}, {4, 7}};
      int n = 3;
      
      // Activities are sorted by finish time
      int count = 0;
      int last_finish = 0;
      for (int i = 0; i < n; i++) {
        if (activities[i].start > last_finish) {
          count++;
          last_finish = activities[i].finish;
        }
      }
      printf("%d\n", count);
      medium
      A. The condition should be activities[i].start >= last_finish
      B. The loop should start from i = 1, not 0
      C. last_finish should be initialized to activities[0].finish
      D. The activities array is not sorted

      Solution

      1. Step 1: Analyze the selection condition

        The condition uses '>' which excludes activities starting exactly at last_finish time. It should allow activities starting at or after last_finish, so '>=' is correct.
      2. Step 2: Check other parts

        Starting loop at 0 and initializing last_finish to 0 is fine if condition is corrected. The activities are sorted as stated.
      3. Final Answer:

        The condition should be activities[i].start >= last_finish -> Option A
      4. Quick Check:

        Use >= to include activities starting at last finish [OK]
      Hint: Use >= to allow activities starting exactly at last finish [OK]
      Common Mistakes:
      • Using > excludes valid activities
      • Starting loop from 1 unnecessarily
      • Wrong initialization of last_finish
      5. Given the following activities with start and finish times:
      Activities = [(1, 2), (3, 4), (0, 6), (5, 7), (8, 9), (5, 9)]

      Which set of activities represents the maximum number of non-overlapping activities selected by the greedy algorithm?
      hard
      A. [(1, 2), (3, 4), (5, 7), (8, 9)]
      B. [(0, 6), (5, 7), (8, 9)]
      C. [(1, 2), (5, 9)]
      D. [(3, 4), (5, 7), (8, 9)]

      Solution

      1. Step 1: Sort activities by finish time

        Sorted activities: (1,2), (3,4), (0,6), (5,7), (8,9), (5,9)
      2. Step 2: Select activities greedily

        Select (1,2) first.
        Next, (3,4) starts after 2, select.
        (0,6) overlaps, skip.
        (5,7) starts after 4, select.
        (8,9) starts after 7, select.
        (5,9) overlaps, skip.
        Selected set: [(1,2), (3,4), (5,7), (8,9)]
      3. Final Answer:

        [(1, 2), (3, 4), (5, 7), (8, 9)] -> Option A
      4. Quick Check:

        Greedy selects max non-overlapping activities [OK]
      Hint: Pick earliest finishing activities to maximize count [OK]
      Common Mistakes:
      • Choosing overlapping activities
      • Not sorting by finish time
      • Selecting longer activities first
      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