Algorithm 快速联合功能样式

Algorithm 快速联合功能样式,algorithm,scala,functional-programming,sbt,Algorithm,Scala,Functional Programming,Sbt,我试图通过在scala中实现Sedgewick和Wayne的“算法第四版”中的练习(并且,就我所知,以函数式的方式),将学习与快乐结合起来 在练习1.5.7时,我堵住了,希望有人能帮我。因此,任务是编写QuickUnion实现。你可能会发现 我已经编写了我的scala版本,这似乎是有道理的,但控制台输出完全令人沮丧。我正在创建一个包含625个初始组件的阵列,但是。。。末端的组件数量为。。零下 这是我的实现: package ca.vgorcinschi.algorithms1_5_7.quick

我试图通过在scala中实现Sedgewick和Wayne的“算法第四版”中的练习(并且,就我所知,以函数式的方式),将学习与快乐结合起来

在练习1.5.7时,我堵住了,希望有人能帮我。因此,任务是编写QuickUnion实现。你可能会发现

我已经编写了我的scala版本,这似乎是有道理的,但控制台输出完全令人沮丧。我正在创建一个包含625个初始组件的阵列,但是。。。末端的组件数量为。。零下

这是我的实现:

package ca.vgorcinschi.algorithms1_5_7.quickUnionUF

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

class QuickUnionUF(size: Int) extends AbstractUF(size) {

  override val array = (0 to size).toArray

  override def find(p: Int): Int = {
    validate(p)
    Stream.iterate(p)(p => array(p)).dropWhile { _ != array(p) }.head
  }

  override def connected(p: Int, q: Int): Boolean = find(p) == find(q)

  override def union(p: Int, q: Int) = {
    /*
     * need to declare Futures outisde
     * for-comprehension loop to run in parallel
     */
    val fRootP = Future { find(p) }
    val fRootQ = Future { find(q) }

    for {
      rootP <- fRootP
      rootQ <- fRootQ
      if (rootP != rootQ)
    } {
      array(rootP) = rootQ
      count -= 1
    }
  }

}

我确实担心这只鞋会影响我的未来或基于流的发现,但我似乎无法找到它…

我想我找到了。这个解决方案很奇怪,因为它让我想知道原来的解决方案是如何工作的。基本上,我只是重写父类中的counter(),以返回一个
数组.distinct.length
,即不同的整数或根:

/*
 * takes the initial number of components
 * as its argument
 */
abstract class AbstractUF(var count: Int) extends UF{

  override def counter() = array.distinct.length

  val array: Array[Int]

...
}
输出:

Le nombre initial de composants est 625
L`union fait sur 528 et 503
Le nombre des composants est maintenant - 625
L`union fait sur 548 et 523
Le nombre des composants est maintenant - 624
L`union fait sur 389 et 414
Le nombre des composants est maintenant - 623
L`union fait sur 446 et 421
Le nombre des composants est maintenant - 622
L`union fait sur 552 et 553
Le nombre des composants est maintenant - 621
L`union fait sur 154 et 155
Le nombre des composants est maintenant - 620
...
Le nombre des composants est maintenant - 266
L`union fait sur 295 et 320
Le nombre des composants est maintenant - 266
L`union fait sur 160 et 159
Le nombre des composants est maintenant - 266
L`union fait sur 463 et 464
Le nombre des composants est maintenant - 266
L`union fait sur 10 et 35
Le nombre des composants est maintenant - 266
L`union fait sur 619 et 594
Le nombre des composants est maintenant - 265
L`union fait sur 403 et 402
Le nombre des composants est maintenant - 265

Eclipse中的Scala SDK插件不能很好地工作。但谢谢你的“宝贵”评论。伟大的专业知识:-)eclipse中的Scala支持很糟糕。找intellij。将来,挖苦不是在这里(或其他任何地方)寻求帮助的最佳方式。我强烈建议你在指责他人挖苦之前,重新阅读你最初的评论。正如呼唤,所以呼应。@Dima“但我能承受……”傲慢和自恋。这让我想起了奥威尔的《所有动物都是平等的,但有些动物比其他动物更平等》:-,我怀疑你是否读过这个问题,更不用说思考出了什么问题。“尝试调试”是一个崇高的回答,可以用于99%的堆栈溢出问题,包括您的问题。这是不愿意帮助的,不是真正的答案。不,也不是。只要仔细观察,蜂蜜比粪肥能捕到更多的苍蝇。
/*
 * takes the initial number of components
 * as its argument
 */
abstract class AbstractUF(var count: Int) extends UF{

  override def counter() = array.distinct.length

  val array: Array[Int]

...
}
Le nombre initial de composants est 625
L`union fait sur 528 et 503
Le nombre des composants est maintenant - 625
L`union fait sur 548 et 523
Le nombre des composants est maintenant - 624
L`union fait sur 389 et 414
Le nombre des composants est maintenant - 623
L`union fait sur 446 et 421
Le nombre des composants est maintenant - 622
L`union fait sur 552 et 553
Le nombre des composants est maintenant - 621
L`union fait sur 154 et 155
Le nombre des composants est maintenant - 620
...
Le nombre des composants est maintenant - 266
L`union fait sur 295 et 320
Le nombre des composants est maintenant - 266
L`union fait sur 160 et 159
Le nombre des composants est maintenant - 266
L`union fait sur 463 et 464
Le nombre des composants est maintenant - 266
L`union fait sur 10 et 35
Le nombre des composants est maintenant - 266
L`union fait sur 619 et 594
Le nombre des composants est maintenant - 265
L`union fait sur 403 et 402
Le nombre des composants est maintenant - 265