【问题标题】:Better readability and simplicity versus higher complicity and speed in programming, what to chose? [closed]更好的可读性和简单性与更高的编程复杂性和速度,选择什么? [关闭]
【发布时间】:2016-09-17 16:06:18
【问题描述】:

解决我在大学的信息学作业,我总是找到不同的方法来解决同一个问题。 一种方法是最快的(执行时间)但最长且更复杂。 另一个是更容易实现,执行时间短,易于理解等等。

举个小例子,我们必须在 C++ 中创建一个程序,它输出一行 N 个元素,其中每个元素具有相同的相邻元素,但中间的元素不同。

Ex.    
6 Elements: *_*_*_
7 Elements: *_*_*_*

第一个解决方案是最简单的:

#include <iostream>
using namespace std;

int main(void){
    int a;
    cin >> a;
    for (int i=1; i<=a; i++)
    {
        if (i%2 != 0)
        {
            cout << "*";
        }
        else
        {
            cout << " ";
        }
    }
    return 0;
}

第二个更难实现但执行速度更快(条件检查更少):

#include <iostream>
using namespace std;

int main(void){
    int a;
    cin >> a;
    if (a%2 == 1)
    {
        for (int i=1; i<=a; i=i+2)
        {
            cout << "*";
            cout << " ";
        }
    }
    else
    {
        for (int i=1; i<a; i=i+2)
        {
            cout << "*";
            cout << " ";
        }
        cout << " ";
    }
    return 0;
}

我的问题是我应该关注什么?干净的代码,易于实现/部署和更好的可读性或最佳算法,更快的执行和强大的逻辑,或者只是尽量混合所有这两种,因为这两种解决问题的方法之间总是存在差异?

【问题讨论】:

  • 我会选择解决方案 2,只有一个 cout 以提高速度:) for (int i=1; i&lt;=a; i=i+2) { cout &lt;&lt; "* "; } BTW 我相信示例 2 中有一个错字:两个循环都以相同的顺序发出星号和空格。
  • 我看不出有任何理由让第二个版本有 2 个循环,为什么不把条件放在最后?
  • 优化取决于项目。在消费产品中,目标是让软件完成 A.S.A.P.;所以获得一个工作版本是重中之重,速度是次要的。在时间很重要的事件关键型应用中,速度可能非常重要。没有万能的黄金法则。
  • for 循环之间没有区别,所以去掉其中一个。更少的代码意味着更少的可能缺陷和更少的代码测试时间。
  • 这个问题至少被问过好几次了。认为必须以清晰度换取性能是一种错误的二分法。另外,性能永远不是你想象的那样,所以你必须在程序的运行中找到它,而不是在写作中。 Here is a good way to do it.

标签: c++ algorithm performance optimization imperative-programming


【解决方案1】:

应该尝试编写可读、易于调试的代码以便于理解。

当您遇到可以对其进行大量优化以获得更高性能的代码部分时(通过修改代码的架构或/和通过在代码中实现汇编),您可以在注释部分添加更好的性能替代它。即使您选择了性能更好的替代方案,您也将始终拥有另一个可以支持您的替代方案,以便理解它。

此外,当您通过这样做可以获得巨大收益时,请坚持使用性能更好的替代方案,而不是每次都这样做。

请记住,这些改进最好仅在性能瓶颈电源效率至关重要的系统中实施 .

【讨论】:

  • 只要当你遇到性能问题时
  • 我确实根据您的建议进行了编辑。谢谢你:)
猜你喜欢
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2020-12-19
  • 2019-12-03
相关资源
最近更新 更多