
edu.uci.ics.jung.algorithms.matrix.MatrixElementOperations Maven / Gradle / Ivy
/*
* Copyright (c) 2003, the JUNG Project and the Regents of the University
* of California
* All rights reserved.
*
* This software is open-source under the BSD license; see either
* "license.txt" or
* http://jung.sourceforge.net/license.txt for a description.
*/
package edu.uci.ics.jung.algorithms.matrix;
import java.util.Map;
/**
* An interface for specifying the behavior of graph/matrix operations
* for a particular element type.
*
* Graph/matrix multiplication requires the definition of two operations:
*
*
* -
* Calculating an aggregate property of paths of length 2 between two
* vertices v1 and v2 (analogous to element multiplication in matrix
* arithmetic); this is handled by computePathData().
*
* -
* Aggregating the properties of all such paths, and assigning the result to
* a new edge in the output graph (analogous to element addition in matrix
* arithmetic); this is handled by mergePaths().
*
*
*
* Together, computePathData() and mergePaths() specify how the equivalent of
* the vector inner (dot) product is to function.
*
* For instance, to implement the equivalent of standard matrix multiplication
* on two graphs, computePathData() should return the products of the
* weights of a two-edge path, and mergePaths() should add
* the output of computePathData() to an existing edge (or possibly create such
* an edge if none exists).
*
* @author Joshua O'Madadhain
*/
public interface MatrixElementOperations
{
/**
* If either e or pathData is null, the effect of mergePaths() is
* implementation-dependent.
*
* @param e (possibly) existing edge in the output graph which
* represents a path in the input graph(s)
*
* @param pathData data (which represents another path with the same source
* and destination as e in the input graphs) which is to be merged into e
*/
public void mergePaths(E e, Object pathData);
/**
* If either e1 or e2 is null, the Object reference returned should be null.
*
* @param e1 first edge from 2-edge path in input graph(s)
* @param e2 second edge from 2-edge path in input graph(s)
* @return aggregation of data from the edges of the 2-edge path
* (from source of e1 to destination of e2) comprised of (e1, e2)
*/
public Number computePathData(E e1, E e2);
/**
* Returns a map from edges to values.
*/
public Map getEdgeData();
}