生活中的栈问题
我发现,现实生活中存在一种类似于计算机技术中“栈”的概念的流程性问题,总给我带来一点不爽的感觉。
有一次我收拾洗碗机,顺便帮室友把锅碗瓢盆归置整齐。租的房子的碗柜是这样的:对开门儿的柜子,打开后中间一个隔板分为上下两层。因为他们的锅碗比较多,许多时候锅都摞在一起,碗碟也是一样,摞起来平放在其中一层。
我发现,这种类似于“汉诺塔”的摞起结构在日常使用时非常不方便:当需要取较大的锅、碗、碟的时候,必须先将上面的一摞移至别处,拿出需要的尺寸后,再把那一摞放回去;收纳的时候依旧麻烦,必须把对每个尺寸的碗碟重复进行“汉诺塔”操作,直到每一个尺寸都分门别类处于合适的位置才行。
在之前,我的生活里几乎从未遇到过这个问题,因此也就没有观察到这种“栈”的现象。家里的碗碟是横置于不锈钢碗架上的;学校食堂餐盘是相同尺寸,一个一个摞好的。前者保证了“随机访问”——即不需要关注放置的顺序,随时可以取用碗架上任何器皿;后者保证了按需索取,即所有餐盘的属性都是一样的,毋需关注顺序,需要时只要拿最上面的就好。当然,前者的缺点在于每个碗碟占用的空间相对较大,而后者在于如果想强行使用特定的餐盘,或者调换顺序时成本比较高。
第二个栈现象出现在超市里。许多超市货架是背靠墙或者背靠背摆放的。这就导致上货时,最新放进去的商品(日期较新的)先被买走,放在后面的商品就会越来越旧。当然我不知道商店真正的操作是什么样的——有时我观察一列货品的生产日期时,好像也并非严格按照从里到外是从旧到新的顺序。
这个栈的其中一个破解方法在超市牛奶货柜。美国的牛奶柜好多都是直接和后台冷库相连,冷库的牛奶可以直接从冰柜后面补充到货架上。这样,补充的流程,就从栈变成了队列,避免了前面提到的日期逆序问题。
最后一个似栈非栈的流程是飞机登机。理论上来讲,对于只有一个前门的短途航班,坐在最后一排的人比较惨:登机时得最先上,下飞机时最后下。虽然按“栈”的顺序操作,能使所有人最终的上下飞机时间期望最短,且让付了最多钱的头等舱乘客最为便捷,但我观察美国航司的实际操作五花八门,几乎没有一个是严格按照栈顺序操作的。有的分成了“登机组”,仿佛随机似的把乘客分成4至8个不同分组,最后让机舱过道里一团乱麻;有的按价格分组,头等舱的乘客早早坐上飞机,然后大眼瞪小眼被每一个经济舱乘客轮流检阅一遍,有些人不耐烦就装假寐,而且还得等最后一排最后一个乘客坐稳,才能进行下一步。
还别说,真有人把自己的想法挂到了arXiv上,还有专门的视频讲这个问题。从简单的栈问题到复杂的网络问题,大概就是人们所谓的“运筹学”所研究的内容吧。
Leave a Comment