Title: Generic Set Algorithms
1Generic Set Algorithms
- Andy Wang
- Data Structures, Algorithms, and Generic
Programming
2Generic Set Algorithms
- Very useful software tools
- A part of the STL specification
- Implement set theory
- Union
- Intersection
- Difference
- Containment
- Merge
- Runtime complexity in O(size)
3Set AlgorithmsAssumptions and Outcomes
- Assumptions
- Input ranges determined by input iterators
- Output start determined by output iterator
- Input ranges are sorted
- Outcomes
- Output range is sorted
- Output range is the set operation applied to the
input ranges
4Set Algorithm Complexity
- Unsorted input ranges
- O(size2) to iterate through range for each
element - g, c, m, y, x, h, a union h, w, a, b
- Sorted input rages
- O(size) to iterate through each range once
- a, c, g, h, m, x, y union a, b, h, w
5Sorted Range Control Structure
- Compare current elements from each input range
- Perform action based on comparison
- Increment past elements used for action
- Continue until an input range is exhausted
- Deal with tail of remaining range
6Set Union
- template ltclass I1, class I2, class I3gt
- void g_set_union(I1 B1, I1 E1, I2 B2, I2 E2, I3
D) - for ( B1 ! E1 B2 ! E2 D)
- if (B1 lt B2)
- D B1
- B1
- else if (B2 lt B1)
- D B2
- B2
- else // disallow duplicates
- D B1
- B1, B2
-
-
- while (B1 ! E1) D B1
- while (B2 ! E2) D B2
7Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set
8Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a
9Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a
10Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b
11Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b
12Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b, c
13Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b, c
14Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b, c, d
15Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b, c, d
B2, E2
16Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b, c, d, g
B2, E2
17Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b, c, d, g
B2, E2
18Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b, c, d, g, m
B2, E2
19Set Union Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Union Set a, b, c, d, g, m
B1, E1
B2, E2
20Set Merge
- template ltclass I1, class I2, class I3gt
- void g_set_merge(I1 B1, I1 E1, I2 B2, I2 E2, I3
D) - while (B1 ! E1 B2 ! E2)
- if (B2 lt B1)
- D B2
- else // allow duplicates
- D B1
-
-
- while (B1 ! E1) D B1
- while (B2 ! E2) D B2
-
21Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set
22Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a
23Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a
24Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a
25Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a
26Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b
27Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b
28Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b, c
29Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b, c
30Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b, c, d
31Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b, c, d
B2, E2
32Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b, c, d, g
B2, E2
33Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b, c, d, g
B2, E2
34Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b, c, d, g, m
B2, E2
35Set Merge Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Merged Set a, a, b, c, d, g, m
B1, E1
B2, E2
36Set Intersection
- template ltclass I1, class I2, class I3gt
- void g_set_intersection(I1 B1, I1 E1, I2 B2, I2
E2, I3 D) - while (B1 ! E1 B2 ! E2)
- if (B2 lt B1) // B2 not in set 1
- B2
- else if (B1 lt B2) // B1 not in set 2
- B1
- else
- D B1
- B2
-
-
-
37Set Intersection Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Intersection Set
38Set Intersection Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Intersection Set a
39Set Intersection Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Intersection Set a
40Set Intersection Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Intersection Set a
41Set Intersection Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Intersection Set a
42Set Intersection Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Intersection Set a
B2, E2
43Set Intersection Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Intersection Set a
B2, E2
44Set Intersection Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Intersection Set a
B1, E1
B2, E2
45Set Difference
- template ltclass I1, class I2, class I3gt
- void g_set_difference(I1 B1, I1 E1, I2 B2, I2 E2,
I3 D) - while (B1 ! E1 B2 ! E2)
- if (B2 lt B1) // B2 not in set 1
- B2
- else if (B1 lt B2) // B1 not in set 2
- D B1
- else
- B1
- B2
-
-
- while (B1 ! E1) D B1
-
46Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set
47Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set
48Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set
49Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set c
50Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set c
51Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set c
B2, E2
52Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set c, g
B2, E2
53Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set c, g
B2, E2
54Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set c, g, m
B2, E2
55Set Difference Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Difference Set c, g, m
B1, E1
B2, E2
56Set Containment
- template ltclass I1, class I2, class I3gt
- void g_subset_of(I1 B1, I1 E1, I2 B2, I2 E2)
- while (B1 ! E1 B2 ! E2)
- if (B1 lt B2) // B1 not in set 2
- return 0
- else if (B2 lt B1) // B2 not in set 1
- B2
- else
- B1
- B2
-
-
- if (B1 E1) return 1
- return 0
-
57Set Containment Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
58Set Containment Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
59Set Containment Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
60Set Containment Illustrated
- Set 1 a, c, g, m
-
- Set 2 a, b, d
- Return 0