-3

假设您编写了一个非常慢的爬山算法。你最小的数据单元是一个节点。您有另一个名为 NodeList 的类,其中包含节点列表和一些其他数据。您有一个 NodeList 列表,它们的数量或顺序不会改变。您的算法试图决定哪个节点应该进入哪个节点列表,以便我们最终得到最好的分数。分析算法后,您会发现分数计算消耗了 95% 的 CPU 时间。你能想出加速算法的一般方法吗?

我试图用谷歌搜索它并了解爬山算法的基本概念。但仍然无法弄清楚我应该怎么做才能改进算法。任何帮助将不胜感激。谢谢。

4

1 回答 1

1

没有万能的改进,因为如果您已经拥有最好的代码,则无法进一步改进。

如果你的代码要爬的路径很长(可能很少见),那么你可以通过尝试许多不同的开始来节省时间,然后只从最好的开始爬——这些往往会沿着它们的路径走得更远。

如果你能找到一个更快但可能不太准确的分数版本,你可以检查很多分数不太准确的邻居,并用满分尝试最好的他们。这应该可以更快地找到改进,如果您接受遇到的第一个改进,这应该会有所帮助。

您谈论的是分数计算而不是分数更新。爬山往往会对现有答案做出微小的改变。如果您正在从头开始计算每种可能性的分数,您是否可以通过更新您已经为现有答案计算的分数来节省时间,基于您正在检查的该答案的邻居非常类似吗?

你可以再看一下,看看除了爬山之外是否还有其他解决问题的方法。

于 2019-08-02T04:19:55.777 回答