def load_from_csv(self, path): self._data = [] maxlst = numpy.zeros(8) with open(path) as f: reader = csv.reader(f) for row in reader: if row[0] != "PassengerId": lst = self._list2vec(row) for i in range(len(lst)): maxlst[i] = max(maxlst[i], lst[i]) self._data.append(lst) self._data = numpy.array(self._data) for i in range(len(self._data)): for j in range(len(self._data[i])): self._data[i][j] /= maxlst[j] f.close() uf = QuickWeightedUF(len(self._data)) finished = False size = len(self._data) while not finished: finished = True for i in range(size): for j in range(i + 1, size): if euclidean(self._data[i], self._data[j]) <= self._rad and not uf.same_set(i, j): finished = False uf.union(i, j)
def min_tree(self): graph = WeightedGraph() quick_uf = QuickWeightedUF(self.__size) self.__edges.sort() for e in self.__edges: if not quick_uf.same_set(e.v1, e.v2): quick_uf.union(e.v1, e.v2) graph.add_direct_link(e.v1, e.v2, e.weight) return graph
def test_union_find_tiny(self): quick_uf = QuickWeightedUF(5) self.assertFalse(quick_uf.same_set(0, 1)) self.assertFalse(quick_uf.same_set(1, 2)) self.assertFalse(quick_uf.same_set(1, 3)) self.assertFalse(quick_uf.same_set(2, 3)) self.assertFalse(quick_uf.same_set(2, 1)) self.assertFalse(quick_uf.same_set(1, 2)) self.assertFalse(quick_uf.same_set(0, 4)) self.assertFalse(quick_uf.same_set(1, 4)) quick_uf.union(2, 4) self.assertFalse(quick_uf.same_set(0, 1)) self.assertFalse(quick_uf.same_set(1, 2)) self.assertFalse(quick_uf.same_set(1, 3)) self.assertFalse(quick_uf.same_set(2, 3)) self.assertFalse(quick_uf.same_set(2, 1)) self.assertFalse(quick_uf.same_set(1, 2)) self.assertFalse(quick_uf.same_set(0, 4)) self.assertFalse(quick_uf.same_set(1, 4)) self.assertTrue(quick_uf.same_set(2, 4))
def test_union_find_huge(self): quick_uf = QuickWeightedUF(1000000) arr1 = [i for i in range(250000)] arr2 = [i for i in range(250000, 500000)] arr3 = [i for i in range(500000, 750000)] arr4 = [i for i in range(750000, 1000000)] for i in range(250000): quick_uf.union(arr1[i], arr1[randint(0, 249999)]) quick_uf.union(arr1[i], arr1[0]) quick_uf.union(arr2[i], arr2[randint(0, 249999)]) quick_uf.union(arr2[i], arr2[0]) quick_uf.union(arr3[i], arr3[randint(0, 249999)]) quick_uf.union(arr3[i], arr3[0]) quick_uf.union(arr4[i], arr4[randint(0, 249999)]) quick_uf.union(arr4[i], arr4[0]) for i in range(250000): self.assertTrue(quick_uf.same_set(i, randint(0, 249999))) self.assertFalse(quick_uf.same_set(i, randint(250000, 999999))) self.assertFalse(quick_uf.same_set(i, randint(250000, 999999))) self.assertTrue(quick_uf.same_set(i + 250000, randint(250000, 499999))) self.assertTrue(quick_uf.same_set(i + 500000, randint(500000, 749999))) self.assertFalse(quick_uf.same_set(i + 250000, randint(500000, 999999))) self.assertTrue(quick_uf.same_set(i + 750000, randint(750000, 999999)))
def test_union_find_medium(self): quick_uf = QuickWeightedUF(1000) arr1 = [i for i in range(500)] arr2 = [i for i in range(500, 1000)] for i in range(500): for j in range(10): quick_uf.union(arr1[randint(0, 499)], arr1[i]) quick_uf.union(0, i) for i in range(500, 1000): for j in range(10): quick_uf.union(arr2[randint(0, 499)], arr2[i - 500]) quick_uf.union(500, i) for i in range(500): self.assertFalse(quick_uf.same_set(arr1[i], arr2[i])) self.assertTrue(quick_uf.same_set(randint(0, 499), randint(0, 499))) self.assertTrue(quick_uf.same_set(randint(500, 999), randint(500, 999)))
def test_union_find_small(self): quick_uf = QuickWeightedUF(20) self.assertFalse(quick_uf.same_set(0, 8)) self.assertFalse(quick_uf.same_set(5, 16)) self.assertFalse(quick_uf.same_set(19, 2)) self.assertFalse(quick_uf.same_set(3, 13)) self.assertFalse(quick_uf.same_set(4, 5)) self.assertFalse(quick_uf.same_set(7, 6)) self.assertTrue(quick_uf.same_set(7, 7)) quick_uf.union(0, 1) quick_uf.union(1, 2) quick_uf.union(3, 2) self.assertTrue(quick_uf.same_set(0, 2)) self.assertTrue(quick_uf.same_set(0, 3)) self.assertTrue(quick_uf.same_set(1, 3)) self.assertTrue(quick_uf.same_set(2, 3)) self.assertFalse(quick_uf.same_set(0, 8)) self.assertFalse(quick_uf.same_set(5, 16)) self.assertFalse(quick_uf.same_set(19, 2)) self.assertFalse(quick_uf.same_set(3, 13)) self.assertFalse(quick_uf.same_set(4, 5)) self.assertFalse(quick_uf.same_set(7, 6)) self.assertTrue(quick_uf.same_set(7, 7))