func()

in vermeer/algorithms/betweenness_centrality.go [156:213]


func (bcw *BetweennessCentralityWorker) Compute(vertexID uint32, pID int) {
	if bcw.stopFlag {
		return
	}
	vertID := vertexID - bcw.WContext.GraphData.VertIDStart
	switch bcw.WContext.Step {
	case 1:
		inEdges := bcw.WContext.GraphData.Edges.GetInEdges(vertID)
		bcw.neighborEdges[vertexID] = make([]serialize.SUint32, 0, len(inEdges))
		for _, edge := range inEdges {
			if !bcw.sample() || uint32(edge) == vertexID {
				continue
			}
			bcw.neighborEdges[vertexID] = append(bcw.neighborEdges[vertexID], edge)
			bcw.bfsNewValues[vertID][uint32(edge)] = [][]uint32{}
			bcw.betweennessValueMap[vertexID][edge] = 0
			if bcw.useEndPoint {
				bcw.betweennessValueMap[vertexID][edge] += 1 * bcw.scale
			}
		}
		bcw.stopSum[pID] = 1
	default:
		for k, v := range bcw.bfsOldValues[vertID] {
			for _, nId := range bcw.neighborEdges[k] {
				if !bcw.sample() || nId == serialize.SUint32(vertexID) {
					continue
				}
				if _, ok := bcw.betweennessValueMap[vertexID][nId]; !ok {
					bcw.stopSum[pID] = 1
					bcw.tempEdges[pID] = append(bcw.tempEdges[pID], nId)
					for _, vi := range v {
						newV := append(vi, k)
						bcw.bfsNewValues[vertID][uint32(nId)] = append(bcw.bfsNewValues[vertID][uint32(nId)], newV)
					}
					if len(v) == 0 {
						bcw.bfsNewValues[vertID][uint32(nId)] = append(bcw.bfsNewValues[vertID][uint32(nId)], []uint32{k})
					}
				}
			}
		}
		for _, edge := range bcw.tempEdges[pID] {
			bcw.betweennessValueMap[vertexID][edge] = 0
			if bcw.useEndPoint {
				bcw.betweennessValueMap[vertexID][edge] += 1 * bcw.scale
			}
		}
	}
	bcw.tempEdges[pID] = bcw.tempEdges[pID][0:0]
	for _, values := range bcw.bfsNewValues[vertID] {
		for _, v := range values {
			for _, u := range v {
				bcw.betweennessValueMap[vertexID][serialize.SUint32(u)] +=
					1.0 / serialize.SFloat32(len(values)) * bcw.scale
			}
		}
	}

}