Skip to content

Commit

Permalink
Make some methods safer, rename the directory to Union-Find
Browse files Browse the repository at this point in the history
  • Loading branch information
goingreen committed Feb 11, 2016
1 parent 5d262b9 commit 475024e
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 24 deletions.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,24 @@ public struct UnionFind<T: Hashable> {
}
}

public mutating func findSetOfElement(element: T) -> Int {
let indexOfElement = index[element]!
return findSetByIndexOfElement(indexOfElement)
public mutating func findSetOfElement(element: T) -> Int? {
if let indexOfElement = index[element] {
return findSetByIndexOfElement(indexOfElement)
} else {
return nil
}
}

public mutating func unionSetsWithElement(firstElement: T, andSecondElement secondElement: T) {
let firstSet = findSetOfElement(firstElement)
let secondSet = findSetOfElement(secondElement)
if (firstSet != secondSet) {
if (size[firstSet] < size[secondSet]) {
parent[firstSet] = secondSet;
size[secondSet] += size[firstSet]
} else {
parent[secondSet] = firstSet;
size[firstSet] += size[secondSet]
if let firstSet = findSetOfElement(firstElement), secondSet = findSetOfElement(secondElement) {
if (firstSet != secondSet) {
if (size[firstSet] < size[secondSet]) {
parent[firstSet] = secondSet;
size[secondSet] += size[firstSet]
} else {
parent[secondSet] = firstSet;
size[firstSet] += size[secondSet]
}
}
}
}
Expand Down
27 changes: 15 additions & 12 deletions UnionFind/UnionFind.swift → Union-Find/UnionFind.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,24 @@ public struct UnionFind<T: Hashable> {
}
}

public mutating func findSetOfElement(element: T) -> Int {
let indexOfElement = index[element]!
return findSetByIndexOfElement(indexOfElement)
public mutating func findSetOfElement(element: T) -> Int? {
if let indexOfElement = index[element] {
return findSetByIndexOfElement(indexOfElement)
} else {
return nil
}
}

public mutating func unionSetsWithElement(firstElement: T, andSecondElement secondElement: T) {
let firstSet = findSetOfElement(firstElement)
let secondSet = findSetOfElement(secondElement)
if (firstSet != secondSet) {
if (size[firstSet] < size[secondSet]) {
parent[firstSet] = secondSet;
size[secondSet] += size[firstSet]
} else {
parent[secondSet] = firstSet;
size[firstSet] += size[secondSet]
if let firstSet = findSetOfElement(firstElement), secondSet = findSetOfElement(secondElement) {
if (firstSet != secondSet) {
if (size[firstSet] < size[secondSet]) {
parent[firstSet] = secondSet;
size[secondSet] += size[firstSet]
} else {
parent[secondSet] = firstSet;
size[firstSet] += size[secondSet]
}
}
}
}
Expand Down

0 comments on commit 475024e

Please sign in to comment.