【发布时间】:2018-10-01 13:28:33
【问题描述】:
这不是家庭作业问题,而是我正在从事的项目中提出的问题。上图是一组盒子的包装配置,其中A,B,C,D在第一层,E,F,G在第二层。问题是,如果这些盒子是按随机顺序给出的,那么这些盒子可以放在给定配置中的概率是多少?
放置的唯一条件是所有的盒子都需要自上而下放置,一旦放置就不能移动。因此,不允许在现有盒子下滑动或浮动放置,但可以为同一层的盒子节省空间。例如,只有在 A 和 B 已经就位时才能放置 E。如果出库顺序为AEB...则不能放入指定配置,如果出库顺序为ACBE...则E可以正确下放。
更正式的描述是将打包配置转换为一组依赖项或先决条件。第一层ABCD有0个依赖,而E的依赖是{A和B},F是{B和C},G是{C和D},对应的依赖必须在E或F或G发生之前发生。此外,虽然它不适用于这个问题,但在某些问题中,依赖关系也可能是“或”关系而不是“和”。
我想知道解决这个或这类问题的一般确定性算法是什么?我能想到的一种方法是以随机顺序生成 A、B、C、D、E、F、G 10,000 次,并为每个顺序检查在调用每个元素时是否发生了相应的先决条件。然而,这个幼稚的想法很耗时,并且无法产生确切的概率(我相信这个问题的答案是~1/18,基于我实现的这个幼稚算法)。
非常感谢您的建议!
【问题讨论】:
-
你试过什么?
-
@user4343502 我在上一段提到了我目前的想法
-
这是一个很酷的问题,但可能更适合Mathematics
-
嗨@juanpa.arrivillaga 我同意这是一个数学问题,尽管我更好奇是否已经存在解决此类问题的通用算法。一旦问题扩大,这将在数学上变得相当混乱。
标签: python algorithm math random combinations