寻求分组优化算法:拆分含优先聚合元素的列表集合
带约束的列表分块算法求助
问题描述
我需要设计一个算法处理以下场景:
- 输入为列表的列表(buckets),总元素数固定为10,每个子列表长度满足
1≤size≤10,子列表内的元素优先保持聚合(条件允许时尽量不拆分)。 - 需要将所有元素拆分为指定数量的
chunk(分组),需满足两个核心要求:- 每个chunk的大小尽可能接近
preferredChunkSize,计算公式为:preferredChunkSize = 总元素数 / numberOfChunks - 实际chunk大小必须落在允许范围内:
preferredChunkSize - maxDeviation ≤ 实际chunk大小 ≤ preferredChunkSize + maxDeviation
- 每个chunk的大小尽可能接近
函数声明
function split(buckets: list<list>, numberOfChunks, maxDeviation)
示例说明
示例0(maxDeviation=0,chunk大小严格等于2)
buckets = [[1, 2, 3], [4], [5], [6, 7, 8, 9, 10]] chunks = split(buckets, 5, 0) // 可接受的结果 // [[1,2],[3,4],[5,6],[7,8],[9,10]]
示例1(maxDeviation=1,允许chunk大小在1-3之间)
buckets = [[1, 2, 3], [4], [5], [6, 7, 8, 9, 10]] chunks = split(buckets, 5, 1) // 可接受的结果 // [[1,2,3],[4],[5],[6,7,8],[9,10]]
示例2(拆分2个chunk,允许大小偏差1)
buckets = [[1,2,3,4,5,6], [7,8], [9], [10]] chunks = split(buckets, 2, 1) // 可接受的结果 // [[1,2,3,4,5,6],[7,8,9,10]]
示例3(拆分3个chunk,允许大小偏差1)
buckets = [[1,2,3,4,5,6], [7,8], [9], [10]] chunks = split(buckets, 3, 1) // 可接受的结果 // [[1,2,3], [4,5,6], [7,8,9,10]]
求助问题
请问这类问题有没有通用解法?它的标准名称是什么?希望能得到相关思路或方向的帮助。
内容的提问来源于stack exchange,提问作者Stanislau Listratsenka
相关产品推荐
相关产品推荐

