如何证明使用可用代码(不同语言)比较算法的合理性

计算科学 matlab 算法 C++ 效率
2021-12-16 22:49:39

我在提交的论文中提出了一个调度问题的算法。在修订版中,审稿人要求我们与文献中的另一种算法进行比较。我们的算法在 MATLAB 中,比较算法在 C++ 中,代码是公开的。我们没有重新实现 C++ 代码,以避免降低他们算法的效率,同时也节省了时间。

现在审稿人回应说:``MATLAB 和 C++ 之间的性能可能存在显着差异。作者应该明确结果是否以及如何标准化以确保公平比较。

所以我的问题是:在 MATLAB 和 C++ 的效率之间是否有任何(科学的)比率或类似的比较?

当我们选择使用可用代码时,我们认为这完全没问题,因为众所周知 MATLAB 速度较慢。所以在更快的环境中使用比较算法是可以的。我应该补充一点,我们的算法现在的性能比比较算法要好得多。


PS:我在计算机科学中问过同样的问题,但有人把我推荐给了这个社区。

1个回答

因此,您将算法 A 的通常较慢的 Matlab 实现与算法B通常较快的C++ 实现进行比较,并且仍然获得A优势。我想说,恭喜你,你现在肯定有一个更强的观点,因为“竞争”算法被赋予了优势。

值得注意的是,C++ 中的实现并不能自动保证很快,因为它可能使用糟糕的设计、错误的内存访问模式,甚至在最坏的情况下(不幸的是,并不罕见)破坏了算法的理论复杂性. 同时,Matlab 实现不必很慢。

在这里,我们至少有两个问题讨论一般情况:

无论如何,在我看来,你有四个选择:

  1. 不要更改任何代码。不要做任何新的数值实验。详细解释测试环境并讨论算法的优势。
  2. 不要更改任何代码。对算法C执行样本“重整化实验” 采用与您的领域相关的算法,您可以找到您期望质量好的 C++ 和 Matlab 实现。比较时间并推断出一个非常不稳定、主观但与您的应用领域比较指标相关的指标。仅使用该指标来告知用户您的 Matlab 代码可能的比例因子范围,以进一步加强您对提议的算法优势的想法。不要重新归一化你的结果。
  3. 在 C++ 中重新实现您的算法A,然后您将拥有类似的环境,并且还将与一些公开可用的参考代码进行比较。
  4. 在Matlab中重新实现他们的算法B,那么你将有一个类似的环境;但是,您将比较您完成的两个闭源实现(可解决)。

在无限可用时间的理想世界中,我会选择选项 3,并调整我的 C++ 实现。选项 4 稍差一些,但有一个隐藏的优势,即比较同一开发人员用熟悉的语言编写的代码。

在您的情况下,我可能对选项 1 完全没问题。算法实现的时间比较并不是最好的数据来源,通常只能粗略了解算法强度。因此,审稿人可能要求对测试环境进行详细描述。

要记住的事情:

  • 比较算法A和算法B的理论渐近复杂度。如果它们相同,那么您将在常量和低阶项中竞争。在这种情况下,时序结果稍微重要一些。然而,更详细的理论分析(用于判断常数、低阶项和相关问题大小)会走得更远。
  • 对实现细节、测试环境和实验可重复性的清晰描述将有助于论文发表和读者从中获得最大收益。
  • 考虑将你的算法的源代码开源并在论文中参考。