连续有二十五个酒吧凳子。进入该栏的客户遵循以下两条规则:
使用这两条规则,您应该在哪里放置第一位客户,以便最大数量的客户可以坐在酒吧?
我可以在25个大便条件下解决它。但我无法弄清楚n大便的一般算法。
答案 0 :(得分:5)
听到它的声音几乎与兰多尔门罗写的优秀分析International Choice of Urinal Protocol(I.C.U.P。)完全相同,包括封闭形式方程和最佳小便器数量图。在阅读本答复的其余部分之前,您应该阅读他的文章。
在兰德尔的帖子中提到:
[我]你进入一个连续排空笨拙的小便池的卫生间,而不是拿一个最后的小便器,你可以走三分之一的路线。这会将尴尬的行分成两个最佳行,将最坏情况转化为最佳情况。
虽然他没有详细说明,但它暗示了我们正在努力做的事情。如果我们有一个笨拙的小便池(或大便,在我们的情况下),我们可以尝试让第一个人坐在座位上,这样他们就会成为两个不同的最佳小组的终点。
对于7个席位,基本选择行为可以解决这个问题:
1 _ _ 3 _ _ 2
离开四个无人居住的座位。但如果我们将第一个人安排在第三位,我们会得到最佳的3个和5个小组,将我们可能的占用者增加一个。
3 _ 1 _ 4 _ 2
对于25,基本行为同样是次优的,导致在尴尬之前占据了9/25:
1 _ _ 6 _ _ 4 _ _ 7 _ _ 3 _ _ 8 _ _ 5 _ _ 9 _ _ 2
但是我们可以让位于第9位的人,创建最佳的9 17个子组,如下所示:
3 _ 8 _ 5 _ 9 _ 1 _ 10 _ 6 _ 11 _ 4 _ 12 _ 7 _ 13 _ 2
导致13/25的最佳入住率。
更一般地说,我认为找到比座位数小的最大最佳数字,并且在那里安排第一个人(在25个案例中,17个,相当于从另一个方向的第9个)将始终最大化可占用的椅子。在最糟糕的情况下,如25,这相当于兰德尔提到的ceil(n/3)
。
在平均情况下(使用基本座位行为既不是最佳也不是最差),我们不能总是仅通过安置第一个人来达到50%的占用率,因为我们只能创建一个最佳子组,而另一个不是最佳的。因此,我们采用最大的最优子群,以最小化次优座位的数量。例如,对于20个席位,我们需要17个并创建一个17 4组,这样可以优化尽可能多的席位,只留下两个席位:
2 _ 7 _ 4 _ 8 _ 3 _ 9 _ 5 _ 10 _ 1 _ _ 6
这四个小组在技术上实际上既是最好也是最坏的情况,但希望你能看到这种模式如何扩展。
答案 1 :(得分:0)
这是我的分析。
为了争论,让我们说第一个人坐在中间的某个地方,而不是靠近两端。这将给我们一个这样的模式,其中x表示占用的座位和_一个空位:
_ _ _ ... _ x _ ... _ _ _
坐在这个人左边的第一个顾客将坐在最左边的一端。同样,坐在这个人右边的第一个顾客将坐在最右端。这给我们留下了这样的模式,其中-m-表示m个连续的免费席位:
x _ -m- _ x _ -n- _ x
将此称为“基本配置”,座位总数为s = m + n + 7.
好的,现在我们的问题被分成两个大小为m和n的子问题,每个子问题都将由尽可能靠近每个区域中间的客户填写。
为了获得最大的最终占用率,我们希望m和n为“理想”数字,定义如下:
a is ideal if a = 2b + 3 and b is ideal (i.e., we will get -b- _ x _ -b-).
这里的想法是,理想的座位数可以最大限度地占用(1)取a的中间位置,(2)递归求解b大小的两个子问题。
最不理想的数字是1.
由此,我们可以建立前几个理想数字:
1, 5, 13, 29, ...
现在,对于s = 25,我们的基本配置是25 = m + n + 7,我们希望m和n是理想的。那么,25 - 7 = 18和18 = 5 + 13,这是理想的!
因此,对于25个座位,我们坐在座位4 + 5 = 9或4 + 13 = 17的第一人,我们保证最终占用最多。
在我们完成之前要检查的最后一件事:如果第一个顾客坐在凳子上怎么办?然后,在第二个客户坐下之后,我们会
x _ -m- _ x
其中m必须是理想数字。对于25个座位,这给出了25 - 4 = m = 21,这是不理想的。因此,第一位客户不能坐在两端,最多可容纳25个座位。
Ta daaaaaah!
答案 2 :(得分:0)
当你真正画出图片时,你会发现答案非常简单。 例如,在下列情况下,您可以从左侧或右侧或中间轻松选择座位。
E.g.1 OOO --- XOX - 1
EOO.3OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
从这些例子中,我们可以做出以下声明: 假设我们在两个选定座位之间有一系列免费座位,当这些免费座位数N = 2 ^ n-1时,我们可以在这个范围内选择最多座位。
证明:
所以这个问题的算法是:
给定座位数N,找到最大数量为2 ^ n-1< N-3,然后测试N-1-(2 ^ n-1)-1-1是否为2 ^ m-1的形式。
在N = 25的情况下,我们可以发现15是25以下的最大数,并且是2 ^ 4-1的形式。由于25-1-15-1-1 = 7巫婆是2 ^ 3-1的形式。所以25个座位可以达到最大选择。根据我们的分析,我们可以选择17或9的第一个座位。