蚂蚁文库
换一换
首页 蚂蚁文库 > 资源分类 > DOC文档下载
 

并行排序算法

  • 资源ID:53354076       资源大小:34.00KB        全文页数:24页
  • 资源格式: DOC        下载权限:游客/注册会员    下载费用:25积分 【人民币25元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信快捷登录 QQ登录  
下载资源需要25积分 【人民币25元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 微信支付    支付宝   
验证码:   换一换

 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

并行排序算法

并行排序算法 先简洁说一下给的A,B,C 三种算法见上面引用的那篇博客,A算法将耗时的平方和开平方计算放到比较函数中,导致Array.Sort 时,每次亮亮比较都要执行平方和开平方计算,其平均算法困难度为 Onlog2n 。 而B 将平方和开平方计算提取出来,算法困难度降低到 On ,这也就是为什么B比A效率要高许多的原因。C 和 B 相比,将平方函数替换成了 x*x ,由于少了远程函数调用和Pow函数本身的开销,效率有提高了不少。我在C的基础上编写了D算法,D算法采纳并行计算技术,在我的双核笔记本电脑上数据量比较大的状况下,其排序效率较C要提高30左右。 下面重点介绍这个并行排序算法。算法思路其实很简洁,就是将要排序的数组根据处理器数量等分成若干段,然后用和处理器数量等同的线程并行对各个小段进行排序,排序结束和,再在单一线程中对这若干个已经排序的小段进行归并排序,最终输出完整的排序结果。考试大考虑到和.Net 2.0 兼容,没有用微软供应的并行库,而是用多线程来实现。 下面是测试结果 n A B C D 32768 0.7345 0.04122 0.0216 0.0254 65535 1.5464 0.08863 0.05139 0.05149 131072 3.2706 0.1858 0.118 0.108 262144 6.8423 0.4056 0.29586 0.21849 524288 15.0342 0.9689 0.7318 0.4906 1048576 31.6312 1.9978 1.4646 1.074 2097152 66.9134 4.1763 3.0828 2.3095 从测试结果上看,当要排序的数组长度较短时,并行排序的效率甚至还没有不进行并行排序高,这主要是多线程的开销造成的。当数组长度增大到25万以上时,并行排序的优势起先体现出来,随着数组长度的增长,排序时间最终基本稳定在但线程排序时间的 74 左右,其中并行排序的消耗也许在50左右,归并排序的消耗在 14左右。由此也可以推断,假如在4CPU的机器上,其排序时间最多可以削减到单线程的 14 25 39。8 CPU 为 14 12.5 26.5。 目前这个算法在归并算法上可能还有提高的余地,假如哪位高手能够进一步提高这个算法,不妨贴出来一起沟通沟通。 下面分别给出并行排序和归并排序的代码 并行排序类 ParallelSort Paralletsort 类是一个通用的泛型,调用起来特别简洁,下面给一个简洁的int型数组的排序示例 class IntComparer IComparer int { IComparer Members region IComparer Members public int Compare int x, int y { return x.CompareToy; } endregion } public void SortInt int [] array { Sort.ParallelSort int parallelSort new Sort.ParallelSort int ; parallelSort.Sortarray, new IntComparer; } 只要实现一个T类型两两比较的接口,然后调用ParallelSort 的 Sort 方法就可以了,是不是很简洁 下面是 ParallelSort类的代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Sort { /**/ /// /// ParallelSort /// /// public class ParallelSort T { enum Status { Idle 0 , Running 1 , Finish 2 , } class ParallelEntity { public Status Status; public T[] Array; public IComparer T Comparer; public ParallelEntityStatus status, T[] array, IComparer T comparer { Status status; Array array; Comparer comparer; } } private void ThreadProcObject stateInfo { ParallelEntity pe stateInfo as ParallelEntity; lock pe { pe.Status ParallelSort T .Status.Running; Array.Sortpe.Array, pe.Comparer; pe.Status ParallelSort T .Status.Finish; } } public void SortT[] array, IComparer T comparer { // Calculate process count int processorCount Environment.ProcessorCount; // If array.Length too short, do not use Parallel sort if processorCount 1 || array.Length processorCount { Array.Sortarray, comparer; return ; } // Split array ParallelEntity[] partArray new ParallelEntity[processorCount]; int remain array.Length; int partLen array.Length / processorCount; // Copy data to splited array for int i 0 ; i processorCount; i { if i

注意事项

本文(并行排序算法)为本站会员(hhsmd)主动上传,蚂蚁文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蚂蚁文库(发送邮件至2303240369@qq.com或直接QQ联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们


网站客服QQ:2303240369

copyright@ 2017-2027 mayiwenku.com 

网站版权所有  智慧蚂蚁网络

经营许可证号:ICP备2024020385号



收起
展开