Logo Data Structures and Algorithms with Object-Oriented Design Patterns in C++
next up previous contents index

Union, Intersection and Difference

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 tex2html_wrap_inline67136, 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,

displaymath67448

On the other hand, if S and T are multisets,

displaymath67449

The intersection  of sets S and T is written tex2html_wrap_inline67158. The elements of tex2html_wrap_inline67158 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 tex2html_wrap_inline67498 and tex2html_wrap_inline67500, the intersection is tex2html_wrap_inline67502.

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 gif 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 gif) and the SetAsBitVector class (Program gif). The worst-case running time of each of these operations is O(N).

   program28532
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 -


next up previous contents index

Bruno Copyright © 1997 by Bruno R. Preiss, P.Eng. All rights reserved.