2022-05-21 能用简单的算法超越C++经典库函数,一般是不理解debug和release的区别

2022-05-21 能用简单的算法超越C++经典库函数,一般是不理解debug和release的区别,第1张

曾经看各种知乎,博客,见到有人自称随便写个代码,效率超过库函数,当时的心境是有可能,算法都已经比较成熟,自己写和用库函数区别不大。

后面学习算法,自己实现过几大经典排序,也和C++的标准库算法比较过,基本差不多。

之后又涉猎了一些编译器的应用知识,了解了编译参数,在开 O2 情况,没有任何一种自己实现的算法能打败库函数。

在研究大矩阵乘法的时候,我用暴力循环 + 并发 + 矩阵转置去 PK Eigen库 和 cublas,在不开优化的debug情况,和 Eigen 有一拼,比 cublas 就差很远。

但是开启优化后,我写的东西就被摔倒八条街以外了,Eigen 和 cublas 不相上下,此时我发现,自己并不了解算法,或者说,认为可以随便写个东西就能和经典库函数打一打的想法,是因为自己太无知了。

看到这里,我想说,朋友们,不要拿自己顺手做的东西去和专业认识维护的东西去比较,在秀出你优秀代码的前期,你有多洋洋得意,被别人揭穿底裤后,你就有多羞愧。

我们和专业库作者的差距,如同一道算法题:

三个空汽水瓶可以换一瓶汽水,允许借空汽水瓶,但必须要归还。有n个空汽水瓶,最多可以喝到多少瓶汽水。

如果你的程序超过一行,类似下面这个,说明你不懂算法。我就是。

#include 

int main()
{
    int epbtl = 0;
    int cnt = 0;
    int shengyu = 0;
    while (std::cin >> epbtl)
    {
        if (epbtl == 0)
        {
            return 0;
        }
        for (int i = epbtl; i != 0; i = i / 3)
        {
            cnt += i / 3;
            shengyu += i % 3;
            if (shengyu >= 3)
            {
                cnt++;
                shengyu -= 2;
            }
        }
        if (shengyu == 2)
        {
            ++cnt;
        }
        std::cout << cnt << std::endl;
        shengyu = 0;
        cnt = 0;
    }
    return 0;
}

答案是 print( n/2)。

这就是专业的差距。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1295258.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-10
下一篇2022-06-10

发表评论

登录后才能评论

评论列表(0条)

    保存