组件#

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)。