def update()

in cassovary-core/src/main/scala/com/twitter/cassovary/algorithms/TriangleCount.scala [116:149]


  def update(iteration : Int, fromNode : Int, toNode : Int) : (Double, Long) = {
    require(fromNode < toNode)
    (0 until parameters.wedgeReservoirSize).foreach {
      i =>
        val wedge = wedgeReservoir(i)
        if (wedge(0) == fromNode && wedge(2) == toNode) {
          isClosed(i) = true
        }
    }
    var updated = false
    (0 until parameters.edgeReservoirSize).foreach {
      i =>
        if (rng.nextDouble <= 1.0 / iteration) {
          edgeReservoir.set(i, List(fromNode, toNode))
          updated = true
        }
    }
    if (updated) {
      totalWedges = computeWedgesInEdgeReservoir(edgeReservoir)
      val newWedges = edgeReservoir.distinctIterator
        .filter(edge => edge.contains(fromNode) ^ edge.contains(toNode)).toArray
      if (newWedges.nonEmpty) {
        (0 until parameters.wedgeReservoirSize).foreach {
          wedgeNum =>
            if (rng.nextDouble() < newWedges.size.toDouble / totalWedges) {
              val randomNewWedge = createWedge(randomFromArray(newWedges), Seq(fromNode, toNode))
              wedgeReservoir.set(wedgeNum, randomNewWedge)
              isClosed(wedgeNum) = false
            }
        }
      }
    }
    (isClosed.size.toDouble / parameters.wedgeReservoirSize, totalWedges)
  }