Because multisets permit duplicates but sets do not, the definitions of union, intersection and difference are slightly modified for multisets. The union of multisets S and T, written , is the multiset comprised of all the elements of S together with all the element of T. Since a multiset may contain duplicates, it does not matter if the same element appears in S and T.
The subtle difference between union of sets and union of multisets gives rise to an interesting and useful property. If S and T are regular sets,
On the other hand, if S and T are multisets,
The intersection of sets S and T is written . The elements of are those items which are elements of both S and T. If a given element appears more than once in S or T (or both), the intersection contains m copies of that element, where m is the smaller of the number of times the element appears in S or T. E.g., if and , the intersection is .
The difference of sets S and T, written S-T, contains those elements of S which are not also elements of T. I.e., the result S-T is obtained by taking the set S and removing from it those elements which are also found in T.
Program gives the implementations of the union, intersection, and difference operators (+, *, and -, respectively) for operands of type MultisetAsArray. This code is quite similar to that of the SetAsArray class (Program ) and the SetAsBitVector class (Program ). The worst-case running time of each of these operations is O(N).
Program: MultisetAsArray Class Union, Intersection and Difference Operator Definitions
Instead of using the Boolean operators &&, || and !, we have used + (integer addition), Min and - (integer subtraction). The following table summarizes the operators used in the various set and multiset implementations.
class | |||
operation | SetAsArray | SetAsBitVector | MultisetAsArray |
union | || | | | + |
intersection | && | & | Min |
difference | && and ! | & and | <= and - |