3

我是这个网站的新手,所以我希望我不会在这里违反任何不成文的规则...... ;-)

我为旅行推销员问题编写了一个启发式算法,它首先创建一个最小生成树,将其扩展以创建一个欧拉环,然后从该欧拉环推导出一个哈密顿圈。

该程序对于最多约 3700 个顶点的图形运行良好(尽管它需要一些时间,在我的笔记本电脑上大约需要三个小时),但现在当我尝试解决约 4300 个顶点的图形时似乎出现了问题。

MST 像往常一样创建,但在创建 Euler-Tour 时,CPU 似乎在我的程序中“失去兴趣”。根据 Windows 任务管理器,java.exe 进程在解决较小的图形时使用了大约 25% 的 CPU(四个内核之一),但现在已降至 0 - 1%。根据 Netbeans IDE,该程序仍在运行,但我不确定如何处理这些信息。

也许与我必须克服一些 OutOfMemory-Errors(堆空间)有关,我通过蛮力的组合解决了这些问题 - 我允许项目创建一个 4090 MB 堆(4 GB RAM) - 并对代码进行了一些更改这可能与这里无关。

如果有人可以给我一个提示可能是什么问题,我会很高兴。

问候,菲尔

4

1 回答 1

0

这可能是因为您的程序中有一个尚未完成的线程。

您的线程可能是活动的,因为它被发送到睡眠状态并且从未唤醒,或者可能存在死锁。我建议您使用visualvm来确定您是否有一个仍在运行的线程,甚至查看您的程序在什么时候从高 CPU 使用率变为低 CPU 使用率,以及一些日志记录,可能会帮助您找出确切的问题。

于 2013-06-09T07:13:44.737 回答