我认为这就像 CompSci 101,但我从未参加过正式的编码课程。我只是一名通过经验自学的管理员。我更喜欢从尽可能接近“从头开始”的地方自己解决问题,但事实证明,这对我平庸的智商来说有点令人困惑,我希望得到一些帮助。我脑子里好像有一个……椒盐卷饼。
我最近一直在思考如何有效地将一组对象(每个对象都有不同大小的数值)排列到尽可能数量的固定大小的“桶”中。就像我有 1,000 个 1-100 之间的值实例,我想弄清楚如何将它们排列到最少数量的桶中,假设每个桶中的值之和(不是对象的数量)不能超过 100 或 200 ,或任何大小。不仅仅是我需要多少个桶。这就像一年级或二年级的数学。
如果我解释得不够好,请想一个这样的问题。 UPS 有 100,000 个包裹。每个重量从 1 到 100 磅不等,您知道每个重量有多少。每辆 UPS 卡车可运载 10,000 磅。哪些包裹应该装到哪些卡车上,以尽量减少所需的卡车数量?不,我不为 UPS 工作。这只是我想到的第一个类比。是的,我知道在这个类比中我低估了数量。这不是专门针对工作、课程或测试的。最近它一直困扰着我,让我觉得自己很愚蠢。
我过去做过一些事情。它们都感觉相当“贫民窟”且不精确,但是当我想要批处理对象并分发它们的处理而不是在单个数组上使用简单的串行循环时,它们对我来说很容易理解,可以快速编码,并且可以更快地执行。对象在一个地方执行。
我已按降序值对对象进行排序,根据适合任务的任何标准决定存储桶大小和数量,然后迭代数组,按顺序将每个对象分配到下一个存储桶,在运行时回绕到第一个存储桶出桶。如果我将 1-100 的精确值排序到 3 个桶中,则 100 放入桶 1,99 放入桶 2,98 放入桶 3,97 放入桶 1,依此类推。
我还选择了一个存储桶大小,并迭代分配给当前存储桶的数组,直到其容量耗尽,然后为下一个对象创建一个新存储桶,同时还检查每个当前对象上的每个先前存储桶以查看是否有一个在为其创建新存储桶之前,其中有足够的剩余容量来容纳它。
以及这些的一些变化和组合。
我并不是真的在寻找一个完全编码的特定于语言的解决方案(我认为我对 PowerShell 和 JavaScript 有一定的能力),也不是想得到“答案”。我正在寻找关于如何解决此类问题的高级概述或一些指导,以使我的灯泡足够亮以自行完成。这似乎是一个很常见的问题,但我在搜索时使用的措辞并没有找到任何接近我想要完成的目标的东西。