需要帮忙。甚至可能是精神科帮助,甚至尝试这样做!
这个过程承诺永远运行。需要有关如何从性能角度改进它的建议,以及有关如何更有效地处理数据以便完成工作的任何想法。
我正在排列 60 个短字符串。它们与第二组 60 组配对,它们实际上是静态的。所以一切都与一切配对。然后配对值将用于进行一些数据库搜索。这种处理还没有到位,当然会增加更多的需求。我已经在 VB.Net 中实现了堆的排列算法(https://en.wikipedia.org/wiki/Heap%27s_algorithm),我很满意它的运行效率。
愚蠢地,我用 20 个弦对开始了它。3天后它还没有完成。我输入了一些诊断报告并收集了排列 5 到 14 个元素的经过时间。5 在 0.00975 秒内完成。美好的。即使是 11(阶乘值为 39,916,800),排列数也以可观的 5.6 秒完成。我收集的数据是一致的,如我所料。我用 14 个元素完成了这项工作。耗时 3 小时:22 分:14 秒。
根据这些数据,我预计我尝试运行的 20 个元素排列大约需要 10738 年。生命太短暂了……</p>
在运行时,我观察到 Windows 10 调度程序正在分配稳定的 11.5% 到 20.5% 的 CPU,这是默认设置。因此,平均约为 16%。如果它能够分配 100%,我想这个过程会快 6 倍。我的机器是联想笔记本电脑,处理器 Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz 1.99GHz。不是快速机器。
所以,我想将要排列的元素数量推到 60 个。我想,在我目前的机器上,这需要数十亿年。
任何关于非常快速、多、并行的处理器的建议都非常感谢。
也欢迎任何关于数据重组、拆分、并行处理的想法。然而,这不是一个练习,这 60 个元素是现实生活中的元素。出于测试目的,我将运行一个缩减集。对于真实的东西,我需要所有 60 个排列。每个排列在生成时都需要存在并且完全可用,以进行需要进行的额外处理。
我要求太多了吗?提前感谢您的建议和经验。