Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 创建括号平衡器的并行处理_Scala_Parallel Processing - Fatal编程技术网

Scala 创建括号平衡器的并行处理

Scala 创建括号平衡器的并行处理,scala,parallel-processing,Scala,Parallel Processing,我正在参加coursera scala并行编程课程。我有一个任务来解决顺序和并行的问题。我已经解出了序列函数。对于并行函数,我怀疑如何跨并行线程维护当前的parantise数据 这是我的顺序函数: def balance(chars: Array[Char]): Boolean = { def helper( arr: Array[Char], acc: Int): Boolean = { if (arr.isEmpty && acc ==0)

我正在参加coursera scala并行编程课程。我有一个任务来解决顺序和并行的问题。我已经解出了序列函数。对于并行函数,我怀疑如何跨并行线程维护当前的parantise数据

这是我的顺序函数:

def balance(chars: Array[Char]): Boolean = {

    def helper( arr: Array[Char], acc: Int): Boolean = {
      if (arr.isEmpty && acc ==0)
        true
      else if (arr.isEmpty  || arr.head == ')' && acc <=0)
        false
      else if (arr.head == '(')
        helper( arr.tail,  acc +1)
      else if (arr.head == ')' )
        helper( arr.tail,  acc - 1)
      else
        helper(arr.tail, acc)
    }

    helper(chars, 0)
  }
def余额(字符:数组[Char]):布尔={
def辅助程序(arr:Array[Char],acc:Int):布尔={
如果(arr.isEmpty&&acc==0)
真的

否则,如果(arr.isEmpty | | arr.head==')和&acc由于Coursera规则,我不会给出确切的解决方案,而是给出一些建议

正如我所记得的,本作业建议您在递归结果中使用两个值。通常,学生认为这是“(“and count of”)”的计数,但正确的解决方案是另一个。您应该在每个递归步骤中计算两个值:

  • 当前步长的增量=countOf“(“-countOf”)”
  • 当前步长的最小“深度”。即,如果尝试在当前块上从左向右平移,则增量的最小值。它可以低于增量
  • 几个例子(假设这是一个中间步骤): ((()):delta=0,minDepth=0 )(“:delta=-2,minDepth=-3

    然后,在完成典型的平行导线测量之后,您需要正确地减少这两个值。这一点您将很容易自己猜测

    如果平衡,您将最终得到(0,0)


    例如case”)(“将给您(0,-1)

    谢谢。我想我是用其他概念解决的,90%的测试用例都通过了。我不确定是否可以再次提交,但肯定会尝试这种方法。