2 package org.forester.evoinference.distance;
4 import java.text.DecimalFormat;
5 import java.util.ArrayList;
7 import java.util.Map.Entry;
9 import java.util.SortedMap;
10 import java.util.SortedSet;
11 import java.util.TreeMap;
12 import java.util.TreeSet;
14 import org.forester.evoinference.matrix.distance.BasicSymmetricalDistanceMatrix;
18 private final List<SortedMap<Double, SortedSet<Integer>>> _data;
21 _data = new ArrayList<SortedMap<Double, SortedSet<Integer>>>();
25 public String toString() {
26 final DecimalFormat df = new DecimalFormat( "0.00" );
27 final StringBuilder sb = new StringBuilder();
28 for( int j = 1; j < size(); ++j ) {
29 for( final Entry<Double, SortedSet<Integer>> entry : getSentrySet( j ) ) {
30 final double key = entry.getKey();
31 final SortedSet<Integer> values = entry.getValue();
32 sb.append( df.format( key ) + "->" );
34 for( final Integer v : values ) {
48 void addPairing( final double key, final int value, final int j ) {
49 final SortedMap<Double, SortedSet<Integer>> m = getS( j );
50 addPairing( key, value, m );
53 SortedMap<Double, SortedSet<Integer>> getS( final int j ) {
54 return _data.get( j );
57 Set<Entry<Double, SortedSet<Integer>>> getSentrySet( final int j ) {
58 return getS( j ).entrySet();
61 void initialize( final BasicSymmetricalDistanceMatrix d ) {
62 for( int j = 0; j < d.getSize(); ++j ) {
63 final TreeMap<Double, SortedSet<Integer>> map = new TreeMap<Double, SortedSet<Integer>>();
65 for( int i = 0; i < j; ++i ) {
66 addPairing( d.getValues()[ i ][ j ], i, map );
69 System.out.println( toString() );
72 void removePairing( final double key, final int value, final int j ) {
73 final SortedMap<Double, SortedSet<Integer>> m = _data.get( j );
74 final SortedSet<Integer> x = m.get( key );
75 if ( x.size() == 1 ) {
76 if ( !x.contains( value ) ) {
77 //TODO remove me later
78 throw new IllegalStateException( "pairing " + key + " -> " + value + " does not exist" );
82 else if ( x.size() > 1 ) {
83 final boolean removed = x.remove( value );
85 //TODO remove me later
86 throw new IllegalStateException( "pairing " + key + " -> " + value + " does not exist/was not removed" );
90 //TODO remove me later
91 throw new IllegalStateException( "empty" );
99 private static void addPairing( final double key, final int value, final SortedMap<Double, SortedSet<Integer>> m ) {
100 if ( !m.containsKey( key ) ) {
101 final TreeSet<Integer> x = new TreeSet<Integer>();
106 if ( m.get( key ).contains( value ) ) {
107 //TODO remove me later
108 throw new IllegalStateException( "pairing " + key + " -> " + value + " already exists" );
110 m.get( key ).add( value );