三角闭环算法


public class TriangleCountComputation	extends
   AbstractComputation<IntWritable, IntWritable, NullWritable, IntWritable, IntWritable> {

	@Override
	public void compute(Vertex<IntWritable, IntWritable, NullWritable> vertex,
			Iterable<IntWritable> messages) throws IOException {
		long superstep = getSuperstep();
		if (superstep==0) {
		    vertex.setValue(new IntWritable(0));
		} else if (superstep==1) {
		    for (Edge<IntWritable, NullWritable> edge: vertex.getEdges()) {
		        if (edge.getTargetVertexId().compareTo(vertex.getId()) > 0) { //stage1:向所有比自己Id大的边发自己Id
		          sendMessage(edge.getTargetVertexId(), vertex.getId());
		        }
		      }
		    vertex.voteToHalt();
		} else if (superstep==2) {
		      for (IntWritable msg : messages) {
			        assert(msg.compareTo(vertex.getId())<0); // This can never happen
			        for (Edge<IntWritable, NullWritable> edge: vertex.getEdges()) {
			          if (vertex.getId().compareTo(edge.getTargetVertexId()) < 0) {  //stage2:向所有比自己Id小的边发消息
			            sendMessage(edge.getTargetVertexId(), msg);
			          }
			        } 
			      }
		      vertex.voteToHalt();
		} else  {
		      int count = 0;
		      for (IntWritable msg : messages) {
		        // If this vertex has a neighbor with this ID, then this means it
		        // participates in a triangle.
		        if (vertex.getEdgeValue(msg)!=null) {
		          count++;
		        }
		      }
		      if (count>0) {
		        vertex.setValue(new IntWritable(count));
		      }
		      vertex.voteToHalt();
		}
	}
}


举例:1->2,2->3,3->1, 则123构成一个闭环三角,


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值