我有另一个回溯挑战,我必须得到所有可能的素数组合,加起来一定数量。我已经使用Wikipedia中的常规使用算法完成了任务,但是对于数字100,它需要一个多小时才能运行,并且在课程结束时仍然没有完成。我想知道:记忆(你怎么拼写?)已经显着提高了算法的性能(因为它会使它显着更快)?我正在使用c ++,并且该函数被调用了很多次。我正在使用递归回溯,我似乎记得大概是O(n!)的简单问题。
答案 0 :(得分:1)
在函数外部创建一个数组,检查其是否为主要值,并且可以从中找到。全局或静态,取决于使用的语言。该数组将包含所有找到的主要数字。
If the number in question is in the array, return true.
if number is less or equal than squared max number in the array, return false.
Check for divisibility for all known primaries
if the number is primary, write it into array and return true
return false
添加很简单。这样做并检查更改的时间。