解题思路
DBSCAN 基于“密度”成簇:对每个点找 eps 邻域(欧氏距离 < eps 的点集合),若邻域样本数 >min_samples,该点为核心点;从未访问的核心点出发,用 BFS/DFS 扩展,将其邻域内的点并入当前簇;若被并入的点本身也是核心点,则继续把它的邻域加入队列,直到不再扩展。最终没有被任何簇吸纳的点即为噪声点。
实现细节:
- 计算并缓存所有点的邻居列表(两两距离判断,含自身);维度不写死,自动支持二维或三维输入。
core[i] = (len(neighbors[i]) > min_samples) 判定核心点。
- 逐点扫描:若是未访问的核心点,创建新簇并用队列扩展;扩展时把邻居标成当前簇,遇到核心点则把它的邻居继续入队。
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写