Daily and shift reports in SCADA systems - Time & Space Complexity
When generating daily and shift reports in SCADA systems, it is important to understand how the time to create these reports changes as the amount of data grows.
We want to know how the system's work increases when more data points or shifts are involved.
Analyze the time complexity of the following code snippet.
function generateReports(data) {
for (let shift of data.shifts) {
let report = new Report();
for (let record of shift.records) {
report.add(record);
}
report.save();
}
}
This code creates reports for each shift by going through all records in that shift and saving the report.
- Primary operation: Looping through each shift and then looping through each record in that shift.
- How many times: Outer loop runs once per shift; inner loop runs once per record in that shift.
As the number of shifts and records per shift grow, the total work grows by multiplying these two amounts.
| Input Size (shifts x records) | Approx. Operations |
|---|---|
| 10 shifts x 10 records | 100 |
| 100 shifts x 100 records | 10,000 |
| 1000 shifts x 1000 records | 1,000,000 |
Pattern observation: The total work grows quickly as both shifts and records increase, multiplying together.
Time Complexity: O(n × m)
This means the time to generate reports grows proportionally to the number of shifts times the number of records per shift.
[X] Wrong: "The time grows only with the number of shifts, not the records inside them."
[OK] Correct: Each record inside every shift must be processed, so the total time depends on both shifts and records.
Understanding how nested loops affect time helps you explain system performance clearly and shows you can reason about real-world data processing tasks.
"What if we combined all records from all shifts into one list and processed it once? How would the time complexity change?"
Practice
Solution
Step 1: Understand report function
Daily and shift reports collect and summarize data over set time periods.Step 2: Identify main goal
The goal is to provide a clear summary of system performance and events during those periods.Final Answer:
To summarize system data for specific time periods -> Option AQuick Check:
Reports summarize data = D [OK]
- Confusing reports with control commands
- Thinking reports update software
- Assuming reports backup data
Solution
Step 1: Identify night shift hours
The night shift runs from 10 PM (22:00) to 6 AM (06:00).Step 2: Match correct time format
shift_start = '22:00'; shift_end = '06:00'correctly sets shift_start to '22:00' and shift_end to '06:00'.Final Answer:
shift_start = '22:00'; shift_end = '06:00' -> Option AQuick Check:
Night shift = 22:00 to 06:00 [OK]
- Mixing AM and PM times
- Using 12-hour format without AM/PM
- Swapping start and end times
data = [10, 20, 30, 40] report_sum = sum(data) report_avg = report_sum / len(data) print(report_avg)
What will be the output?
Solution
Step 1: Calculate sum of data
Sum = 10 + 20 + 30 + 40 = 100.Step 2: Calculate average
Average = 100 / 4 = 25.0.Final Answer:
25.0 -> Option CQuick Check:
Average of [10,20,30,40] = 25.0 [OK]
- Dividing by wrong length
- Adding incorrectly
- Confusing sum with average
shift_start = '22:00'
shift_end = '06:00'
if shift_start > shift_end:
print('Invalid shift times')Why does this code print 'Invalid shift times' even if the shift crosses midnight?
Solution
Step 1: Understand string comparison of times
Comparing times as strings ('22:00' > '06:00') compares lexicographically, not by clock time.Step 2: Recognize midnight crossing issue
Times crossing midnight (e.g., '22:00' to '06:00') fail because '22:00' > '06:00' is true, but string comparison doesn't reflect time logic.Final Answer:
Because string comparison does not handle time crossing midnight correctly -> Option BQuick Check:
String compare ≠ time logic [OK]
- Assuming string compare works for times
- Thinking condition is always true
- Ignoring midnight crossing logic
Solution
Step 1: Identify report requirements
Report must include total production and average temperature per shift.Step 2: Choose method to combine data
Calculating totals and averages separately per shift then combining into one report meets all requirements clearly.Final Answer:
Calculate totals and averages separately for each shift, then combine results in one report -> Option DQuick Check:
Combine metrics per shift in one report [OK]
- Ignoring temperature data
- Splitting reports unnecessarily
- Mixing daily and shift calculations incorrectly
Ready to prove it?
Pass the test and this pattern moves unknown
