conditionalEntropy <- function( graph ) {
# graph is a 2 or 3 column dataframe
if (ncol(graph) == 2 ) {
names(graph) <- c("from","to")
graph$weight <- 1
} else if (ncol(graph) == 3)
names(graph) <- c("from","to","weight")
max <- length(rle(paste(graph$from, graph$to))$values)
total <- sum(graph$weight)
entropy <- data.frame(H = 0, Hmax = 0);
entropy$H <- sum(graph$weight/total * log(graph$weight/total) / log(2)) * -1
entropy$Hmax <- log(max * (max-1))/log(2)
return(entropy)
}