Graph getUnweightedSubGraph()

in src/main/java/com/twitter/sbf/graph/Graph.java [765:793]


  Graph getUnweightedSubGraph(ImmutableMap<Integer, Integer> newToOriginal) {
    int numNodesOfSubgraph = newToOriginal.size();
    Map<Integer, Integer> originalToNew = new HashMap<>(newToOriginal.size(), 1.0f);

    for (int i = 0; i < numNodesOfSubgraph; i++) {
      originalToNew.put(newToOriginal.get(i), i);
    }

    int[][] newGraphNeighbors = new int[numNodesOfSubgraph][];
    long newGraphEdges = 0;
    for (int i = 0; i < numNodesOfSubgraph; i++) {
      int originalId = newToOriginal.get(i);
      ArrayList<Integer> newNeighbors = new ArrayList<>();
      int[] originalNeighbors = this.getNeighbors(originalId);
      for (int nbr : originalNeighbors) {
        if (originalToNew.containsKey(nbr)) {
          newNeighbors.add(originalToNew.get(nbr));
        }
      }
      newGraphNeighbors[i] = new int[newNeighbors.size()];
      int j = 0;
      for (int newNbr : newNeighbors) {
        newGraphNeighbors[i][j++] = newNbr;
        newGraphEdges++;
      }
    }

    return new Graph(numNodesOfSubgraph, newGraphEdges / 2, newGraphNeighbors);
  }