\HeaderA{highlyConnSG}{Compute highly connected subgraphs for an undirected graph}{highlyConnSG}
\keyword{models}{highlyConnSG}
\begin{Description}\relax
Compute highly connected subgraphs for an undirected graph
\end{Description}
\begin{Usage}
\begin{verbatim}
highlyConnSG(g, sat=3, ldv=c(3,2,1))
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{g}] an instance of the \code{graph} class with \code{edgemode}
\dQuote{undirected}
\item[\code{sat}] singleton adoption threshold, positive integer 
\item[\code{ldv}] heuristics to remove lower degree vertice, a decreasing sequence of positive integer 
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
A graph G with n vertices is highly connected if its connectivity k(G) > n/2.  The HCS algorithm partitions a given graph into a set of highly connected subgraphs, by using minimum-cut algorithm recursively.  To improve performance, the approach is refined by adopting singletons, removing low degree vertices and merging clusters.    

On singleton adoption: 
after each round of partition,  some highly connected subgraphs could be
singletons (i.e., a subgraph contains only one node).
To reduce the number of singletons, therefore reduce number of clusters, 
we try to get "normal" subgraphs to "adopt" them.  If a singleton, s, has n 
neighbours in a highly connected subgraph c, and n > sat, we add s to c.  
To adapt to the modified subgraphs, this adoption process is repeated until 
no further such adoption. 

On lower degree vertices: when the graph has low degree vertices, minimum-cut
algorithm will just repeatedly separate these vertices from the rest. 
To reduce such expensive and non-informative computation, we "remove" these 
low degree vertices first before applying minimum-cut algorithm.  
Given ldv = (d1, d2, ..., dp), (d[i] > d[i+1] > 0), we repeat the following
(i from 1 to p): remove all the highly-connected-subgraph found so far; 
remove vertices with degrees < di; find highly-connected-subgraphs; 
perform singleton adoptions.
\end{Details}
\begin{Value}
A list of clusters, each is given as vertices in the graph.
\end{Value}
\begin{Author}\relax
Li Long <li.long@isb-sib.ch>
\end{Author}
\begin{References}\relax
A Clustering Algorithm based on Graph Connectivity by E. Hartuv, R. Shamir, 1999.
\end{References}
\begin{SeeAlso}\relax
\code{\LinkA{edgeConnectivity}{edgeConnectivity}}, \code{\LinkA{minCut}{minCut}}
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
coex <- fromGXL(file(system.file("XML/hcs.gxl",package="RBGL"), open="r"))
highlyConnSG(coex)
\end{ExampleCode}
\end{Examples}

