Esempio n. 1
0
        public void ComputeNP(Matrix WCA, Matrix CCA, int node, int n, List <List <int> > Blocks, CliqueCollection _cliques, List <int[]> communities, int comNum, bool isComm, bool isClique, Matrix Cohesion, List <double> tempattribute, bool file)
        {
            if (!isClique && !isComm)
            {
                for (int col = 0; col < Blocks.Count; col++)
                {
                    if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col]))
                    {
                        List <int> rcalist   = new List <int>();
                        List <int> rccalist  = new List <int>();
                        List <int> rccalist2 = new List <int>();
                        for (int row = 0; row < n; row++)
                        {
                            if (Blocks[col].Contains(row) && row != node)
                            {
                                rcalist.Add(row);
                            }
                        }
                        Clique rcaclique = new Clique(rcalist, n);
                        rcaclique.ComputeCohesion(Cohesion);
                        double rcawsum = rcaclique.ComputeWsum(tempattribute, file);
                        for (int row = 0; row < n; row++)
                        {
                            if (!Blocks[col].Contains(row) || row == node)
                            {
                                rccalist.Add(row);
                            }
                            if (!Blocks[col].Contains(row))
                            {
                                rccalist2.Add(row);
                            }
                        }
                        Clique rccaclique = new Clique(rccalist, n);
                        rccaclique.ComputeCohesion(Cohesion);
                        double rccawsum    = rccaclique.ComputeWsum(tempattribute, file);
                        Clique rccaclique2 = new Clique(rccalist2, n);
                        rccaclique2.ComputeCohesion(Cohesion);
                        double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file);

                        if (rcawsum < rccawsum)
                        {
                            np += 1;
                        }
                        else if (rcawsum == rccawsum)
                        {
                            np += 0.5;
                        }
                        if (rcawsum < rccawsum2)
                        {
                            npabs += 1;
                        }
                        else if (rcawsum == rccawsum2)
                        {
                            npabs += 0.5;
                        }
                    }
                }
            }//if block
            else if (isComm)
            {
                for (int col = 0; col < comNum; col++)
                {
                    if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col]))
                    {
                        List <int> rcalist   = new List <int>();
                        List <int> rccalist  = new List <int>();
                        List <int> rccalist2 = new List <int>();
                        // recreate the WCA matrix without the members of the node
                        for (int row = 0; row < n; row++)
                        {
                            if ((communities[col][row] != 0) && (row != node))
                            {
                                rcalist.Add(row);
                            }
                        }
                        Clique rcaclique = new Clique(rcalist, n);
                        rcaclique.ComputeCohesion(Cohesion);

                        double rcawsum = rcaclique.ComputeWsum(tempattribute, file);
                        // recreate the CCA matrix with the members that were removed
                        // from the WCA matrix previously
                        for (int row = 0; row < n; row++)
                        {
                            if ((communities[col][row] == 0) || (row == node))
                            {
                                rccalist.Add(row);
                            }
                            if (communities[col][row] == 0)
                            {
                                rccalist2.Add(row);
                            }
                        }
                        Clique rccaclique = new Clique(rccalist, n);
                        rccaclique.ComputeCohesion(Cohesion);
                        double rccawsum    = rccaclique.ComputeWsum(tempattribute, file);
                        Clique rccaclique2 = new Clique(rccalist2, n);
                        rccaclique2.ComputeCohesion(Cohesion);
                        double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file);

                        if (rcawsum < rccawsum)
                        {
                            np += 1;
                        }
                        else if (rcawsum == rccawsum)
                        {
                            np += 0.5;
                        }
                        if (rcawsum < rccawsum2)
                        {
                            npabs += 1;
                        }
                        else if (rcawsum == rccawsum2)
                        {
                            npabs += 0.5;
                        }
                    }
                }
            }
            else //if use clique
            {
                for (int col = 0; col < _cliques.Count; col++)
                {
                    if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col]))
                    {
                        List <int> rcalist   = new List <int>();
                        List <int> rccalist  = new List <int>();
                        List <int> rccalist2 = new List <int>();
                        for (int row = 0; row < n; row++)
                        {
                            if (_cliques[col].Contains(row) && row != node)
                            {
                                rcalist.Add(row);
                            }
                        }
                        Clique rcaclique = new Clique(rcalist, n);
                        rcaclique.ComputeCohesion(Cohesion);
                        double rcawsum = rcaclique.ComputeWsum(tempattribute, file);
                        for (int row = 0; row < n; row++)
                        {
                            if (!_cliques[col].Contains(row) || row == node)
                            {
                                rccalist.Add(row);
                            }
                            if (!_cliques[col].Contains(row))
                            {
                                rccalist.Add(row);
                            }
                        }
                        Clique rccaclique = new Clique(rccalist, n);
                        rccaclique.ComputeCohesion(Cohesion);
                        double rccawsum    = rccaclique.ComputeWsum(tempattribute, file);
                        Clique rccaclique2 = new Clique(rccalist2, n);
                        rccaclique2.ComputeCohesion(Cohesion);
                        double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file);

                        if (rcawsum < rccawsum)
                        {
                            np += 1;
                        }
                        else if (rcawsum == rccawsum)
                        {
                            np += 0.5;
                        }
                        if (rcawsum < rccawsum2)
                        {
                            npabs += 1;
                        }
                        else if (rcawsum == rccawsum2)
                        {
                            npabs += 0.5;
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        public void ComputeNP(Matrix WCA, Matrix CCA, int node, int n, List<List<int>> Blocks, CliqueCollection _cliques, List<int[]> communities, int comNum, bool isComm, bool isClique, Matrix Cohesion, List<double> tempattribute, bool file)
        {
            if (!isClique && !isComm)
            {
                for (int col = 0; col < Blocks.Count; col++)
                {
                    if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col]))
                    {
                        List<int> rcalist = new List<int>();
                        List<int> rccalist = new List<int>();
                        List<int> rccalist2 = new List<int>();
                        for (int row = 0; row < n; row++)
                            if (Blocks[col].Contains(row) && row != node)
                                rcalist.Add(row);
                        Clique rcaclique = new Clique(rcalist, n);
                        rcaclique.ComputeCohesion(Cohesion);
                        double rcawsum = rcaclique.ComputeWsum(tempattribute, file);
                        for (int row = 0; row < n; row++)
                        {
                            if (!Blocks[col].Contains(row) || row == node)
                                rccalist.Add(row);
                            if (!Blocks[col].Contains(row))
                                rccalist2.Add(row);
                        }
                        Clique rccaclique = new Clique(rccalist, n);
                        rccaclique.ComputeCohesion(Cohesion);
                        double rccawsum = rccaclique.ComputeWsum(tempattribute, file);
                        Clique rccaclique2 = new Clique(rccalist2, n);
                        rccaclique2.ComputeCohesion(Cohesion);
                        double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file);

                        if (rcawsum < rccawsum) np += 1;
                        else if (rcawsum == rccawsum) np += 0.5;
                        if (rcawsum < rccawsum2) npabs += 1;
                        else if (rcawsum == rccawsum2) npabs += 0.5;

                    }

                }
            }//if block
            else if (isComm)
            {
                for (int col = 0; col < comNum; col++)
                {
                    if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col]))
                    {
                        List<int> rcalist = new List<int>();
                        List<int> rccalist = new List<int>();
                        List<int> rccalist2 = new List<int>();
                        // recreate the WCA matrix without the members of the node
                        for (int row = 0; row < n; row++)
                            if ((communities[col][row] != 0) && (row != node))
                                rcalist.Add(row);
                        Clique rcaclique = new Clique(rcalist, n);
                        rcaclique.ComputeCohesion(Cohesion);

                        double rcawsum = rcaclique.ComputeWsum(tempattribute, file);
                        // recreate the CCA matrix with the members that were removed
                        // from the WCA matrix previously
                        for (int row = 0; row < n; row++)
                        {
                            if ((communities[col][row] == 0) || (row == node))
                                rccalist.Add(row);
                            if (communities[col][row] == 0)
                                rccalist2.Add(row);
                        }
                        Clique rccaclique = new Clique(rccalist, n);
                        rccaclique.ComputeCohesion(Cohesion);
                        double rccawsum = rccaclique.ComputeWsum(tempattribute, file);
                        Clique rccaclique2 = new Clique(rccalist2, n);
                        rccaclique2.ComputeCohesion(Cohesion);
                        double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file);

                        if (rcawsum < rccawsum) np += 1;
                        else if (rcawsum == rccawsum) np += 0.5;
                        if (rcawsum < rccawsum2) npabs += 1;
                        else if (rcawsum == rccawsum2) npabs += 0.5;

                    }
                }

            }
            else //if use clique
            {
                for (int col = 0; col < _cliques.Count; col++)
                {
                    if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col]))
                    {
                        List<int> rcalist = new List<int>();
                        List<int> rccalist = new List<int>();
                        List<int> rccalist2 = new List<int>();
                        for (int row = 0; row < n; row++)
                            if (_cliques[col].Contains(row) && row != node)
                                rcalist.Add(row);
                        Clique rcaclique = new Clique(rcalist, n);
                        rcaclique.ComputeCohesion(Cohesion);
                        double rcawsum = rcaclique.ComputeWsum(tempattribute, file);
                        for (int row = 0; row < n; row++)
                        {
                            if (!_cliques[col].Contains(row) || row == node)
                                rccalist.Add(row);
                            if (!_cliques[col].Contains(row))
                                rccalist.Add(row);
                        }
                        Clique rccaclique = new Clique(rccalist, n);
                        rccaclique.ComputeCohesion(Cohesion);
                        double rccawsum = rccaclique.ComputeWsum(tempattribute, file);
                        Clique rccaclique2 = new Clique(rccalist2, n);
                        rccaclique2.ComputeCohesion(Cohesion);
                        double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file);

                        if (rcawsum < rccawsum) np += 1;
                        else if (rcawsum == rccawsum) np += 0.5;
                        if (rcawsum < rccawsum2) npabs += 1;
                        else if (rcawsum == rccawsum2) npabs += 0.5;

                    }
                }
            }
        }