Esempio n. 1
0
        // 计算每一个节点的coreness
        public static List <int> getNodeCoreness(List <List <string> > data)
        {
            // 若最大的度为m,则每一个节点的coreness必在0~m之间
            List <int> allCoreness = new List <int>();

            // 先初始化每一个节点的coreness
            for (int i = 0; i < data.Count; i++)
            {
                allCoreness.Add(0);
            }
            // 由于各个方法中关于data的传递全部是引用传递,
            // 而这里需要修改data中的内容,所以最好再开辟新的空间来存放一个data
            List <List <string> > duplicateData = CommonUtils.getDuplicateData(data);
            // 计算最大的度
            int maxDegree = GraphUtils.getMaxDegree(duplicateData);
            // 判断节点是否被移除
            Boolean isRemove;

            // 从度为0一直移除到度为maxDegree, 也就是从0-coreness图一直计算到k-coreness图
            for (int k = 0; k <= maxDegree + 1; k++)
            {
                // 开始计算k-coreness图
                List <int> allDegree = GraphUtils.getAllDegree(duplicateData);
                isRemove = false;
                for (int i = 0; i < duplicateData.Count; i++)
                {
                    // 如果该点没有被移除
                    if (!(duplicateData[i][i].Equals("r")))
                    {
                        if (allDegree[i] < k)
                        {
                            allCoreness[i] = k - 1;
                            //移除该点, 这里仍需要传入该节点的标号
                            GraphUtils.removeNode(duplicateData, i + 1);
                            // 各个点的度很可能已经发生变化,需要重新计算各个点的度
                            isRemove = true;
                            break;
                        }
                        // 如果该点的度>=k
                        else
                        {
                            allCoreness[i] = k;
                        }
                    }
                }
                if (isRemove)
                {
                    k--;
                }
            }
            return(allCoreness);
        }
Esempio n. 2
0
        // 得到度最大的节点
        public static int getIndexOfMaxDegree(List <List <string> > data)
        {
            List <int> allDegree = GraphUtils.getAllDegree(data);
            int        maxDegree = -1;

            foreach (int degree in allDegree)
            {
                if (degree > maxDegree)
                {
                    maxDegree = degree;
                }
            }
            int i;

            for (i = 0; i < allDegree.Count; i++)
            {
                if (allDegree[i] == maxDegree)
                {
                    break;
                }
            }
            return(i + 1);
        }
Esempio n. 3
0
        // 计算图中最大的度
        public static int getMaxDegree(List <List <string> > data)
        {
            List <int> allDegree = GraphUtils.getAllDegree(data);

            return(allDegree.Max());
        }