[pyar] Sobre grafos, nodos y objetos

Jose Jachuf jjachuf en gmail.com
Mar Nov 9 09:15:16 ART 2010


El día 8 de noviembre de 2010 22:52, Alejandro Santos
<listas en alejolp.com> escribió:

> Si mirás el codigo fuente de la funcion add_edge()[0] vas a ver que,
> como bien dijiste, pregunta si el nodo ya existe. Si no existe lo
> agrega, sino no hace nada.
>
> Pero... dos nodos con diferente identidad id() pueden ser iguales,
> gracias a __eq__. Cuando se agrega un segundo edge que tiene un nodo
> que ya existe, en una de las puntas accede por el nodo viejo, y en la
> otra punta del edge usa la instancia del nodo que le llega por
> parametro... o sea, un nodo con diferente id().
>
> El bug es muy sutil, pero si seguis el codigo de add_edge lo vas a
> poder ver mas claro.

Ayer estuve viendo eso y estaba por comentarlo en el grupo de networkx.

>
> En la funcion "_agregar_nodos_simples", en vez de crear varios
> NodoSimple deberias mantener un dict() local con instancias ya
> existentes de nodos.

Es como lo resolví. Al principio creo un diccionario con id como clave
y nodo como valor y posteriormente cuando creo los arcos obtengo los
nodos de mi diccionario.

Lo que estaba por preguntar es si 30000-40000 nodos, que es lo que
contendrá el diccionario, es una cantidad demasiado grande? Yo pienso
que no, además viendo que el propio networkx lo maneja así, y dicen
que soporta millones de nodos y arcos.

Alejandro, gracias por tu respuesta

Jose



More information about the pyar mailing list