Its*_*sik 18 c c++ performance np-hard
我需要编写一个程序(大学项目)来解决(近似)NP难题.它是线性排序问题的变体.一般来说,我将有非常大的输入(如图形),并将尝试找到最佳解决方案(基于一个"评价"每个解决方案的功能)
如果我用C风格的代码(一个main和函数)编写它,或构建一个Solver类,创建一个实例并从main调用一个'run'方法(类似于Java),会有区别吗
此外,每次迭代都会有很多浮点运算.
谢谢!
nos*_*nos 58
没有.
最大的性能提升/缺陷将取决于您实现的算法,以及您执行的不必要的工作量(不需要的工作可能是重新计算可能已缓存的先前值,使用太多malloc/free和使用内存池,通过值而不是引用传递大的不可变数据
不,除非您使用虚拟功能.
编辑:如果你有一个需要运行时动态的情况,那么是的,虚函数比手动构造的if-else语句快或快.但是,如果您在virtual方法前放入关键字,但实际上并不需要多态,那么您将支付不必要的开销.编译器不会在编译时对其进行优化.我只是指出这一点,因为它是C++的一个特性,打破了"零开销原则"(引用Stroustrup).
作为旁注,因为你提到大量使用fp数学:
-mfpmath=sse,-ffast-math和-mrecip(最后两个是"轻微危险",这意味着他们可以给你奇怪的结果是在边缘情况下换取速度.第一种是精确度降低了一点 - 你有64位双精度而不是80位双精度 - 但这种额外的精度通常是不需要的.)这些标志同样有效用于C和C++编译器.
INFINITY使用大但非无限值模拟true 会为您提供良好的速度提升.这是因为INFINITY处理器必须将其作为特殊情况处理.
在谈到性能时,可以用C++完成C语言中的所有操作.例如,已知虚拟方法"慢",但如果确实存在问题,您仍然可以使用C语言.
C++还带来了模板,void*与通用编程相比,它可以带来更好的性能.