栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

后面学习算法,自己实现过几大经典排序,也和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)。

这就是专业的差距。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号