Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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))
Ejemplo n.º 4
0
 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)))
Ejemplo n.º 5
0
 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)))
Ejemplo n.º 6
0
 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))