Let's say we have two sets s1
and s2
.
I require three different sets based on these two sets:
s1
but not in s2
.s2
but not in s1
.s1
and s2
.These could be easily computed as follows:
s1 = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}
o1 = s1 - s2
o2 = s2 - s1
o3 = s1 & s2
Is there a way to compute these sets more efficiently? I imagine the different set operations have multiple internal processing steps in common, so there might be redundancy.
Given that these operations are implemented in C in the core part of the language, I think there's pretty much nothing you can do to speed these operations up in custom-written code.
But...
Since s1 - s2
is the same as s1 - (s1 & s2)
, you could calculate o3
first and use this smaller set in the difference operations:
s1 = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}
o3 = s1 & s2
o1 = s1 - o3
o2 = s2 - o3
I doubt it will make much of a difference, since set lookup and insertion are O(1), but it's conceivable that operations over smaller sets are still slightly faster.