`
bulote
  • 浏览: 1353912 次
文章分类
社区版块
存档分类
最新评论

有序数组合并的并行算法(有一定限制)

 
阅读更多

如果A=(a1,a2,...,am)和B=(b1,b2,...,bn)是两个有序的升序数组,合并数组A和B就行形成一个新的升序数组包含A和B的有所有元素,假设A=(2,4,11,12,14,35,95,99),B=(6,7,9,25,26,31,42,85,87,102,105).

如果合并A和B的数组,串行算法会遍历两个数组,然后将数组元素存到数组C中,开始时设置两个指针,分别指向数组A和B的每一个元素,接下来每个移动A或者B的一个指针。如此遍历时间复杂度为O(m+n)。其伪代码如下

串行算法:

输入A和B

输出C

1. set a[m+1] = +INF,b[n+1] = +INF.

2. set i = 1, j = 1 , k = 1

3. while k <= m+n do

4. If a[i] < b[j] do

c[k] = a[i] and i = i+1

else

c[k] = b[j] and j = j + 1;

endif

5. k = k + 1;

6. End While

7. END


下面分析其并行算法(注意本算法有一个局限性,只适用于最终合并的C中没有重复元素的情况)

定义: rank(x:A)指数组A中不大于x的元素个数, rank(6:A)=2, rank(25:A)=5.

rank(B:A)为数组(r1,r2,..., rn),其中ri=rank(B[i]:A)

对于上面给出的A和B数组,可以得到如下。

rank(B:A)=(2,2,2,5,5,5,6,6,6,8,8)

rank(B:B)=(1,2,3,4,5,6,7,8,9,10,11)

rank(A:B)=(0,0,3,3,3,6,9,9)

rank(A:A)=(1,2,3,4,5,6,7,8)


进一步分析rank(x:A U B)是指AUB中不大于x的元素数量,因此rank(x:AUB=rank(X:A)+rank(x:B),进一步:

rank(A:AUB)= rank(A:A)+rank(A:B) = (0,0,3,3,3,6,9,9) +(1,2,3,4,5,6,7,8)

= (1,2,6,7,8,12,16,17)

rank(B:AUB)= (3,4,5,9,10,11,13,14,15,18,19)


从rank(A:AUB)中我们可以知道A中每个元素中C中的位置,即C[1] = 2, C[2] = 4, C[6] = 11, C[17] = 99. 对B中元素可以rank(B:AUB)确定其中C中的位置


上面介绍了基本的算法思想,下面来分析该算法,并将其并行化。
下面给出该算法的伪代码


1. For i = {1, 2, .. , m} and j = {1 , 2 , ..., n} do in parallel

2. find rank (ai:A) and find rank(bj:B)

3. findrank (ai:B) and find rank(bj:A)

4. END parallel

5. Denote rank(A:B)and rank(B:A).

6. RA = rank(A:A)+rank(A:B)

7. RB = rank(B:A)+rank(B:B)

8. for i = 1 to m do in parallel

9. C[RAi] = A[i]

10. End Parallel

11. for i = 1 to n do in parallel

12. C[RBi] = B[i]

13. End Parallel

14. END


时间复杂度分析:

由于A和B是有序的,我们可以使用二分搜索法利用一个处理器在O(log(m))的时间内完成求rank(x:A),相似地rank(x:B)的复杂度为O(log(n)).

因此1~4步使用m+n个处理器可以在O(log(n))(假定n >= m)的时间内完成, 其余步骤都可以在O(1)的时间内完成,因此该算法的时间复杂度为O(Log(n)), 需要使用的处理器个数为m+n.


















本算法中最重要的部分是求rank(A:AUB)和rank(B:AUB),假设使用m+n个处理器,可以在O(log(n))完成。下面给出该算法的伪代码
分享到:
评论

相关推荐

    Go-算法学习Golang版

    位运算是计算机底层操作,对优化算法性能有重要作用,例如在解决空间限制问题时,位运算可以有效地代替常规的算术运算。 这个项目是一个极好的实践平台,通过阅读和实现代码,你可以深入理解各种算法,提升编程...

    高性能并行对象存储算法与系统.pptx

    ### 高性能并行对象存储算法与系统 #### 数据分布与分片算法 - **数据分区**:在高性能并行对象存储系统中,为了最大化利用并行处理的优势并减少节点间的通信开销,数据需要被合理地划分为多个不相交的子集,即...

    带时间窗车辆路径问题的并行遗传算法 (2007年)

    1. 车辆路径问题(VRP):是指需要为一系列发货点/收货点组织适当的行车路线,使车辆有序地通过它们,满足各种约束条件(如货物需求量、发送量、交货时间、车辆容量限制、行驶里程限制、时间限制等),并达到一定的...

    十五个经典算法研究与总结、目录+索引.rar

    《十五个经典算法研究与总结》是一份涵盖了算法分析与应用的重要资料,旨在帮助学习者深入理解并掌握计算机科学中最核心的部分。这份压缩包包含了详细的研究成果和索引,为学习者提供了一条清晰的学习路径,使他们...

    经典算法(C语言)包含51个经典算法的C语言实现

    在IT领域,算法是解决问题的关键,而C语言作为底层编程的基石,被广泛用于实现各种高效算法。以下是一些从给定的标题和描述中提取的C语言实现的经典算法: 1. **汉诺塔(Hanoi Tower)**:这是一个递归算法问题,目标...

    算法导论 中文版

    ### 知识点总结 #### 书名:算法导论 中文版 ##### 简介 《算法导论》是一本广泛应用于计算机科学领域的教材,深入浅出地介绍...无论是对于初学者还是有一定基础的学习者来说,《算法导论》都是一本不可多得的好书。

    麻省理工算法导论教学视频相关介绍1

    12. **并行算法**:在多处理器或分布式系统中同时执行,以提高计算速度。 麻省理工学院的《算法导论》课程由Charles Leiserson和Erik Demaine教授讲授,强调了设计高效算法和分析其性能的重要性。课程涵盖了上述...

    易语言速度最快的内存搜索算法

    在"SanYe"这个标签下,可能指的是易语言社区中的知名开发者或团队,他们可能对这种内存搜索算法有深入研究,并分享了相关的代码或教程。"content.txt"可能是包含详细算法实现或解释的文本文件,供学习者参考。 总的...

    利用GPU进行高性能数据并行计算

    ### 利用GPU进行高性能数据并行计算 #### 一、引言 随着信息技术的快速发展,高性能计算(High Performance Computing, HPC)的需求日益增长。传统的高性能计算往往依赖于大型集群系统,但由于通信开销大、故障率...

    分布式全局最大频繁项集挖掘算法.pdf

    利用改进的IFP-tree,可以在局部站点上有效地存储频繁项目,并以有序的方式组织数据,进而挖掘出局部最大频繁项集。 在全局挖掘阶段,算法利用各局部数据库生成的最大频繁项集,并结合组通信播报消息的方式,来挖掘...

    使用DFA算法实现的内容安全反垃圾智能鉴黄敏感词过滤

    在IT行业中,内容安全是确保网络环境健康、合法和有序的关键环节。为了达到这一目标,开发者经常使用各种技术手段来过滤和屏蔽不适当或非法的内容,其中“智能鉴黄”和“敏感词过滤”是常见的方式。本项目利用了DFA...

    基于并行多目标遗传算法的制造伙伴优化研究 (2007年)

    2. **并行进化**:该算法由多个子种群独立进化,这有助于增加算法探索解空间的能力。每个子种群都在各自的环境中进化,通过这种方式,可以在不同维度上寻找最优解。 3. **最佳个体交换**:为了促进种群间的基因交流...

    遗传算法的一些应用于编程(含源代码)车辆调度问题.zip

    遗传算法是一种模拟自然选择和遗传机制的优化方法,它在解决复杂的编程问题,尤其是组合优化问题,如车辆调度问题上,表现出强大的能力。车辆调度问题(Vehicle Routing Problem, VRP)是一个经典的运筹学问题,旨在...

    GA.rar_GA_TSP_TSP遗传算法_TSP问题

    旅行商问题是一个经典的组合优化问题,它的目标是找到访问给定城市集合的最短路径,每个城市只能访问一次,并最终返回起点。这是一个典型的NP完全问题,意味着在问题规模增大时,找到最优解的计算难度呈指数级增长。...

    runoob-algorithm-merge-sort.zip

    - **合并(Combine)**:将排序后的子数组合并回一个大的有序数组。 4. **合并操作**:这是归并排序算法中最关键的部分。通常使用两个指针分别指向两个已排序的子数组,比较它们的首元素,选择较小的元素放入结果...

    C++ 三種多重緒排序方法比較它的速度

    归并排序是一种稳定的排序算法,它将数组分为两半,分别进行排序,然后将两个已排序的子数组合并。在多线程场景下,我们可以使用两个线程分别对两个子数组进行排序,然后再进行合并。归并排序的时间复杂度是O(n log ...

    大数据升序优化.pptx

    ### 大数据升序优化知识点总结 #### 一、大数据排序算法概述 1. **外部排序算法** - **定义**: 当数据量超出...每种技术和算法都有其独特的应用场景和优势,合理选择和组合使用能够有效提升大数据处理的效率和性能。

    计算机编程英语词汇.doc

    17. **Knapsack Problem**:背包问题是一种组合优化问题,目标是在容量限制下选择物品以最大化总价值。 18. **Discrete Fourier Transform**:离散傅立叶变换用于将信号从时域转换到频域,广泛应用于图像处理和信号...

    MergeSort:MergeSort算法

    在排序领域,合并排序将一个待排序的数组分为两半,对每半分别进行排序,然后将已排序的子数组合并成一个完整的有序数组。 ### **算法步骤** 1. **划分**:将原始数组分割成两个相等(或近似相等)的部分。 2. **...

Global site tag (gtag.js) - Google Analytics