Logical operators (&, |, ~) in MATLAB - Time & Space Complexity
Logical operators in MATLAB are used to combine or invert true/false values. Understanding their time complexity helps us know how the program speed changes when working with large arrays.
We want to see how the time to compute these logical operations grows as the input size increases.
Analyze the time complexity of the following code snippet.
A = rand(1, n) > 0.5;
B = rand(1, n) > 0.5;
C = A & B; % Logical AND
D = A | B; % Logical OR
E = ~A; % Logical NOT
This code creates two logical arrays and applies AND, OR, and NOT operations element-wise.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Element-wise logical operations on arrays.
- How many times: Once per element, repeated for all n elements.
Each logical operation checks every element once, so the total work grows directly with the number of elements.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 operations per logical step |
| 100 | About 100 operations per logical step |
| 1000 | About 1000 operations per logical step |
Pattern observation: The number of operations grows in a straight line as input size increases.
Time Complexity: O(n)
This means the time to complete the logical operations grows directly in proportion to the input size.
[X] Wrong: "Logical operators run instantly no matter how big the arrays are."
[OK] Correct: Each element must be checked, so bigger arrays take more time, not zero time.
Knowing how logical operations scale helps you write efficient code when working with large data sets, a useful skill in many programming tasks.
"What if we used nested loops to apply logical operators on a matrix instead of a single array? How would the time complexity change?"
Practice
Solution
Step 1: Understand the AND operator
The&operator returns true only when both conditions it compares are true.Step 2: Compare with other operators
The|operator returns true if at least one condition is true,~negates a condition, and^is XOR which returns true if exactly one condition is true.Final Answer:
& (AND) -> Option BQuick Check:
Both true = true means AND = & [OK]
- Confusing & with | operator
- Thinking ~ returns true if both true
- Mixing XOR (^) with AND (&)
a in MATLAB?Solution
Step 1: Recall MATLAB negation syntax
In MATLAB, the negation operator is~placed before the variable to flip its logical value.Step 2: Check each option
not a uses 'not' which is not valid syntax, C uses '!' which is not MATLAB syntax, and D places '~' after the variable which is incorrect.Final Answer:
~a -> Option CQuick Check:
Negate with ~ before variable [OK]
- Using ! instead of ~ for negation
- Writing negation after variable
- Using 'not' keyword which is invalid
a = true; b = false; c = a & ~b;
Solution
Step 1: Evaluate ~b
Sincebis false,~bis true.Step 2: Evaluate a & ~b
Bothaand~bare true, soa & ~bis true.Final Answer:
true -> Option AQuick Check:
true AND true = true [OK]
- Confusing logical true/false with numeric 1/0
- Forgetting to negate b
- Assuming & acts like | (OR)
a = true;
b = false;
c = a | ~ b;
Solution
Step 1: Check operator usage
The|operator is correctly used to perform logical OR betweenaand~b.Step 2: Check negation syntax
The negation operator~can have a space before the variable; MATLAB ignores spaces here.Final Answer:
No error, code runs correctly -> Option AQuick Check:
Logical OR with negation syntax is valid [OK]
- Thinking ~ needs parentheses always
- Assuming space causes syntax error
- Confusing | with & operator
x = [true false true] and y = [false true true], what is the result of z = ~(x & y) | (x | y) in MATLAB?Solution
Step 1: Calculate x & y element-wise
x = [true false true], y = [false true true]
x & y = [true & false, false & true, true & true] = [false, false, true]Step 2: Negate x & y
~(x & y) = [~false, ~false, ~true] = [true, true, false]Step 3: Calculate x | y element-wise
x | y = [true | false, false | true, true | true] = [true, true, true]Step 4: Calculate final expression
z = ~(x & y) | (x | y) = [true | true, true | true, false | true] = [true, true, true]Final Answer:
[true true true] -> Option DQuick Check:
Element-wise logic with ~, &, | gives all true [OK]
- Forgetting element-wise operation
- Negating before AND instead of after
- Mixing up & and | precedence
Ready to prove it?
Pass the test and this pattern moves unknown
