V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
honam
V2EX  ›  程序员

关于工作后算法的使用,你真会经常用吗?

  •  
  •   honam · 2015-09-25 00:03:22 +08:00 · 6629 次点击
    这是一个创建于 3354 天前的主题,其中的信息可能已经有所发展或是发生改变。

    出来工作一年了,做 Java web 的,感觉所做的项目跟算法没太大关系。你们呢,是否也有这样的感觉,现在连一个快排也写不出了。。。那问题来了,为啥大公司对算法要求那么高呢?什么职位使用算法最多?

    37 条回复    2015-09-26 08:52:54 +08:00
    matthewgao
        1
    matthewgao  
       2015-09-25 00:34:58 +08:00
    坦白的说,我这 3 年里从来没写过任何算法,只是在用,因为各种库都包含各种算法,需要自己写的时候我还没碰到,我也不自信我能比库里实现的还好
    YouXia
        2
    YouXia  
       2015-09-25 00:47:28 +08:00 via Android   ❤️ 3
    看职位,我接触到的搜索,存储等相关对性能要求比较高的会用到。
    此贴提到的数据结构和算法很多都用过:
    http://stackoverflow.com/questions/500607/what-are-the-lesser-known-but-useful-data-structures
    比如哈希,跳表, BloomFilter ,后缀树等等,然后为了某些特殊需求也要实现一些算法,比如压缩相关的 S9 , S16 , PForDelta 等等。

    至于为什么面试要求算法,主要原因是,应届生基本啥都不懂,这是最有效的面试手段。
    Andiry
        3
    Andiry  
       2015-09-25 00:49:17 +08:00 via Android
    不用算法的只能算码工,离程序员还有距离
    matthewgao
        4
    matthewgao  
       2015-09-25 00:49:26 +08:00 via Android
    @YouXia 我很好奇 你是说用,还是自己实现?
    YouXia
        5
    YouXia  
       2015-09-25 00:54:58 +08:00 via Android
    @matthewgao

    也有自己实现,也有用的。比如上面提到的压缩算法,源代码里是普通实现,然后为了性能,就得把源代码搞懂,修改为并行指令集方式。

    当然基础的东西肯定不会让你自己实现了(一般神牛们都实现过了),但是许多时候需要看别人论文来实现算法或架构,或者需要优化代码,基础知识都不扎实,会比较吃力的。
    kingcos
        6
    kingcos  
       2015-09-25 00:57:00 +08:00 via Android
    同问。。。数据结构学的好吃力。。。
    就我这资质还是不加入 acm 了吧。。。
    em70
        7
    em70  
       2015-09-25 01:00:00 +08:00 via Android
    计算机软件有两个主要用途
    1.将传统数据数字化
    2.人工智能
    算法使用得多不多,取决于你的项目对人工智能需求是否旺盛。
    zonghua
        8
    zonghua  
       2015-09-25 01:07:42 +08:00 via iPhone
    算法造砖块预制件
    然后只能做堆砌的人,然觉也就这样了。
    msg7086
        9
    msg7086  
       2015-09-25 01:25:10 +08:00
    程序 = 数据结构 + 算法。

    平时写的程序,除了数据结构部分以外,都可以称之为算法。

    算法就是解决问题的过程。比如输入用户 ID ,输出用户所有的文章,这个也属于算法。

    至于非常复杂的算法,本来日常开发中就用得不多。考算法也不是让你把算法背下来,而是考你解决问题的思路。日常开发中也要解决很多问题,如果你算法题能够自己想出来解决掉,那么日常开发里你也会有这个能力去解决问题。
    RiceNoodle
        10
    RiceNoodle  
       2015-09-25 02:08:50 +08:00
    大公司只是用算法来简单粗暴的区分程序员的水准
    就高考,粗暴但是有效。
    Tedko
        11
    Tedko  
       2015-09-25 02:20:42 +08:00
    实习就用了。。。
    binux
        12
    binux  
       2015-09-25 02:50:59 +08:00
    现实中,很多时候是在想怎么把问题抽象成能用算法解决,而不像面试题一眼就能抽象出来
    然后,各种算法,代价实现,时间,空间复杂度统统比较了一遍。

    每天问题抽象,想算法抓破头啊!
    bbx
        13
    bbx  
       2015-09-25 04:24:47 +08:00
    是不需要用,但是用的时候就傻眼了。。。
    jianzong
        14
    jianzong  
       2015-09-25 08:15:20 +08:00 via iPhone
    我感觉,学很多知识,譬如计算机基础知识、数据结构、算法、数学,都不是为了拿来即用。而是学习了这些知识会改变了你对程序的看法和角度。从这个意义来说,只要从事编程工作,我相信就是每天都会用到。

    能写一个 working
    zerh925
        15
    zerh925  
       2015-09-25 08:18:26 +08:00
    看你怎么定义“ algorithm ”咯
    我现在做机器视觉,基本上都是和算法打交道。
    虽然 OpenCV 常用算法都有,但是很多时候都要改源码才能满足需求。
    jianzong
        16
    jianzong  
       2015-09-25 08:18:34 +08:00 via iPhone
    我感觉,学很多知识,譬如计算机基础知识、数据结构、算法、数学,都不是为了拿来即用。而是学习了这些知识会改变了你对程序的看法和角度。从这个意义来说,只要从事编程工作,我相信就是每天都会用到。

    写出一行 work 的代码,和了解这行代码背后运作原理、以及分析为什么要这样写、会导致什么样的问题,是两个不同的层次。

    比如最近我看了一些汇编基础知识,也可以说是平常工作不会用到的,但在需要深入分析一些问题的时候,确实帮助了我的理解。我相信算法也是这样,会帮你更深入理解写出的每行代码。
    xunyu
        17
    xunyu  
       2015-09-25 08:19:32 +08:00 via Android
    数据挖掘就是玩算法,看 paper
    sivacohan
        18
    sivacohan  
       2015-09-25 08:50:16 +08:00 via Android
    如果做数据挖掘,做推荐系统。跑不了要看算法。
    就算有库实现了,工程上想要用,基本也得自己重写一遍。
    theJian
        19
    theJian  
       2015-09-25 08:52:47 +08:00
    acm 弃坑现实习,基本没碰过算法
    yonka
        20
    yonka  
       2015-09-25 08:56:49 +08:00
    看技术层次和技术追求了,光写 CRUD 或者满足于光写 CRUD 自然用不着...
    blue7wings
        21
    blue7wings  
       2015-09-25 09:07:47 +08:00
    这是一种基本计算机素质,就像你一个计算机的去看些数学书,人文书,短期有没有用?看不出来,但时间长了一个人的眼界就不一样了啊...
    ----一个二维数组排序都写不出来的程序员的感悟(哭)
    mengzhuo
        22
    mengzhuo  
       2015-09-25 09:47:03 +08:00 via iPhone   ❤️ 1
    游戏业务也需要

    物品掉落里各种概率计算 二项分布 泊松 随机算法
    二分加速搜索
    LRU 来做属性计算缓存, cuckoo filter 保存兑换码
    anexplore
        23
    anexplore  
       2015-09-25 10:29:56 +08:00
    后端算法还是用的挺多的
    akagi
        24
    akagi  
       2015-09-25 10:41:42 +08:00
    重写不推荐,尤其是复杂的算法。不过该用记忆化搜索的用普通递归就……
    wshcdr
        25
    wshcdr  
       2015-09-25 10:52:17 +08:00
    有时候会用到哦
    theworldsong
        26
    theworldsong  
       2015-09-25 11:37:24 +08:00
    书到用时方恨少.
    matthewgao
        27
    matthewgao  
       2015-09-25 13:50:29 +08:00
    @YouXia 恩 和我认为的差不多,我曾经面试过摩根,我就对他们所指的算法有分歧,他们竟然认为 STL 里 for_each 也算算法。。。我认为这就是个工具, C++11 都可以用 for(auto& itr: vec)
    matthewgao
        28
    matthewgao  
       2015-09-25 13:51:17 +08:00
    @xunyu 实际上在搞的是数学
    s7lx
        29
    s7lx  
       2015-09-25 15:44:36 +08:00
    因为你只是堆代码的。 写个搜索热词提醒给我看看 。 这种撕逼怎么能少了 @wklken
    songco
        30
    songco  
       2015-09-25 15:52:29 +08:00
    以前做存储, 搞 paxos, 看起来简单, 实现起很麻烦. 后来的 Raft 就好多了. 不过这个也可以叫协议.

    当年组里来了一个应届生说他一个下午就能写出来.... 也不想想 google 的 chubby 都搞了多久.
    songco
        31
    songco  
       2015-09-25 15:53:13 +08:00
    大部分情况下, 知道有这么个算法可以解决什么问题就可以了, 遇到了在详细研究.
    maemolee
        32
    maemolee  
       2015-09-25 15:56:28 +08:00
    觉得数据结构很复杂的样子,这个假期要抽时间看看了 www
    xiaosha009
        33
    xiaosha009  
       2015-09-25 16:03:05 +08:00
    用的也不多,用的也不难,因为 java 很多东西都封装了,没必要自己写。只是算法可以锻炼一个人的思维,以后再技术上的发展还是需要算法的。程序员厉不厉害还是可以通过算法来看出来的
    chinawrj
        34
    chinawrj  
       2015-09-25 16:19:30 +08:00
    几乎不用。用现成的。知道算法是怎么回事就行了。
    hienchu
        35
    hienchu  
       2015-09-25 17:01:26 +08:00
    如果是偏向应用开发的,真正写算法的机会并不多,因为现有的库已经足够好,如果基础算法真的成为瓶颈,也不是随手写一个就能解决的吧。不过懂算法还是很必要的,作用常常都是潜移默化,就好比你学了那么多年的语文,不一定要写小说当作者,但是对于你学习其他知识的阅读理解以及沟通是十分必要的,但你却很少意识到其实语文学习有帮到你。
    deepreader
        36
    deepreader  
       2015-09-26 04:46:12 +08:00
    同意 @binux 大大的观点。
    foxkiller
        37
    foxkiller  
       2015-09-26 08:52:54 +08:00
    曾经每天花一半时间是在研究数学和算法的飘过。。。

    以前做算法设计的= =||
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1244 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:58 · PVG 07:58 · LAX 15:58 · JFK 18:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.