【发布时间】:2011-05-08 06:40:39
【问题描述】:
我知道我的问题可能没有“完美”的解决方案(这听起来像是背包或垃圾箱包装问题的变体),但这是我的场景:
我想将一个 SQL 数据库表列表划分为 n 个(比如说 7)个大致相同大小的堆(这样我可以将一些维护任务大致平均分布在整个一周内)。
假设我有 100 张桌子(可能更高或更低,但不可能高于 5000),大小从 1 到 10,000,000 不等(当然,更大的桌子不太常见)。
我最初的想法是按字母顺序(伪随机)对表格进行排序,然后从头开始遍历,当总数超过 Sum(Size)/7 时移动到下一组。对于某些数据库,这可能会正常工作,但如果两个巨大的表彼此相邻,那么这会导致非常不平等的组。 (这并不像听起来那么不可能,请考虑两个巨大的表,Account_History 和 Account_History_Archive)。
是否有任何普遍接受的技术可以通过各种源数据提供“良好”的结果?我倾向于一种更简单的技术,而不是更精确的分组(如果某些日子的维护时间比其他日子稍长,那没什么大不了的)。
【问题讨论】:
标签: sql algorithm np-complete bin-packing