我应该使用哪些算法(无论是暴力破解还是其他方法)来在一个停车场内停放尽可能多的车辆(假设所有车辆大小相同),确保至少有一个出口(从容器中),并且车辆不会被阻塞。或者有人能展示一个这个问题的程序化解决方案吗?
停车场的形状可能会有所不同,但如果假设它是某种不变的形状也可以接受。
另一个编辑:假设停车场内的行驶距离不是一个因素(虽然如果它是一个与停车场内车辆数量相关的加权因素会很棒)。
另一个编辑:假设是二维的(没有起重机或从车辆上方行驶)。
另一个编辑:一旦车辆停好后,不能移动车辆(这不是代客泊车)。
回答:
好吧,让我们简化并具体化一些。假设我们的车辆是单位正方形,停车场是N x N,我们需要从左下角进入/离开。一个简单的模式可以使停车场几乎达到2/3的满载(以N=12为例展示):
+------------+|C CC CC CC C||C CC CC CC C||C CC CC CC C||C CC CC CC C||C CC CC CC C||C CC CC CC C||C CC CC CC C||C CC CC CC C||C CC CC CC C||C CC CC CC C||C CC CC CC C| | -----------+
我可以证明,最好的情况是使停车场达到2/3的满载。想象一下,你从一个完全满的车库开始,一次开出一辆(当前可达的)车来构建空位。每次你移走一辆车时,你最多会产生3辆新可达的车,并移走一辆曾经可达的车(现在是一个空位)。所以每制造一个空位,你最多创造两个新的可达车辆。要使2/3 N^2的车辆可达,你需要至少制造1/3 N^2的空位,而这些是你所有的方块。所以你最多能将车库填满2/3。
上面的简单模式在渐进上是最优的,因为当N趋向于无穷大时,其密度接近2/3。(有点无聊,我原本希望某种树状模式能做得更好。)