这个问题实际上涉及哲学层面的思考。本质上,它是在探讨人类解决问题的能力(即我们大脑的“湿件”)是否与算法所能完成的相等。
针对袜子分类的一个显而易见的算法是:
Let N be the set of socks that are still unpaired, initially empty
for each sock s taken from the dryer
if s matches a sock t in N
remove t from N, bundle s and t together, and throw them in the basket
else
add s to N
现在,这个问题中的计算机科学都与以下步骤有关:
1. "如果s与N中的袜子t配对"。我们能多快地“记住”到目前为止我们所看到的内容?
2. "从N中删除t"和"将s添加到N"。跟踪我们已经看到的内容有多昂贵?
人类会使用各种策略来实现这些。
人类的记忆是联想的, 类似于哈希表,其中存储值的特征集与相应的值本身配对。例如,“红色汽车”的概念映射到一个人能够记住的所有红色汽车。拥有完美记忆力的人有完美的映射。在这方面(以及其他大多数方面),大多数人都不完美。联想映射的容量有限。在各种情况下,映射可能会消失(喝了一杯啤酒),记录错误(“我以为她的名字是贝蒂,而不是内蒂”)或者即使我们观察到真相已经改变,也永远不会被覆盖(“爸爸的车”引发了“橙色Firebird”,而我们实际上知道他已经把它换成了红色的Camaro)。
在袜子的情况下,完美记忆意味着查看袜子
s
总是会产生其配对袜子
t
的记忆,包括足够的信息(在熨衣板上的位置),以便在常数时间内定位
t
。具有摄影记忆的人可以始终在常数时间内完成1和2。
记忆不完美的人可能会使用基于其能力跟踪的特征的一些常识等价类:大小(爸爸、妈妈、宝宝)、颜色(绿色、红色等)、图案(菱形格子、纯色等)和样式(脚底袜、高筒袜等)。因此,熨衣板将根据类别划分为几个部分。这通常允许通过记忆在常数时间内找到类别,但然后需要通过类别“桶”进行线性搜索。
完全没有记忆或想象力的人(抱歉)只会将袜子放在一堆中,并对整个堆进行线性搜索。
一个整洁的人可能会像有人建议的那样为每对袜子使用数字标签。这打开了一个总排序的大门,使人类能够使用与CPU相同的算法:二分查找、树、哈希等。
所以,“最佳”的算法取决于运行它的生物硬件/软件的特性和我们愿意通过对成对数据施加完全顺序来“作弊”的意愿。当然,“最佳”元-算法是雇用世界上最好的袜子分类器:一个能够获得并快速存储大量袜子属性集N的人或机器,与常数时间查找、插入和删除的1-1关联内存。这样的人或机器都可以采购到。如果你有这样的一个,你可以在O(N)时间内配对所有的袜子,对于N对来说这是最优的。总序标签允许您使用标准哈希来得到相同的结果,无论是使用人还是硬件计算机。
waitpid
函数,这样作为父进程,你甚至不需要亲自整理任何袜子? - Mxyk