source: src/main/java/weka/clusterers/forMetisMQI/UndirectedGraph.java @ 10

Last change on this file since 10 was 10, checked in by gnappo, 14 years ago

Corretti alcuni bachi inseriti con la migrazione a Jung.

File size: 3.4 KB
Line 
1package weka.clusterers.forMetisMQI;
2
3import java.util.ArrayList;
4import java.util.Collection;
5import java.util.Iterator;
6import java.util.List;
7
8import weka.core.Attribute;
9import weka.core.Instance;
10import weka.core.Instances;
11import edu.uci.ics.jung.graph.UndirectedSparseGraph;
12import edu.uci.ics.jung.graph.util.Pair;
13
14public class UndirectedGraph extends UndirectedSparseGraph<Node, Edge> {
15       
16        private static final long serialVersionUID = 1L;
17
18        public List<Node> vtxsPermutation() {
19                Random r = Random.instance(); 
20                List<Node> perm = new ArrayList<Node>();
21                Iterator<Node> vtxsIterator = getVertices().iterator();
22                while(vtxsIterator.hasNext()) {
23                        Node node = vtxsIterator.next();
24                        perm.add(node);
25                }
26                for (int i = 0; i < perm.size(); i++) {
27                        int k = r.nextInt(perm.size());
28                        Node swap = perm.get(k);
29                        perm.set(k, perm.get(i));
30                        perm.set(i, swap);
31                }
32                return perm;
33        }
34       
35        public boolean containsEdge(Node v1, Node v2) {
36                return (findEdge(v1, v2) != null);
37        }
38       
39        public Node findVertex(Node v1) {
40                Iterator<Node> graphIterator = getVertices().iterator();
41                while(graphIterator.hasNext()) {
42                        Node v2 = graphIterator.next();
43                        if(v1.equals(v2)) return v2;
44                }
45                return null;
46        }
47       
48        public Collection<Node> getNeighborsPermutation(Node n) {
49                Random r = Random.instance();
50                ArrayList<Node> perm = new ArrayList<Node>();
51                Iterator<Node> vtxsIterator = getNeighbors(n).iterator();
52                while(vtxsIterator.hasNext()) {
53                        Node node = vtxsIterator.next();
54                        perm.add(node);
55                }
56                for (int i = 0; i < perm.size(); i++) {
57                        int k = r.nextInt(perm.size());
58                        Node swap = perm.get(k);
59                        perm.set(k, perm.get(i));
60                        perm.set(i, swap);
61                }
62                return perm;
63        }
64       
65        public void loadFromInstance(Instances data) {
66                Iterator<Instance> dataIterator = data.iterator();
67                Attribute from = data.attribute("from");
68                Attribute to = data.attribute("to");
69                if (from == null || to == null)
70                        throw new RuntimeException(
71                                        "Unsupported data: check the list of attributes (from and to are needed).");
72                int edgeId = 0;
73                while (dataIterator.hasNext()) {
74                        Instance edge = dataIterator.next();
75                        Node node1 = new Node(Integer.toString(((int) Math.round(edge.value(from)))));
76                        Node node2 = new Node(Integer.toString(((int) Math.round(edge.value(to)))));
77                        addVertex(node1);
78                        addVertex(node2);
79                        addEdge(new Edge(Integer.toString(edgeId),1,1),node1,node2);
80                        edgeId++;
81                }
82        }
83       
84        @Override
85        public UndirectedGraph clone() {
86                UndirectedGraph g = new UndirectedGraph();
87                Iterator<Node> nodesIterator = getVertices().iterator();
88                while(nodesIterator.hasNext()) {
89                        g.addVertex(nodesIterator.next().clone());
90                }
91               
92                Iterator<Edge> edgesIterator = getEdges().iterator();
93                while(edgesIterator.hasNext()) {
94                        Edge e = edgesIterator.next();
95                        g.addEdge(e.clone(), getEndpoints(e));
96                }
97                return g;
98        }
99       
100        public int getAdjcncyWeight(Node v1){
101                Iterator<Node> nbsIterator = getNeighbors(v1).iterator();
102                int adjcncyWgt = 0;
103                while(nbsIterator.hasNext()) {
104                        Node v2 = nbsIterator.next();
105                        Edge edge = findEdge(v1, v2);
106                        adjcncyWgt += edge.getWeight();
107                }
108                return adjcncyWgt;
109        }
110       
111        public String toString() {
112                StringBuffer sb = new StringBuffer("Vertices:");
113        for(Node v : getVertices()) {
114                sb.append(v+ " Adjw: "+ getAdjcncyWeight(v) + ",");
115        }
116        sb.setLength(sb.length()-1);
117        sb.append("\nEdges:");
118        for(Edge e : getEdges()) {
119                Pair<Node> ep = getEndpoints(e);
120                sb.append(e+"["+ep.getFirst()+","+ep.getSecond()+"] ");
121        }
122        return sb.toString();
123        }
124
125}
Note: See TracBrowser for help on using the repository browser.