并行计算前缀和

并行计算前缀和

pascal - 结构化编程语言

Pascal语言语法严谨,层次分明,程序易写,可读性强,是第一个结构化编程语言。

for i=0 to logn-1 do		//for循环i=0开始循环一次i++,直到i=logn-1
	parfor j=2^i+1 to n do	//for循环j=2^i+1开始循环一次j++,直到j=n
 		aj<-aj-2^i+aj		//aj加上aj-2^i赋值给自己
 	end						//结束
end							//结束

FOR TO DO语句

FOR 循环控制变量:=循环初值 TO 循环终值 DO 循环的语句(或语段)

倍增法

倍增法就是用来降低时间复杂度的,2的倍数跳着查询第1,2,4,8,16时间复杂度为O(logn)比挨个查询1,2,3,4时间复杂度为O(n)降低了很多。

举例:

A、B两点之间相隔若干单位为1的距离,如何从最快地从A走到B?

朴素的想法是:因为A B之间距离未知,只能从A开始试探性走1步、走2步、……看看走多少步能到达B,这样的时间复杂度是o(n)的。当然这样是不够高效(耗时间)。

实际上可以只记录走1,2,4,8,16步能到达的地方

从A出发:若跳8个格子(超过B了,放弃)

​ 若跳4个格子(超过B了,放弃)

​ 若跳2个格子(没超过B,可以跳)

​ 若跳1个格子(没超过B,可以跳)

​ 其中关键的思想是:它绝对不会连着跳两步都是跳相同的格子数,例如:如果跳两次2个格子都是可行的话,那么它干嘛不直接跳4个格子呢?依此类推。。。。。。

算法级联

算法级联是指将多个算法按照一定的顺序和方式进行组合,以解决更复杂的问题或优化算法性能的过程。算法级联可以充分利用不同算法的优势,解决更复杂的问题或优化算法性能。但同时也需要注意算法之间的依赖关系和性能要求,确保算法的组合是合理有效的。

高低分治:基本思想是将问题分解成若干个子问题,然后对每个子问题进行求解,最后将子问题的解合并得到原问题的解。不同之处在于,高低分治在划分子问题的时候会将问题按照某个参数进行分类,然后将参数较大的子问题称为"高"问题,参数较小的子问题称为"低"问题。时间优势

具体步骤如下:

  1. 将原问题按照某个参数进行分类,并将参数较大的子问题称为"高"问题,参数较小的子问题称为"低"问题。

  2. 对"高"问题进行分治处理,将其分解为更小的子问题,可以递归地调用高低分治算法来解决。

  3. 对"低"问题进行求解,可以使用其他算法或者直接求解。

  4. 将子问题的解合并得到原问题的解。

高低分治算法的主要优点是可以将问题分解为不同规模的子问题,使得每个子问题的解决方法可以自由选择,从而提高算法的效率。

奇偶分治:它将问题分成两个部分,分别处理奇数和偶数的情况,然后合并得到最终的结果。奇偶分治法的优点是可以将问题分解为两个独立的子问题,并利用递归的方式解决。这样可以简化问题的复杂度和难度。成本优势 O(logn)

​ 奇偶分治法的一般步骤如下:

  1. 将原问题分为两个子问题,一个处理奇数的情况,一个处理偶数的情况。
  2. 对于奇数的情况,使用递归的方式解决该子问题。如果条件允许,可以再次将奇数划分为更小的奇数子问题。
  3. 对于偶数的情况,使用递归的方式解决该子问题。如果条件允许,可以再次将偶数划分为更小的偶数子问题。
  4. 将奇数和偶数子问题的结果合并,得到最终的结果。

奇偶分治(高低分治):O(2logn)降低到O(logn)成本无法降低(舍弃)

高低分治(奇偶分治):在高低分治算法中利用奇偶分治作为子模块降低成本。高低分治将数组**(数组规模为n)分为高低两部分(n/2)(分为前一半数组(n/2)和后一半数组(n/2)),递归处理高低两部分之后,前一半数组的最后一个元素对后一半数组更新。这时候令前一半数组采用奇偶分治,分成奇数部分(n/4)和偶数部分(n/4),先递归处理前半部分的偶数部分,然后更新前半部分的奇数部分(n/4)可以与后半部分(n/2)并行更新。用奇偶分治法的成本优势降低了成本(采用)**

注意:每调用一次奇偶分治都会在时间复杂度中加入一个2的因子

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

算法执行时间T(n)=T(n/4)+2

​ 其中T(n/4)是执行前半部分偶数部分所用的时间;2是前半部分调用一次奇偶分治需要的时间,奇偶分治的时间复杂度为O(logn)

成本W(n)=n/4+W(n/4)+n/4+W(n/2)+n/2

=n+W(n/2)+W(n/4)<=4n

其中第一个n/4为高低分治前半部分的偶数部分规模为整个数组的n/4; 第二个n/4是前半部分的奇数部分的规模为n/4;n/2为高低分治后半部分的数组规模为n/2;W(n/4)和W(n/2)分别为并行更新前半部分奇数部分和后半部分所需要的成本。

n/4; 第二个n/4是前半部分的奇数部分的规模为n/4;n/2为高低分治后半部分的数组规模为n/2;W(n/4)和W(n/2)分别为并行更新前半部分奇数部分和后半部分所需要的成本。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值