algorithm - 将数组划分为满足条件的相等大小的子集
问题描述
假设您有一个 2D 数组,其中包含 96 个唯一行,其中包含长度为 1 到 4 的数字列表d
。例如:
[[1, 4, 2, 4, 1, 3, 1, 4, 1, 4, 4, 1, 3, 1, 4, 4],
[2, 4, 2, 3, 2, 1, 3, 3, 3, 1, 1, 4, 1, 3, 3, 1],
[4, 1, 4, 1, 3, 3, 2, 2, 4, 2, 2, 3, 2, 3, 1, 3],
[3, 2, 3, 2, 4, 2, 4, 2, 1, 4, 4, 2, 3, 1, 3, 1]]
...
]
(整个阵列可以在这里访问:https ://drive.google.com/file/d/1sitNVmdQKhmJGerYHazPe9ygYQpUiMqY/view?usp=sharing )
任务是将这个数组分成 6 个子数组,每个子数组 shape (16, d)
。唯一需要满足的条件是,在至少五个子数组中,每列需要至少出现两次数字 1、2、3 和 4。
我的(坏的)解决方案
- 我已经实现了一个随机选择子集并检查条件的算法。它适用于较小的数组,但如果
d
较大(例如 16 - 例如在我的情况下),它可能是一种非常无效的方法。 - 我还实现了一种贪心方法,首先考虑所有序列并循环遍历所有子数组的组合。如果找到满足条件的子数组,则保留该子数组并在其余部分上执行相同的操作,直到您有 5 个满足条件的子数组。
我真的不喜欢这两种实现,我相信有一种更优雅的方法。
解决方案
推荐阅读
- azure-data-factory - 无法使用事件触发器主体中的表达式语言函数
- python - 从列表 PSAW python 中搜索包含任何单词的 reddit 评论
- html - Firefox 不显示内联 pdf
- function - 有没有一种方法可以返回一种可以拥有多个数量的乐趣?
- javascript - 将状态映射到道具返回未定义且不更新
- f# - F# 我可以在数组上使用负索引吗?(就像在 Python 中一样)?
- svnsync - svnsync 与源存储库密码
- c# - 如何使人物面对行进方向?
- android - SQLite:每秒插入 1 个值还是每分钟插入多个值?
- python - 如何对作为完成模型中外键的特定客户端的所有完成求和?