程序在控制台中挂起,同时在c ++中提供大的输入大小

时间:2016-09-08 20:41:03

标签: c++ recursion brute-force traveling-salesman

我正在尝试通过检查所有可能的排列来解决使用Brute Force程序的旅行商问题。我用c ++完成了它。

主要问题是:代码适用于小输入大小。但是当我给出包含16个笛卡尔坐标的文件作为输入并运行程序时,控制台会挂起。它没有显示任何东西。好像它会永远运行。这是什么主要原因?我正在使用代码块编译器。

1 个答案:

答案 0 :(得分:9)

旅行商问题的强力算法的复杂度约为O(N!)。

这意味着,例如,10个项目有大约3,628,800个组合供您检查。仅仅为了讨论,让我们说你的计算机可以在半秒内完成。

在这种情况下,你试图用16分来解决。这不到两倍大,所以看起来好像不应该花更长的时间,对吗?事实上,16!是20,922,789,888,000。如果10个项目的工作耗时0.5秒,则需要大约5,765,760 * .5秒,大约需要33.4天 - 即每天24小时运行超过一个月。

当然,半秒钟只是一个猜测 - 如果它只是十分之一秒,那么我们预计16件版本只需要一周时间。另一方面,如果它真的接近一整秒,那么16项任务应该需要几个月左右的时间。