SML-Segmentlab

本文详细探讨了如何应用Borůvka's Algorithm来生成无向图的最小生成树,并介绍了在Python中处理图像的Segmentation过程。在实验背景部分,阐述了算法应用于图像处理的背景;实验细节部分,除了详述Borůvka's Algorithm的MST生成及其复杂度分析,还解释了结合初始信誉值进行图像分割的findSegment函数。同时,提供了三个书面问题,讨论了第二小边在MST中的必要性、环形街道上的彩票预期奖品数以及算法的线性特性。
摘要由CSDN通过智能技术生成

Segmentlab

实验背景

本实验研究了如何将星型收缩法应用至生成无向图的最小生成树的方法(Bor˚ uvka’s Algorithm),并在此基础上通过Python处理图像

实验细节

1 Bor˚ uvka’s Algorithm

1.1 MST

MST : edge seq * int -> edge seq

函数功能:

生成所给图的最小生成树,并以edge seq 的形式返回

函数思路:

以随机生成的0,1串模拟硬币的正反面,运用Bor˚ uvka’s Algorithm即可,注意修改各点信息的存储形式以使得时间复杂度得以在数据量大的时候能够胜任

函数代码:

  type vertex = int
  type weight = int
  type edge = vertex * vertex * weight

  fun cmp (x,y) = Int.compare (x,y)

  fun pint n = print ((Int.toString n)^" ")

  fun MST (E : edge seq, n : int) : edge seq =
    let
      fun joinerStarContract (V,E,s) =
        let 
          val minE = filter (fn (_,(a,_,_)) => a>=0) (enum (inject E (tabulate (fn _ => (~1,~1,(~1,~1,~1))) n)))
          val coins = Rand.flip s n 
          val P = filter (fn (u,(v,w,l)) => ((nth coins u) = 0 andalso (nth coins v) = 1) ) minE
          val V' = inject (map (fn (u,(v,_,_)) => (u,v)) P) V 
        in 
          (V',P)
        end
      fun MST' ((V,E),S,seed) = 
        if length E = 0 then S
        else
        let
          val _ = ()
          val _ = pint (length E)
          val (V',PT) = joinerStarContract (V,E,seed)
          val _ = pint (length PT)
          val E' = filter (fn (u,(v,w,l)) => u<>v) (map (fn (u,(v,w,l)) => (nth V' u,(nth V' v,w,l))) E)
          val S' = map (fn (u,(v,w,l)) => l) PT
          val _ = pint (lengt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值