public bool ContainsClique(ICliqueMatrix cliqueMatrix) { if (cliqueMatrix.NodeCount != NodeCount) throw new NetworkMatrixException(IncompatibleMatrixMessage); var submatrix = GetSubmatrix(cliqueMatrix.MemberNodeIds); var cliqueRepBitString = cliqueMatrix.RepresentativeNode.AsBitMask(); foreach (var matrixRow in submatrix) { var cliqueEnumerator = cliqueRepBitString.GetEnumerator(); cliqueEnumerator.MoveNext(); long cliqueBitString; foreach (var rowBitString in matrixRow.AsBitMask()) { cliqueBitString = cliqueEnumerator.Current; if ((cliqueBitString & rowBitString) != cliqueBitString) return false; cliqueEnumerator.MoveNext(); } } return true; }
public CliqueMemento(ICliqueMatrix firstClique, IEnumerator<ICliqueMatrix> solutions) { if (firstClique == null) throw new CliqueMementoException(FirstCliqueMustNotBeNull); _firstClique = firstClique; _solutions = solutions; }
public PredicatedCliqueMemento(ICliqueMatrix firstClique, IEnumerator<ICliqueMatrix> solutions, Predicate<ICliqueMatrix> predicate) { if (firstClique == null) throw new PredicatedCliqueMementoException(FirstCliqueMustNotBeNull); _firstClique = firstClique; _solutions = solutions; _predicate = predicate; }
/// <summary> /// Finds all cliques of maximal size of which the given subnetwork members are a subset. /// </summary> /// <param name="socialNetworkMatrix">The INetworkMatrix instance being searched.</param> /// <param name="subnetwork">An ICliqueMatrix composed of a set of nodes which should be included in any solution ICliqueMatrix instances.</param> /// <returns>The collection of ICliqueMatrix instances which are of maximal size and include every member of the ICliqueMatrix subnetwork instance.</returns> public static IEnumerable<ICliqueMatrix> FindLargestCliqueInvolvingSubnetwork(INetworkMatrix socialNetworkMatrix, ICliqueMatrix subnetwork) { var superNetworkCondition = new Predicate<ICliqueMatrix>( possibleSuperNetwork => possibleSuperNetwork.ContainsClique(subnetwork) ); var searchResults = PredicatedBinarySearch(socialNetworkMatrix, 1, socialNetworkMatrix.NodeCount, superNetworkCondition); return searchResults != null ? searchResults.Solutions : Enumerable.Empty<ICliqueMatrix>(); }