GTS Library Reference Manual |
---|
#include <gts.h> GtsGraphBisection; GtsGraphBisection* gts_graph_bisection_new (GtsWGraph *wg,guint ntry,guint mmax,guint nmin,gfloat imbalance); GtsGraphBisection* gts_graph_ggg_bisection (GtsGraph *g,guint ntry); GtsGraphBisection* gts_graph_bfgg_bisection (GtsGraph *g,guint ntry);gboolean gts_graph_bisection_check (GtsGraphBisection *bg);gdouble gts_graph_bisection_kl_refine (GtsGraphBisection *bg,guint mmax);gdouble gts_graph_bisection_bkl_refine (GtsGraphBisection *bg,guint mmax,gfloat imbalance);GSList * gts_graph_recursive_bisection (GtsWGraph *wg,guint n,guint ntry,guint mmax,guint nmin,gfloat imbalance);void gts_graph_bisection_destroy (GtsGraphBisection *bg,gboolean destroy_graphs);GSList * gts_graph_bubble_partition (GtsGraph *g,guint np,guint niter, GtsFunc step_info,gpointer data);guint gts_graph_edges_cut (GtsGraph *g);gfloat gts_graph_edges_cut_weight (GtsGraph *g);guint gts_graph_partition_edges_cut (GSList *partition);gfloat gts_graph_partition_balance (GSList *partition);GSList * gts_graph_partition_clone (GSList *partition);void gts_graph_partition_print_stats (GSList *partition,FILE *fp);gfloat gts_graph_partition_edges_cut_weight (GSList *partition);void gts_graph_partition_destroy (GSList *partition);
typedef struct { GtsGraph * g; GtsGraph * g1; GtsGraph * g2; GHashTable * bg1; GHashTable * bg2; } GtsGraphBisection;
GtsGraphBisection* gts_graph_bisection_new (GtsWGraph *wg,guint ntry,guint mmax,guint nmin,gfloat imbalance);
An implementation of a multilevel bisection algorithm as presented
in Karypis and Kumar (1997). A multilevel hierarchy of graphs is
created using the GtsPGraph object. The bisection of the coarsest
graph is created using the gts_graph_ggg_bisection()
function. The
graph is then uncoarsened using gts_pgraph_down()
and at each level
the bisection is refined using gts_graph_bisection_bkl_refine()
.
wg : | a GtsWGraph. |
ntry : | the number of tries for the graph growing algorithm. |
mmax : | the number of unsucessful moves for the refinement algorithm. |
nmin : | the minimum number of nodes of the coarsest graph. |
imbalance : | the maximum relative imbalance allowed between the weights of both halves of the partition. |
Returns : | a new GtsGraphBisection of |
GtsGraphBisection* gts_graph_ggg_bisection (GtsGraph *g,guint ntry);
An implementation of the "Greedy Graph Growing" algorithm of Karypis and Kumar (1997).
ntry
randomly chosen seeds are used and the best partition is retained.
g : | a GtsGraph. |
ntry : | the number of randomly selected initial seeds. |
Returns : | a new GtsGraphBisection of |
GtsGraphBisection* gts_graph_bfgg_bisection (GtsGraph *g,guint ntry);
An implementation of a "Breadth-First Graph Growing" algorithm.
ntry
randomly chosen seeds are used and the best partition is retained.
g : | a GtsGraph. |
ntry : | the number of randomly selected initial seeds. |
Returns : | a new GtsGraphBisection of |
gboolean gts_graph_bisection_check (GtsGraphBisection *bg);
Checks that the boundary of bg
is correctly defined (used for
debugging purposes).
bg : | |
Returns : | TRUE if |
gdouble gts_graph_bisection_kl_refine (GtsGraphBisection *bg,guint mmax);
An implementation of the simplified Kernighan-Lin algorithm for graph bisection refinement as described in Karypis and Kumar (1997).
The algorithm stops if mmax
consecutive modes do not lead to a
decrease in the number of edges cut. This last mmax
moves are
undone.
bg : | |
mmax : | the maximum number of unsuccessful successive moves. |
Returns : | the decrease in the weight of the edges cut by the bisection. |
gdouble gts_graph_bisection_bkl_refine (GtsGraphBisection *bg,guint mmax,gfloat imbalance);
An implementation of the simplified boundary Kernighan-Lin algorithm for graph bisection refinement as described in Karypis and Kumar (1997).
The algorithm stops if mmax
consecutive modes do not lead to a
decrease in the number of edges cut. This last mmax
moves are
undone.
bg : | |
mmax : | the maximum number of unsuccessful successive moves. |
imbalance : | the maximum relative imbalance allowed between the weights of both halves of the partition. |
Returns : | the decrease in the weight of the edges cut by the bisection. |
GSList * gts_graph_recursive_bisection (GtsWGraph *wg,guint n,guint ntry,guint mmax,guint nmin,gfloat imbalance);
Calls gts_graph_bisection_new()
recursively in order to obtain a
2^n
partition of wg
.
wg : | a GtsWGraph. |
n : | the number of bisection levels. |
ntry : | the number of tries for the graph growing algorithm. |
mmax : | the number of unsucessful moves for the refinement algorithm. |
nmin : | the minimum number of nodes of the coarsest graph. |
imbalance : | the maximum relative imbalance allowed between the weights of both halves of the partition. |
Returns : | a list of 2^ |
void gts_graph_bisection_destroy (GtsGraphBisection *bg,gboolean destroy_graphs);
Frees all the memory allocated for bg
. If destroy_graphs
is TRUE
the graphs created by bg
are destroyed.
bg : | |
destroy_graphs : | controls graph destruction. |
GSList * gts_graph_bubble_partition (GtsGraph *g,guint np,guint niter, GtsFunc step_info,gpointer data);
An implementation of the "bubble partitioning algorithm" of
Diekmann, Preis, Schlimbach and Walshaw (2000). The maximum number
of iteration on the positions of the graph growing seeds is
controlled by niter
.
If not NULL step_info
is called after each iteration on the seeds
positions passing the partition (a GSList) as argument.
g : | a GtsGraph. |
np : | number of partitions. |
niter : | the maximum number of iterations. |
step_info : | a GtsFunc or NULL. |
data : | user data to pass to |
Returns : | a list of |
guint gts_graph_partition_edges_cut (GSList *partition);
partition : | a list of |
Returns : | the number of edges cut by the partition. |
gfloat gts_graph_partition_balance (GSList *partition);
partition : | a list of |
Returns : | the difference between the maximum and the minimum weight
of the graphs in |
GSList * gts_graph_partition_clone (GSList *partition);
partition : | a list of |
Returns : | a new partition clone of |
void gts_graph_partition_print_stats (GSList *partition,FILE *fp);
Writes to fp
a summary of the properties of partition
.
partition : | a list of |
fp : | a file pointer. |
gfloat gts_graph_partition_edges_cut_weight (GSList *partition);
partition : | a list of |
Returns : | the total weight of the edges cut by the partition. |
void gts_graph_partition_destroy (GSList *partition);
Destroys all the graphs in partition
and frees partition
.
partition : | a list of |
<<< Progressive graph |