Jump to content

Recommended Posts

Posted

pessoalmente, não gosto do modelo matricial para representação de grafos. isto porque se tiveres 10 nós e 10 arestas tens 90 espaços na matriz desnecessários ..

eu, quando tive de programar um grafo , utilizei listas ligadas

- uma lista de nos

- em cada nó uma lista de arestas emergentes (desculpa, para mim serão sempre digrafos)

IRC : sim, é algo que ainda existe >> #p@p
Posted

Concordo com o Hippo, com uma pequena diferença. Normalmente prefiro usar àrvores binárias ou tabelas de hash para o armazenamento de todos os nós, tendo cada um uma lista ligada de adjacências (normalmente uso dados da ligação + apontador para o destino, embora dependa um pouco do problema). É um pouco mais confuso a princípio, mas para grafos grandes aumenta um pouco o desempenho.

Posted

pessoalmente, não gosto do modelo matricial para representação de grafos. isto porque se tiveres 10 nós e 10 arestas tens 90 espaços na matriz desnecessários ..

eu, quando tive de programar um grafo , utilizei listas ligadas

- uma lista de nos

- em cada nó uma lista de arestas emergentes (desculpa, para mim serão sempre digrafos)

O modelo matricial é ideal quando o número de nós não é excessivamente grande e o grafo é denso. De qualquer forma, se houver memória suficiente o modelo matricial é sempre preferível porque para além de permitir todas as operações que o modelo da lista de adjacências permite, ainda consegues obter o peso (ou ausência) da aresta entre dois nós em O(1).

No caso do modelo de lista de adjacências não vejo qual é a lógica de usar uma lista ligada para os nós do grafo em vez de um array, fazendo com que o acesso a um nó arbitrário seja O(n).

Concordo com o Hippo, com uma pequena diferença. Normalmente prefiro usar àrvores binárias ou tabelas de hash para o armazenamento de todos os nós, tendo cada um uma lista ligada de adjacências (normalmente uso dados da ligação + apontador para o destino, embora dependa um pouco do problema). É um pouco mais confuso a princípio, mas para grafos grandes aumenta um pouco o desempenho.

Árvores binárias ou tabelas de hash? Porque não um simples array?

Não respondo a dúvidas por mensagem.

Posted

O modelo matricial é ideal quando o número de nós não é excessivamente grande e o grafo é denso. De qualquer forma, se houver memória suficiente o modelo matricial é sempre preferível porque para além de permitir todas as operações que o modelo da lista de adjacências permite, ainda consegues obter o peso (ou ausência) da aresta entre dois nós em O(1).

Eu disse que a minha preferência recaia fora da matricial por problemas de tamanho, não de rapidez de acesso. E como tudo, uma preferência não é uma lei mandatária para todos os casos. Nunca disse que o modelo matricial era mau ou nunca se deveria usar.

No caso do modelo de lista de adjacências não vejo qual é a lógica de usar uma lista ligada para os nós do grafo em vez de um array, fazendo com que o acesso a um nó arbitrário seja O(n).

Para casos em que os grafos requerem várias mutações em termos de nós (remover/adicionar) o modelo de lista é muito pior que lista ligada.

Novamente, não estou a dizer que está mal usar um modelo ou outro, porque claramente um caso é um caso, no entanto, pela minha experiência, o modelo que referi teve comportamentos médios mais aceitáveis nos diferentes problemas a que foi aplicado.

IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.