igraph/ext/cIGraph_randomisation.c

58 lines
1.5 KiB
C
Executable File

#include "igraph.h"
#include "ruby.h"
#include "cIGraph.h"
/* call-seq:
* g.rewire_edges(prob) -> IGraph
*
* Rewire the edges of a graph with constant probability This function
* rewires the edges of a graph with a constant probability. More precisely
* each end point of each edge is rewired to an uniformly randomly chosen
* vertex with constant probability prob.
*
* prob: The rewiring probability a constant between zero and one (inclusive).
*/
VALUE cIGraph_rewire_edges(VALUE self, VALUE prop){
igraph_t *graph;
igraph_t *copy_graph;
VALUE new_graph;
new_graph = cIGraph_alloc(cIGraph);
Data_Get_Struct(new_graph, igraph_t, copy_graph);
Data_Get_Struct(self, igraph_t, graph);
igraph_copy(copy_graph,graph);
igraph_rewire_edges(copy_graph,NUM2DBL(prop));
return new_graph;
}
/* call-seq:
* g.rewire(n) -> IGraph
*
* Randomly rewires a graph while preserving the degree distribution.
*
* This function generates a new graph based on the original one by randomly
* rewiring edges while preserving the original graph's degree distribution.
*
* n: Number of rewiring trials to perform.
*/
VALUE cIGraph_rewire(VALUE self, VALUE n){
igraph_t *graph;
igraph_t *copy_graph;
VALUE new_graph;
new_graph = cIGraph_alloc(cIGraph);
Data_Get_Struct(new_graph, igraph_t, copy_graph);
Data_Get_Struct(self, igraph_t, graph);
igraph_copy(copy_graph,graph);
igraph_rewire(copy_graph,NUM2INT(n),0);
return new_graph;
}