Коэффициент кластеризации с использованием SQL Server / C #

У меня есть две таблицы в SQL Server, то есть одна таблица GraphNodes как:

---------------------------------------------------------
id | Node_ID | Node            |  Node_Label | Node_Type
---------------------------------------------------------
1    677       Nuno Vasconcelos   Author       1
2    1359      Peng Shi           Author       1
3    6242      Z. Q. Shi          Author       1
4    8318      Kiyoung Choi       Author       1
5    12405     Johan A. K.        Author       1
6    26615     Tzung-Pei Hong     Author       1
7    30559     Luca Benini        Author       1  
...  
...  

а другая таблица GraphEdges как:

-----------------------------------------------------------------------------------------
id | Source_Node | Source_Node_Type | Target_Node | Target_Node_Type | Year |  Edge_Type
-----------------------------------------------------------------------------------------
1    1             1                  10965         2                  2005    1
2    1             1                  10179         2                  2007    1
3    1             1                  10965         2                  2007    1
4    1             1                  19741         2                  2007    1
5    1             1                  10965         2                  2009    1
6    1             1                  4816          2                  2011    1
7    1             1                  5155          2                  2011    1  
...  
...

У меня также есть две таблицы, т.е. GraphNodeTypes как:

-------------------------
id | Node    | Node_Type
-------------------------
1    Author    1
2    CoAuthor  2
3    Venue     3
4    Paper     4  

и GraphEdgeTypes как:

-------------------------------
id | Edge          | Edge_Type
-------------------------------
1    AuthorCoAuthor  1
2    CoAuthorVenue   2
3    AuthorVenue     3
4    PaperVenue      4
5    AuthorPaper     5
6    CoAuthorPaper   6  

Теперь я хочу рассчитать коэффициент кластеризации для этого графа, то есть двух типов:
Если N (V) - это количество связей между соседями узла V и K (V) является степенью узла V, тогда,

Local Clustering Coefficient(V) = 2 * N(V)/K(V) [K(V) - 1]  

а также

Global Clustering Coefficient = 3 * # of Triangles / # of connected Triplets of V  

Вопрос в том, как я могу рассчитать степень узла? Возможно ли это в SQL Server или требуется программирование на C #. А также, пожалуйста, предложите подсказки для расчета локальных и глобальных CC.

Спасибо!


person maliks    schedule 23.02.2016    source источник


Ответы (2)


Степень узла не «вычисляется». Это просто количество ребер этого узла.

Хотя вы можете попробовать сделать это в SQL, производительность, скорее всего, будет посредственной. Такой тип анализа обычно выполняется в специализированных базах данных и, по возможности, в памяти.

person Has QUIT--Anony-Mousse    schedule 23.02.2016

Подсчитайте степень каждой вершины как количество ребер, соединенных с ней. В этом случае будет полезно использовать COUNT (source_node) и GROUP BY (source_node).

Чтобы найти N (V), вы можете соединить крайнюю таблицу с самим собой, а затем взять пересечение между результирующей таблицей и краевой таблицей. Из результата для каждой вершины возьмите СЧЕТЧИК ().

person user3503711    schedule 03.12.2018