Skip to content

Commit 0139874

Browse files
committed
Added directory for all files.
1 parent 9c0c083 commit 0139874

File tree

10 files changed

+114
-111
lines changed

10 files changed

+114
-111
lines changed

Set Cover (Unweighted)/README.markdown

Whitespace-only changes.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import Foundation
2+
3+
public func randomArrayOfSets<T>(covering universe: Set<T>,
4+
minArraySizeFactor: Double = 0.8,
5+
maxSetSizeFactor: Double = 0.6) -> Array<Set<T>> {
6+
var result = [Set<T>]()
7+
var ongoingUnion = Set<T>()
8+
9+
let minArraySize = Int(Double(universe.count) * minArraySizeFactor)
10+
var maxSetSize = Int(Double(universe.count) * maxSetSizeFactor)
11+
if maxSetSize > universe.count {
12+
maxSetSize = universe.count
13+
}
14+
15+
while true {
16+
var generatedSet = Set<T>()
17+
let targetSetSize = Int(arc4random_uniform(UInt32(maxSetSize)) + 1)
18+
19+
while true {
20+
let randomUniverseIndex = Int(arc4random_uniform(UInt32(universe.count)))
21+
for (setIndex, value) in universe.enumerate() {
22+
if setIndex == randomUniverseIndex {
23+
generatedSet.insert(value)
24+
break
25+
}
26+
}
27+
28+
if generatedSet.count == targetSetSize {
29+
result.append(generatedSet)
30+
ongoingUnion = ongoingUnion.union(generatedSet)
31+
break
32+
}
33+
}
34+
35+
if result.count >= minArraySize {
36+
if ongoingUnion == universe {
37+
break
38+
}
39+
}
40+
}
41+
42+
return result
43+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
public 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+
}

Set Cover (Unweighted)/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+
}

SetCover.playground/Sources/RandomArrayOfSets.swift

Lines changed: 0 additions & 43 deletions
This file was deleted.

SetCover.playground/Sources/SetCover.swift

Lines changed: 0 additions & 33 deletions
This file was deleted.

SetCover.swift

Lines changed: 0 additions & 33 deletions
This file was deleted.

swift-algorithm-club.xcworkspace/contents.xcworkspacedata

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

0 commit comments

Comments
 (0)