public void runSingleIteration()

in graphjet-core/src/main/java/com/twitter/graphjet/algorithms/salsa/fullgraph/LeftSalsaIteration.java [63:96]


  public void runSingleIteration() {
    int numEdgesTraversed = 0;
    int numWalksResetToQueryNode = 0;
    for (long leftNode : salsaInternalState.getCurrentLeftNodes().keySet()) {
      int numWalksToStart = salsaInternalState.getCurrentLeftNodes().get(leftNode);
      int numWalks = 0;
      for (int i = 0; i < numWalksToStart; i++) {
        if (random.nextDouble() >= salsaInternalState.getSalsaRequest().getResetProbability()) {
          numWalks++;
        }
      }
      numWalksResetToQueryNode += numWalksToStart - numWalks;
      if (numWalks > 0) {
        EdgeIterator sampledRightNodes = salsaInternalState.getBipartiteGraph()
          .getRandomLeftNodeEdges(leftNode, numWalks, random);
        int leftNodeDegree = salsaInternalState.getBipartiteGraph().getLeftNodeDegree(leftNode);
        if (sampledRightNodes != null) {
          while (sampledRightNodes.hasNext()) {
            long rightNode = sampledRightNodes.nextLong();
            salsaInternalState.addNodeToCurrentRightNodes(rightNode);
            int numVisits =
                salsaInternalState.visitRightNode(nodeVisitor, leftNode,
                  rightNode, sampledRightNodes.currentEdgeType(),
                  sampledRightNodes.currentMetadata(), leftNodeDegree);
            salsaInternalState.getSalsaStats().updateVisitStatsPerRightNode(numVisits);
            numEdgesTraversed++;
          }
        }
      }
    }
    salsaInternalState.resetCurrentLeftNodes(
        salsaInternalState.getSalsaRequest().getQueryNode(), numWalksResetToQueryNode);
    salsaInternalState.getSalsaStats().addToNumRHSVisits(numEdgesTraversed);
  }