微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

找到此算法的范围

如何解决找到此算法的范围

| 我有以下算法:
  SUM-ARRAY(A,B,C):
     n = A.length
     grain-size = 1
     r = ceil(n/grain-size)
     for k = 0 to r-1:
          spawn ADD-S(A,C,k*grain-size+1,min((k+1)*grain-size,n))

     sync


  ADD-S(A,i,j):
  for k=i to j:
     C[k]=A[k]+B[k]
好的,我与小组进行了以下讨论: 我们想找到该算法的跨度,我们中的一些人认为它是theta(1)和其他theta(n)。 有什么帮助吗?     

解决方法

跨度或关键路径长度可以定义为“理论上可以在具有无限数量的处理器的计算机上执行工作的最快时间”。 在您的情况下,所有生成的迭代都是独立的,因此如果有足够的处理器,则可以同时执行所有迭代。每次迭代都需要ѭ1的大工作。因此,跨度为Theta(
grain-size
),如果以这种方式设置晶粒大小,则可以等于Theta(1)或Theta(n)甚至Theta(sqrt(n))。如代码中所示,对于1的晶粒大小,跨度为Theta(1),即与迭代次数无关。     ,我假设您想要算法的复杂性。 因此,您实际上是将两个数组
A
B
添加到另一个数组
C
中,并通过生成
r
子过程来进行此操作,每个子过程都将length3ѭ和
B
的一部分长度
grain_size
相加。 我这样说:
ADD-S
将两个数组的
m = grain_size
元素相加,因此其复杂度为Theta(m)
SUM-ARRAY
产生
r
个子过程,每个子过程都做
ADD-S
,因此其复杂度为Theta(r * m)= Theta(n) 因此,我的答案是Theta(n)。     ,当grain-size为1时,跨度为O(n),因为for循环将是O(1)的n倍,即使所有子代都并行运行,父线程仍将为O(1)。 \“ spawn \”操作。 资料来源:这是从CS课程算法的解决方案中获得的。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?