序列最均衡化拆分问题

denallo 2016-06-10 10:42:19
请教一个问题:

有一个包含N个元素的序列,现需要将其拆分成M个子序列,要求最均衡化分配
比如有如下包含6个元素的序列: [0, 1, 2, 3, 4, 5]
若要分成4段,则符合要求的分法是:
[0], [1], [2, 3], [4, 5]
因为这样方差sum((子序列长度-1.5)^2)最小

这个问题对应的需求是: 在python里我需要拆分一个大序列,每个子序列分配给一个线程去处理,最后合并处理完的子序列,其实就是map函数的多线程版,所以希望每个线程的负载尽量均衡
...全文
96 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
denallo 2016-06-10
  • 打赏
  • 举报
回复
想出了一个方法,先将序列中能平均分的部分先拆, 再将剩下的部分平均分配到上一步得到的各个子序列中

# 序列均衡分段
def balance_split(seq, split_cnt):
    if split_cnt > len(seq): split_cnt = len(seq)
    seq_len = len(seq)
    # 最接近seq_len的能被split_cnt整除的数,nearest < seq_len
    nearest = seq_len / split_cnt * split_cnt 
    avg_len = nearest / split_cnt
    diff = seq_len - nearest
    # 将seq分成两段
    ## 第一段按步长avg_len+1分片
    seq_1 = [ seq[i : i+avg_len+1] for i in xrange(0, diff*(avg_len+1), avg_len+1) ]
    ## 第二段按步长avg_len分片
    seq_2 = [ seq[i : i+avg_len] for i in xrange(diff*(avg_len + 1), len(seq), avg_len) ]
    # 合并seq_1, seq_2
    return seq_1 + seq_2

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧