コード例 #1
0
def dijkstra(vertice_list, src, num_ver, maxC):
    parent = []
    #marca todos os vertices como nao visitados
    for i in range(num_ver):
        parent.append(-1)
    #vertice inicial tem distancia 0.  Na 1 iteracao todos os demais estao setados com 'infinidade'
    vertice_list[src].dist = 0

    #tree = GTree((GCompareFunc)cmp_func);
    #g_tree_insert(tree,dv[src], dv[src]);
    from bucket import Bucket
    buck = Bucket(maxC * num_ver)
    buck.add(
        (vertice_list[src].dist, src))  #avl works with indexes or keys only

    a = 0
    j = 0
    #enquanto a arvore tiver uma altura>0
    while (buck.isEmpty() == False):
        j += 1
        print(j)
        #pegue a menor distancia:
        v_min_node = buck.remove_min()  # 1.1
        #print('v_min_node: ',v_min_node)
        v_min_key = v_min_node[1]
        v_min = vertice_list[v_min_key]
        v_min.visited = 1  #marque vertice minimo como ja visitado. Desse modo o 1.2 sera feito, pois nao sera mais contado
        #para cada vertice adjacente ao vertice minimo
        for key in v_min.adjs:  # 1.3
            adj_ver = vertice_list[
                v_min.adjs[key].id]  #pega o vertice adjacente
            #Se a distancia atual do vertice minimo, mais o seu peso, for menor que a distancia do vert adjacente
            if (adj_ver.visited == 0
                    and v_min.dist + v_min.weights[key] < adj_ver.dist):
                adj_ver.dist = v_min.dist + v_min.weights[
                    key]  #a distancia do vertice adjacente tera esse novo valor
                parent[
                    adj_ver.
                    id] = v_min.id  # a pos que era do vertice adjacente, sera do menor v agora
                #print('add:',(adj_ver.dist,adj_ver.id) )
                buck.add((adj_ver.dist, adj_ver.id))
コード例 #2
0
ファイル: hash_table.py プロジェクト: poojithansl/Databases
class HashTable(IndexStructure):
    def __init__(self, **kwargs):
        #self.record = kwargs.get('record')
        self.kwargs = kwargs
        self.mapping = {}
        self.bucket_num = 1
        self.bucket = Bucket(**self.kwargs)

    def _hash(self, record):
        hash_value = sum(record) % 10
        return hash_value

    def load(self):
        """ Loads from the serialized output """
        pass

    def save(self):
        """ Serializes and writes out """
        pass

    def add(self, record):
        hv = self._hash(record)
        if hv not in self.mapping.keys():
            self.mapping[hv] = self.bucket_num
            self.bucket.add(record, self.bucket_num)
            self.bucket_num += 1
        else:
            bucket_num = self.mapping[hv]
            self.bucket.add(record, bucket_num)

    def __contains__(self, record):
        hv = self._hash(record)
        if hv not in self.mapping:
            return False
        else:
            bucket_num = self.mapping[hv]
            return self.bucket.check(record, bucket_num)