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;
        }
示例#4
0
        /// <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>();
        }