在大O的时间复杂度上,还记得那个O(n!)复杂度吗?这是一种计算时间极长的算法,而这个算法要解决的就是计算机科学领域非常著名的旅行商问题,其计算时间增加得非常快,而有些非常聪明的人都认为没有改进空间。


有一位旅行商。他需要前往5个城市。这位旅行商要前往这5个城市,同时要确保旅程最短。因此,可考虑前往这些城市的各种顺序可能。

旅行商问题分支界限法python源码 旅行商问题算法复杂度_待解决


圆圈代表地点,箭头代表去向,而下面标的公里数即是路程了,在这里我只是展示了三种顺序。(虽然画的有点难看,但是还算是过得去)

对于每种顺序,他都得计算总路程,在挑选出旅程最短的路线。5个城市有120种不同的排列方式。因此,在涉及5个城市时,解决这个问题需要执行120次操作。涉及6个城市,需要执行720次操作。涉及7个城市,需要执行5040次操作。即:涉及到几个城市,就要计算几的阶乘,需要执行的操作就是阶乘后的数字。

推而广之,涉及到n个城市时,需要执行n! (n的阶乘)次操作才能计算出结果。因此时间复杂度是O(n!),即阶乘时间。除非涉及到的城市很少,否则你根本不能在合理的时间内算出结果!

面对这个问题也有近似的答案,那就是用二叉树也能得出近似答案。但是终究没有人能解出省时的好办法。这也是为什么称为计算机科学领域待解决问题之一——旅行商问题。