农夫过河问题
经典的农夫过河问题,相冲突的生物之间有连线,每次携带走某几个生物后,要保证剩下的没有连线存在。问船的容量最小是多少呢?
视频:【Numberphile】农夫过桥问题和阿尔昆数
直观的思路就是,找最少需要几只手盖住顶点后能消除所有连线(即最小覆盖):
但有时只有最小顶点覆盖个位置是不够的。
如下面的例子,最小顶点覆盖显然是1,把狼盖住就行了:
但船若只有1个额外位置是不行的,一个来回之后就卡住了:
这就需要再额外增加一个位置,也就是最小顶点覆盖数+1个位置。这时只要总是把狼带在身边,就能用剩下的位置一个个运送其它生物了。
所以最多只需要最小顶点覆盖数+1个位置,而有时只需最小顶点覆盖数个位置即可。关于确定什么时候需要+1是NP难的问题。
农夫过河问题可以归纳成顶点覆盖问题。下面引入顶点覆盖的具体概念,并与团和独立集作对比。