Existe-t-il une fonction LightGraph dans Julia qui est équivalente à la fonction ancestors dans Networkx?

1
Benjamin Decardi-Nelson 18 mars 2019 à 22:57

2 réponses

Meilleure réponse

Un moyen peut-être plus rapide:

function ancestors(g::SimpleDiGraph{T}, src) where T <: Integer
    reverse!(g)
    a = Vector{T}()
    for (v, d) in enumerate(gdistances(g, src))
        if d < typemax(T)
            push!(a, v)
        end
    end
    reverse!(g)
    return a
end
2
sbromberger 19 mars 2019 à 14:34

Pas nativement, mais il devrait être facile de l'approcher:

function ancestors(g, src)
    reverse!(g)
    a = reduce(union, enumerate_paths(dijkstra_shortest_paths(g, src))
    reverse!(g)
    return a
end

Cela nécessitera une vérification et c'est un peu risqué dans le cas où la fonction se termine avant le deuxième reverse! mais c'est beaucoup plus efficace que le reverse() non mutant.

0
sbromberger 19 mars 2019 à 01:25