public Graph<Attribute>[] createIDS(Graph<AttributeOccurrence>[] idp) {
        int p;
        int i;
        Graph<Attribute>[] ids;
        AttributeOccurrence left;
        AttributeOccurrence right;
        EdgeIterator<AttributeOccurrence> iter;

        ids = new Graph[symbols.last() + 1];
        for (i = 0; i < ids.length; i++) {
            ids[i] = new Graph<Attribute>();
        }
        for (p = 0; p < idp.length; p++) {
            iter = idp[p].edges();
            while (iter.step()) {
                left = iter.left();
                right = iter.right();
                if (left.sameSymbolOccurrence(right)) {
                    ids[left.attr.symbol].addEdge(left.attr, right.attr);
                }
            }
        }
        return ids;
    }
public Graph < Attribute > [ ] createIDS ( Graph < AttributeOccurrence > [ ] idp ) { int p ; int i ; Graph < Attribute > [ ] ids ; AttributeOccurrence left ; AttributeOccurrence right ; EdgeIterator < AttributeOccurrence > iter ; ids = new Graph [ symbols . last ( ) + 1 ] ; for ( i = 0 ; i < ids . length ; i ++ ) { ids [ i ] = new Graph < Attribute > ( ) ; } for ( p = 0 ; p < idp . length ; p ++ ) { iter = idp [ p ] . edges ( ) ; while ( iter . step ( ) ) { left = iter . left ( ) ; right = iter . right ( ) ; if ( left . sameSymbolOccurrence ( right ) ) { ids [ left . attr . symbol ] . addEdge ( left . attr , right . attr ) ; } } } return ids ; }
Computes "induced dependencies between attributes of symbols" IDS (Definition 3).

@return Array indexed by symbols; relation with pairs of attributes.