组件#
- template<typename VT, typename ET, typename WT>
void connected_components(legacy::GraphCSRView<VT, ET, WT> const &graph, cugraph_cc_t connectivity_type, VT *labels)#计算连通分量。
弱连通分量版本(仅适用于无向图)从 cuML 导入。此实现来自 [1],并基于顶点度数和邻接图,在 CSR 索引上并行解决分量标记问题。
[1] Hawick, K.A et al, 2010. “Parallel graph component labelling with GPUs and CUDA”
强连通分量版本(适用于有向图或无向图)基于:[2] Gilbert, J. 等,2011 年。“线性代数语言中的图算法”
C = I | A | A^2 |…| A^k,其中矩阵乘法通过半环进行:(combine, reduce) == (&, |) (位操作) 然后:X = C & transpose(C);最后,应用 get_labels(X);
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
VT – 顶点标识符类型。支持的值:int (有符号, 32 位)
ET – 边标识符类型。支持的值:int (有符号, 32 位)
WT – 边权重类型。支持的值:float 或 double。
- 参数:
graph – [in] cuGraph 图描述符,应包含以 CSR 形式表示的连通性信息
connectivity_type – [in] 强连通 或 弱连通
labels – [out] 分量标签的设备数组(labels[i] 表示与顶点 ID i 关联的标签)。
- template<typename vertex_t, typename edge_t, bool multi_gpu>
void weakly_connected_components(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, vertex_t *components, bool do_expensive_check = false)#找到输入图中每个顶点的(弱连通)分量 ID。
.*
输入图必须是对称的。分量 ID 可以是任意整数(它们可以是不连续的,并且不按分量大小或任何其他标准排序)。
- 模板参数:
vertex_t – 顶点标识符类型。需要是整型。
edge_t – 边标识符类型。需要是整型。
multi_gpu – 指示模板实例化应针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 图视图对象。
components – 指向输出分量 ID 数组的指针。
do_expensive_check – 一个标志,用于对输入参数进行昂贵的检查(如果设置为
true
)。