public void ExpandCluster( ArrayList<Node> points, Node p, ArrayList<Node> neighborhood, ArrayList<Node> C, int eps, int MinPts) { ArrayList<Node> Cprime = null; Cprime.add(p); ArrayList<Node> ClusterSupreme = null; ClusterSupreme.addAll(Cprime); ClusterSupreme.addAll(neighborhood); for (int i = 0; i < neighborhood.size(); i++) { Node Pprime = neighborhood.get(i); if (Pprime.checkVisited() == false) { Pprime.markVisited(); ArrayList<Node> NeighborPtsPrime = null; NeighborPtsPrime = RegionQuery(Pprime, points, eps); if (NeighborPtsPrime.size() >= MinPts) { neighborhood.addAll(NeighborPtsPrime); } } if (checkCluster(Pprime, ClusterSupreme)) { Cprime.add(Pprime); } } }
public void DBSCAN(ArrayList<Node> SetOfPoints, int eps, int MinPts) { ArrayList<Node> C = new ArrayList(); for (int i = 0; i < SetOfPoints.size(); i++) { Node P = SetOfPoints.get(i); if (P.checkVisited() == false) { P.markVisited(); } ArrayList<Node> NeighborPts = null; NeighborPts = RegionQuery(P, SetOfPoints, eps); if (NeighborPts.size() < MinPts) { P.markNoise(); } else { // C.add(e); // C = next cluster C.addAll(new ArrayList<Node>()); ExpandCluster(SetOfPoints, P, NeighborPts, C, eps, MinPts); } } }