返回信息流长度为N的数组,交给K个机器来排序,然后用K路归并的时间复杂度是多少呢?
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #87212同步于 2015/7/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
求问个时间复杂度的问题。
heboy22
2015/7/5镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
一会我回来宿舍,详细指点为什么是这个复杂度。
【 在 xuzhenqi 的大作中提到: 】
: 假设各机器上排序算法的复杂度是O(nlogn),且忽略机器间数据传输的时间。算法复杂度为O(n/k log(n/k) + n)
: 通过『我邮2.0』发布
所以归并起来的时间是n,而不管是几台机器一起归并的?
【 在 xuzhenqi 的大作中提到: 】
: 假设各机器上排序算法的复杂度是O(nlogn),且忽略机器间数据传输的时间。算法复杂度为O(n/k log(n/k) + n)
:
: 通过
: .........
[url=http://guiyou.wangx.in]发自「贵邮」
【 在 xuzhenqi 的大作中提到: 】
: 假设各机器上排序算法的复杂度是O(nlogn),且忽略机器间数据传输的时间。算法复杂度为O(n/k log(n/k) + n)
: 通过『我邮2.0』发布
你合并的时候是O(1) * n的??? how。。
你就算用上个堆也是O(logk) * n 啊。。。
题目要求是在K台机器上做,因此可以考虑多台机器的并行化。我是这样做的:
首先,各台机器上各自排序,假设各台机器上排序的复杂度为O(nlogn),每台机器上的数据数量为n/k,则时间复杂读为O(n/k log(n/k) ).
然后进行k台机器的二路归并。
第1次归并,是k台机器中每台机器上有n/k的数据两两归并,考虑并行化,时间复杂度为 2n/k.
第2次归并,是k/2台机器中每台机器上有2n/k的数据两两归并,考虑并行化,时间复杂度为 4n/k.
...
第logk次归并,是2台机器中每台机器上有n/2的数据两两归并,考虑并行化,时间复杂度为 n.
(假设k是二次幂)
则这部分的时间复杂读为n/k(2+4+...+k) = 2n - 2n/k. (等比数列求和)
两部分加起来是O(n/k log(n/k) + n - n/k) = O(n/k log(n/k) + n).
这里主要考虑了多台机器并行计算,忽略了数据传输以及同步的时间。
可能会有更好的方法。
【 在 colorest 的大作中提到: 】
:
: 你合并的时候是O(1) * n的??? how。。
: 你就算用上个堆也是O(logk) * n 啊。。。