Example #1
0
def ciudades_sin_conectar(grafo):
    """verifica si existen ciudades sin conectar en el grafo y, de ser
    verdadero, crea un diccionario que tiene como claves los nombres de
    las ciudades aisladas. O(V)"""
    aisladas={}
    for ciudad in grafo.grafo.keys():
        adyacentes=grafo.adyacentes(ciudad)
        if len(adyacentes)==0:
            aisladas[ciudad_1]=None
    return aisladas
Example #2
0
def label_propagation(grafo):
    label = {}
    contador = 0
    for v in grafo.vertices:
        label[v] = contador
        contador += 1
    vertices = list(label.keys())

    for j in range(LABEL_ITERACIONES):
        random.shuffle(vertices)
        for i in vertices:
            label[i] = max_freq(grafo.adyacentes(i), label)
    return label
Example #3
0
def random_walk(grafo):

    apariciones = {}
    lista_vertices = list(grafo.vertices.keys())
    #print("lista vertices claves",lista_vertices)

    for w in lista_vertices:
        apariciones[w] = 0
    cantidad_vertices = len(grafo)

    for j in range(cantidad_vertices):
        vertice_origen = random.choice(lista_vertices)
        apariciones[vertice_origen] += 1
        contador = 0
        for i in range(cantidad_vertices):
            if not grafo.adyacentes(vertice_origen):
                continue
            vertice_origen = random.choice(
                list(grafo.adyacentes(vertice_origen)))
            apariciones[vertice_origen] += 1

            if (i == cantidad_vertices - 1):
                contador = 0
    return apariciones
Example #4
0
def hay_ciclo(grafo, vertice, saltos, recorrido, contador, origen,
              apariciones):
    if (contador == saltos):
        if origen == vertice:
            recorrido.append(vertice)
            return True
        else:
            return False

    if apariciones.get(vertice) != None:

        return False

    recorrido.append(vertice)
    apariciones[vertice] = 1
    adyacentes = grafo.adyacentes(vertice)
    if adyacentes:
        for j in grafo.adyacentes(vertice):
            if hay_ciclo(grafo, j, saltos, recorrido, contador + 1, origen,
                         apariciones):
                return True
    eliminado = recorrido.pop()
    apariciones.pop(eliminado)
    return False
Example #5
0
def radio_rumor(grafo, delicuente, saltos):
    visitados = set()
    orden = {}
    cola = collections.deque()
    visitados.add(delicuente)
    orden[delicuente] = 0
    cola.append(delicuente)
    while cola:
        v = cola.popleft()
        if (orden[v] == saltos):
            return visitados
        for adyacente in grafo.adyacentes(v):
            if not adyacente in visitados:
                visitados.add(adyacente)
                orden[adyacente] = orden[v] + 1
                cola.append(adyacente)
    return visitados
Example #6
0
def random_walk(grafo):
    vertices_aleatorios = random.choices(grafo._vertices() ,k =grafo.cantidad_vertices())
    apariciones = {}

    for vertice in grafo._vertices():
        apariciones[vertice] = 0

    for i in range(0, grafo.cantidad_vertices()):

        vertice_act = vertices_aleatorios[i]
        apariciones[vertice_act] += 1
        for i in range(0, 20):
            lista_Adyacentes= list(grafo.adyacentes(vertice_act))
            if not lista_Adyacentes:
                continue
            vertice_act = random.choice(lista_Adyacentes)
            apariciones[vertice_act] += 1


    return apariciones
Example #7
0
def random_walk(grafo):
    importancia_delincuente = {}
    vertices = []

    for vertice in grafo._vertices():
        vertices.append(vertice)

    for i in range(0, 3000):

        vertice_act = random.choice(vertices)

        for i in range(0, 150):

            if vertice_act in importancia_delincuente:
                importancia_delincuente[vertice_act] += 1
            else:
                importancia_delincuente[vertice_act] = 1

            vertice_act = random.choice(grafo.adyacentes(vertice_act))

    return importancia_delincuente
Example #8
0
def dfs_cfc(grafo, v, visitados, orden, p, s, cfcs, en_cfs):
    visitados.add(v)
    s.append(v)
    p.append(v)
    for w in grafo.adyacentes(v):
        if w not in visitados:
            orden[w] = orden[v] + 1
            dfs_cfc(grafo, w, visitados, orden, p, s, cfcs, en_cfs)
        elif not w in en_cfs:
            while orden[p[-1]] > orden[w]:
                p.pop()

    if p[-1] == v:
        p.pop()
        z = None
        nueva_cfc = []
        while not z == v:
            z = s.pop()
            en_cfs.append(z)
            nueva_cfc.append(z)
        cfcs.append(nueva_cfc)
Example #9
0
def camino_minimo_bfs(grafo, origen):
    """devuelve dos diccionarios uno de ordenes y otro de dependencias(padres) """
    visitados = set()
    padres = {}
    orden = {}
    cola = collections.deque()

    visitados.add(origen)
    padres[origen] = None
    orden[origen] = 0
    cola.append(origen)

    while cola:
        v = cola.popleft()
        for w in grafo.adyacentes(v):
            if w not in visitados:
                visitados.add(w)
                padres[w] = v
                orden[w] = orden[v] + 1
                cola.append(w)

    return orden, padres
Example #10
0
def minimos_seguimientos_hasta_destino(grafo, origen, destino):
    """ devuelve un diccionario de padres, de dependencias de como llegar desde origen a destino, en caso que no llega a destino
        devuelve el diccionario pero 'destino' no estara en el diccionario"""
    padres = {}
    visitados = set()
    cola = collections.deque()
    orden = {}
    visitados.add(origen)
    padres[origen] = None
    orden[origen] = 0
    cola.append(origen)
    while cola:
        vertice = cola.popleft()
        for adyacente in grafo.adyacentes(vertice):
            if not adyacente in visitados:
                visitados.add(adyacente)
                padres[
                    adyacente] = vertice  #esto busca por bfs al destino y si encuentra corta y lo pone como visitado.
                orden[adyacente] = orden[vertice] + 1
                if destino == None and adyacente == destino:
                    return padres, orden
                cola.append(adyacente)
    return padres, orden