【问题标题】:Saving a brute force result for future use?保存蛮力结果以供将来使用?
【发布时间】:2017-10-17 10:43:52
【问题描述】:

我正在开发一个程序(在 C++ 中,但特定的编程语言对于这个问题并不重要),它使用蛮力方法来解决某个问题的中间步骤,而不是使用预先确定的数学接近。

它工作正常,但计算时间很长(正如预期的那样,因为蛮力可能需要很长时间。)

我可以接受特定输入的第一个实例的计算时间很长,但我想结合一些方法来存储这个结果,并为程序运行的所有未来实例查找它,而不是需要重新计算每次它(从而减少计算时间)。

我的第一个想法是将结果简单地存储在纯文本文件中,并在必要时引用此文本文件以提取结果(如果结果存在于文件中),但考虑到文本文件是否存在,这似乎并不理想不知何故丢失或手动更改,然后我们回到我们开始的地方。

我的问题是:有没有办法将这种类型的结果存储在程序本身中,以便下次我运行程序时,它只需查找特定输入的结果,而不需要蛮力解决问题再说一遍它已经解决了吗?

我意识到这个问题可能被认为过于宽泛,但我希望有人至少可以告诉我我的方法是否是一个好方法,如果不是,应该做什么或者我应该研究什么?我不确定是否有此类问题的实际名称。

【问题讨论】:

  • 我想说即使它可能不理想(将数据保存在文件中),它通常是为了在程序实例之间保存值而完成的。如果您担心文件可能被修改,您可以对文件进行哈希处理,将哈希存储在文件中,然后在重新加载文件时检查文件(不包括哈希)哈希值是否相同。您的程序应设计为处理文件被删除或丢失的边缘情况。
  • @StoryTeller 谢谢,不知道实际的术语叫什么。我会将该标签添加到问题中。
  • 除非计算可以在编译时完成,否则你不能将它嵌入到可执行文件中。您需要使用某种形式的存储,例如文件,数据库。

标签: c++ performance memory memoization brute-force


【解决方案1】:

有没有办法把这种类型的结果存储在程序本身里面,以便下次运行程序时

没有

当程序终止时,它的内存被释放,它的所有数据也被释放。

因此,如果您真的想存储这些计算结果,则需要使用文本或二进制文件。万一文件被修改或删除,请让您的程序捕获这种情况并重新计算。这是合乎逻辑的,因为我猜你不希望文件经常被删除/损坏。

您甚至可以使用数据库,但恕我直言,这太过分了。


但是,您所描述的内容让您想到了动态编程和记忆化,您可能需要查看这些术语,看看您是否可以从中受益。

【讨论】:

  • 很好的答案。正是我想要的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多