That does solve the duplicate information problem but it makes updates
to node attributes (like weight) difficult. Let's say, I want to
assign the weight of each node to the average of its neighbors.

for(UndirectedGraphNode node : UndirectedGraph.getNodesList() ) {
   double sum = 0;
   int count = 0;
   for(UndirectedGraphNodeReference neighbor :
node.getNeighborsList() ) {
     sum += ????
     count++;
   }
   node.setWeight(sum/count);
}


----- graph.proto -----

package graph;

option java_package = "graph";
option java_outer_classname = "UndirectedGraphType";
option optimize_for = CODE_SIZE;

message UndirectedGraphNodeReference {
   required string id = 1;
   required double weight = 2;
}

message UndirectedGraphNode {
   required string id = 1;
   repeated UndirectedGraphNodeReference neighbors = 2;
}

message UndirectedGraph {
   repeated UndirectedGraphNode nodes = 1;
}



On Oct 22, 2:14 pm, Jeremy Leader <[EMAIL PROTECTED]> wrote:
> I was assuming all the properties of a node (weight, label, color,
> whatever) would be in UndirectedGraphNode; UndirectedGraphNodeReference
> would only have the id and nothing else.
>
> --
> Jeremy Leader
> [EMAIL PROTECTED]
>
> GDR wrote:
> > Thanks Jeremy. That worked!
> > But we now have information about the same node being replicated. For
> > instance, let's say we have a field 'weight' attached to each node as
> > shown below. This setup will replicate the weight information of a
> > node as many times as its degree. If the weight of a node changes, I
> > will have update all it's occurrences in the PB. Any way I can avoid
> > it?
>
> > package graph;
>
> > option java_package = "graph";
> > option java_outer_classname = "UndirectedGraphType";
> > option optimize_for = CODE_SIZE;
>
> > message UndirectedGraphNodeReference {
> >    required string id = 1;
> >    required double weight = 2;
> > }
>
> > message UndirectedGraphNode {
> >    required string id = 1;
> >    repeated UndirectedGraphNodeReference neighbors = 2;
> > }
>
> > message UndirectedGraph {
> >    repeated UndirectedGraphNode nodes = 1;
> > }
>
> > On Oct 21, 6:37 pm, Jeremy Leader <[EMAIL PROTECTED]> wrote:
> >> Keep in mind that protobufs describe serialized data, and there's no
> >> concept of an object reference like Java uses.  In your example, if A
> >> and B are neighbors, then in your proto, the data representing A
> >> contains the data representing B, and the data representing B contains
> >> the data representing A!
>
> >> One way around this is to implement your own form of references, perhaps
> >> using the node ids like this:
>
> >> package graph;
>
> >> option java_package = "graph";
> >> option java_outer_classname = "UndirectedGraph";
> >> option optimize_for = CODE_SIZE;
>
> >> message UndirectedGraphNodeReference {
> >>    required string id = 0;
>
> >> }
>
> >> message UndirectedGraphNode {
> >>    required string id = 0;
> >>    repeated UndirectedGraphNodeReference neighbors;
>
> >> }
>
> >> message UndirectedGraph {
> >>    repeated UndirectedGraphNode nodes;
>
> >> }
>
> >> --
> >> Jeremy Leader
> >> [EMAIL PROTECTED]
>
> >> GDR wrote:
> >>> Hi,
> >>> I'm wondering how would one go about implementing self-referential
> >>> data structures?  As an exercise, I tried to implement a PB version of
> >>> the adjacency list representation of a graph. I'm having a hard time
> >>> getting it work. Any suggestions?
> >>> Thanks!
> >>> --- graph.proto ---
> >>> package graph;
> >>> option java_package = "graph";
> >>> option java_outer_classname = "UndirectedGraph";
> >>> option optimize_for = CODE_SIZE;
> >>> message UndirectedGraphNode {
> >>>   required string id = 0;
> >>>   repeated UndirectedGraphNode neighbors;
> >>> }
> >>> message UndirectedGraph {
> >>>   repeated UndirectedGraphNode nodes;
> >>> }
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to