Skip to content

Commit 07de50d

Browse files
committed
Added Greedy Set Cover algorithm (unweighted) as extension to Set.
1 parent 056795e commit 07de50d

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

SetCover.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
extension Set {
2+
func cover(from array: Array<Set<Element>>) -> Array<Set<Element>>? {
3+
var result: [Set<Element>]? = [Set<Element>]()
4+
var remainingSet = self
5+
6+
func largestIntersectingSet() -> Set<Element>? {
7+
var largestIntersectionLength = 0
8+
var largestSet: Set<Element>?
9+
10+
for set in array {
11+
let intersectionLength = remainingSet.intersect(set).count
12+
if intersectionLength > largestIntersectionLength {
13+
largestIntersectionLength = intersectionLength
14+
largestSet = set
15+
}
16+
}
17+
18+
return largestSet
19+
}
20+
21+
while remainingSet.count != 0 {
22+
guard let largestSet = largestIntersectingSet() else { break }
23+
result!.append(largestSet)
24+
remainingSet = remainingSet.subtract(largestSet)
25+
}
26+
27+
if remainingSet.count != 0 || self.count == 0 {
28+
result = nil
29+
}
30+
31+
return result
32+
}
33+
}

swift-algorithm-club.xcworkspace/contents.xcworkspacedata

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)