elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Algoritmos para grafos (C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Algoritmos para grafos (C)  (Leído 10,621 veces)
k3r00t

Desconectado Desconectado

Mensajes: 17



Ver Perfil
Algoritmos para grafos (C)
« en: 5 Julio 2011, 18:24 pm »

Tengo que hacer un ejercicio para mi facultad y me necesito dos algoritmos de grafos, uno es el conocido algoritmo de kruskal para el árbol recubridor mínimo, he googleado pero la verdad solo lo he visto en Java y en C++ y solo domino lenguaje C. Y el otro es un algoritmo que me calcule el camino mas corto entre un par de vértices pero no en cuanto al peso, sino en cuanto a la cantidad de aristas o arcos que recorre y la verdad de este si no he conseguido nada. De verdad se los agradecería mucho!!


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Algoritmos para grafos (C)
« Respuesta #1 en: 5 Julio 2011, 18:44 pm »

Y el otro es un algoritmo que me calcule el camino mas corto entre un par de vértices pero no en cuanto al peso, sino en cuanto a la cantidad de aristas o arcos que recorre y la verdad de este si no he conseguido nada. De verdad se los agradecería mucho!!

Poniendo las aritas a peso 1 debería solucionarte ese problema.

Para lo otro que pides, mira el pseudocódigo de Kruskal y prográmalo tu.


En línea

k3r00t

Desconectado Desconectado

Mensajes: 17



Ver Perfil
Re: Algoritmos para grafos (C)
« Respuesta #2 en: 5 Julio 2011, 18:48 pm »

Es que no tengo ningún pseudo! solo lo he leído ya listo para compilar en C++ y en Java y ni idea de como traducirlos a C. Gracias!
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Algoritmos para grafos (C)
« Respuesta #3 en: 5 Julio 2011, 21:26 pm »

Ponlo aquí en C++, a ver si se puede pasar a C sin problemas. Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Nork

Desconectado Desconectado

Mensajes: 196



Ver Perfil
Re: Algoritmos para grafos (C)
« Respuesta #4 en: 5 Julio 2011, 22:37 pm »

Para el camino más corto lee sobre dijkstra: http://en.wikipedia.org/wiki/Dijkstra's_algorithm . Y sobre los pesos como dice Akai debería funcionarte.
En línea

C' Est La Vie
k3r00t

Desconectado Desconectado

Mensajes: 17



Ver Perfil
Re: Algoritmos para grafos (C)
« Respuesta #5 en: 5 Julio 2011, 22:57 pm »

Para el camino más corto lee sobre dijkstra: http://en.wikipedia.org/wiki/Dijkstra's_algorithm . Y sobre los pesos como dice Akai debería funcionarte.

Claro, pero el algoritmo de Dijkstra me retornara el camino mínimo, pero yo no necesito el camino mínimo, de hecho no tengo porque tomar en cuenta los pesos, únicamente necesito el camino en el que para llegar a un Y desde X utilize el menor numero de escalas(aristas)
En línea

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Algoritmos para grafos (C)
« Respuesta #6 en: 6 Julio 2011, 02:02 am »

Kruskal si lees y entiendes cómo funciona no es para nada complicado. Mira qué hace el algoritmo y una vez lo entiendas lo podrás programar. La única parte algo más complicada es si quieres hacer eficientemente el paso de comprobar si dos nodos están unidos directa o indirectamente, que lo puedes programar con un MFSet.

Respecto al segundo problema, como ya te han dicho se reduce a un problema de caminos mínimos. Ignora los costes originales de las aristas y ponles a todas coste 1. Es evidente que el camino mínimo entre dos nodos será con estos nuevos costes aquel que use un menor número de aristas. En lo que discrepo es con la recomendación de usar Dijkstra. Cuando todas las aristas tienen el mismo coste, puede calcularse la mínima distancia de un nodo al resto usando simplemente un BFS estándar, dado que este recorre el grafo por niveles. Y BFS es más eficiente que Dijkstra.
En línea

k3r00t

Desconectado Desconectado

Mensajes: 17



Ver Perfil
Re: Algoritmos para grafos (C)
« Respuesta #7 en: 6 Julio 2011, 02:41 am »

Kruskal si lees y entiendes cómo funciona no es para nada complicado. Mira qué hace el algoritmo y una vez lo entiendas lo podrás programar. La única parte algo más complicada es si quieres hacer eficientemente el paso de comprobar si dos nodos están unidos directa o indirectamente, que lo puedes programar con un MFSet.

Respecto al segundo problema, como ya te han dicho se reduce a un problema de caminos mínimos. Ignora los costes originales de las aristas y ponles a todas coste 1. Es evidente que el camino mínimo entre dos nodos será con estos nuevos costes aquel que use un menor número de aristas. En lo que discrepo es con la recomendación de usar Dijkstra. Cuando todas las aristas tienen el mismo coste, puede calcularse la mínima distancia de un nodo al resto usando simplemente un BFS estándar, dado que este recorre el grafo por niveles. Y BFS es más eficiente que Dijkstra.

Usar un BFS me servirá si se trata de un grafo no dirigido?
En línea

Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: Algoritmos para grafos (C)
« Respuesta #8 en: 6 Julio 2011, 13:37 pm »

Sinceramente yo usaría el algoritmo de Dijkstra, porque tiene el mismo orden de complejidad que una BFS, y existen pseudocódigos que puedes traducir directamente a C.

Saludos.
En línea

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Algoritmos para grafos (C)
« Respuesta #9 en: 6 Julio 2011, 19:57 pm »

Eso es falso, el orden de complejidad de Dijkstra es mayor que el de BFS y a la práctica también es más lento. Además, también hay pseudocódigos a patadas de BFS, que además es más fácil de programar que Dijkstra.

Edito:
Respecto a la pregunta anterior, sirve tanto si el grafo es dirigido como no dirigido.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
alguna dirección para bajar ejercicios de algoritmos con diagramas de flujo????
Ejercicios
alvaro4356 1 12,999 Último mensaje 10 Enero 2007, 14:31 pm
por carlospes
Algoritmos para cubo de pintura
Ejercicios
juancho77 1 4,739 Último mensaje 3 Diciembre 2008, 19:32 pm
por ghastlyX
Grafos
Java
soser 1 3,086 Último mensaje 4 Noviembre 2010, 22:53 pm
por Debci
Aplicación en Ubuntu para cifrar con AES o algoritmos + fuertes
Criptografía
Gambinoh 4 7,035 Último mensaje 26 Enero 2011, 20:46 pm
por DaNuK-men
grafos
Programación General
kailon 3 3,494 Último mensaje 6 Junio 2011, 16:54 pm
por Valkyr
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines