首页 > 解决方案 > 如何解决磁盘和堆栈的组合数学问题?

问题描述

我有一个涉及组合学的问题,我试图以最有效的方式解决这个问题,但我一直想出的只是暴力破解它的方法。我希望我能得到一些关于我可以在哪里寻找更多信息或如何进行的建议

以下是信息:我有一个带有属性的磁盘列表。这些磁盘根据这些属性进行分类。稍后在公式中使用其中一个属性(我们将其称为 Property_A)来生成一个值(我们将其称为 Value_A)。

从这些磁盘中,我必须制作大小为 N 的堆栈,其中 N 是堆栈中的磁盘数,并且堆栈中的每个磁盘都来自不同的类别。堆栈中磁盘的顺序很重要。可以将同一类别的磁盘换成具有不同 Property_A 值的其他磁盘以生成新堆栈。

Example:
Stack #1 is made of the following disks
Disk #1 from Category A,
Disk #1 from Category B,
Disk #1 from Category C

I can then swap out the first Disk for Disk #2 from Category A to make a new stack (Stack #2)
Stack #2 is made of the following disks
Disk #2 from Category A,
Disk #1 from Category B,
Disk #1 from Category C

一旦创建了这个堆栈,就会为我们插入 Property_A 以获得 Value_A 的堆栈生成一个公式。将公式分配给堆栈类型,其中堆栈类型由磁盘的类别定义

 Example: Only Stack #1 and Stack #2 would share the same formula because they are made from disks whos categories are in the same order

 Stack #1 is made of the following disks
    Disk #1 from Category A,
    Disk #1 from Category B,
    Disk #1 from Category C

 Stack #2 is made of the following disks
    Disk #2 from Category A,
    Disk #1 from Category B,
    Disk #1 from Category C

 Stack #3 is made of the following disks
    Disk #1 from Category B,
    Disk #1 from Category A,
    Disk #1 from Category C

 Stack #4 is made of the following disks
    Disk #1 from Category B,
    Disk #1 from Category E,
    Disk #1 from Category F

问题出在:给定 Value_A、N 和某个数字(我们称其为 Number),找出所有可能的大小为 N 且 Value_A 在范围内的堆栈

Value_A-Number<= Value_A<= Value_A+Number

我在想我可以使用动态编程来帮助加快速度,但鉴于 Property_A 因磁盘而异,我觉得我会得到更多的未命中而不是命中,并且最终会得到一个速度与蛮力相似的解决方案.

我还考虑给 Property_A 一个上限/下限,但这只会有助于在同一堆栈类型中查找堆栈。堆栈类型更改后,您必须重置上限/下限并重新开始。不过,这些似乎仍然是迄今为止最有希望的方式。使用这种方法,我可以找到所有可能的堆栈类型组合,然后我可以使用上限/下限缩小堆栈中的磁盘

这些东西现在没有以任何特定的方式组织,所以请随意对数据的组织方式做出假设。

标签: databasealgorithmcombinatorics

解决方案


推荐阅读