无法优化的O(n!) 算法

旅行商问题:

有一位旅行商,他需要前往5个城市。

要前往这5个城市,同时要确保旅程最短。

对于每种顺序,他都计算总旅程,再挑选出旅程最短的路线。5个城市有120种不同的排列方
式。因此,在涉及5个城市时,解决这个问题需要执行120次操作。涉及6个城市时,需要执行720
次操作(有720种不同的排列方式)。涉及7个城市时,需要执行5040次操作!

推而广之,涉及n个城市时,需要执行n!(n的阶乘)次操作才能计算出结果。因此运行时间

为O(n!),即阶乘时间。除非涉及的城市数很少,否则需要执行非常多的操作。如果涉及的城市
数超过100,根本就不能在合理的时间内计算出结果——等你计算出结果,太阳都没了。
这种算法很糟糕!可他别无选择。这是计算机科学领域待解的问题之
一。对于这个问题,目前还没有找到更快的算法,有些很聪明的人认为这个问题根本就没有更巧
妙的算法。

你可能感兴趣的:(无法优化的O(n!) 算法)