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

博主通过自身经历探讨了自编代码与库函数的效率对比,指出在开启优化后,专业库的强大优势。他以矩阵乘法为例,展示了自己的实现如何在优化后被Eigen和cublas库远远甩开。他强调,不应轻视专业库的优化和设计,并以一道算法题为例,暗示专业水平的差距可能远超预期。
摘要由CSDN通过智能技术生成

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

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

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

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

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

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

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

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

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

#include <iostream>

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)。

这就是专业的差距。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不停感叹的老林_<C 语言编程核心突破>

不打赏的人, 看完也学不会.

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值