纯技术话题:程序,是算法重要还是数据结构重要? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
abser
V2EX    程序员

纯技术话题:程序,是算法重要还是数据结构重要?

  •  
  •   abser
    abserari 2020-12-06 12:02:44 +08:00 7793 次点击
    这是一个创建于 1769 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我认为这个话题有助于自己找到自己看重程序的那一部分。

    第 1 条附言    2020-12-07 11:47:51 +08:00
    如果没有场景,为什么不能设立场景分析呢?
    如果问题不明朗,为什么不额外探究问题的新的可选答案呢?
    如果问题能够激发自己的思考,为什么不深入思考一下帮助自己进一步理解编程在做什么呢?

    我是站着这样的立场向自己提出的思考,分享这个问题希望大家也能获益。
    73 条回复    2020-12-07 19:08:54 +08:00
    1rror
        1
    1rror  
       2020-12-06 12:08:24 +08:00   1
    这个我感觉不管说哪个更重要都有反驳的理由,两个缺一不可,讨论这个没啥意义阿。
    Kiske
        2
    Kiske  
       2020-12-06 12:11:38 +08:00   30
    走路,是左腿重要还是右腿重要
    wszgrcy
        3
    wszgrcy  
       2020-12-06 12:11:52 +08:00 via Android
    这个问题就像问吃早餐豆浆和油条哪个先吃一样……
    aguesuka
        4
    aguesuka  
       2020-12-06 12:14:53 +08:00 via Android   1
    算法 ∪ 数据结构 ≠ 程序
    (算法 ∪ 数据结构) - 算法 ≠ 数据结构
    重要 (算法) => undefine excpetion!
    你问了一个不是很好的问题
    lixiang2017
        5
    lixiang2017  
       2020-12-06 12:15:20 +08:00 via Android
    程序=算法+数据结构
    liuch
        6
    liuch  
       2020-12-06 12:16:08 +08:00
    这个问题.....
    左腿重要还是右腿重要?
    tiedan
        7
    tiedan  
       2020-12-06 12:17:42 +08:00
    算法+数据结构 = 程序
    abser
        8
    abser  
    OP
       2020-12-06 12:20:08 +08:00
    abser
        9
    abser  
    OP
       2020-12-06 12:21:29 +08:00   5
    以下来自上面博客的引用:

    虽然说“程序设计=算法+数据结构”,然后我实际中的体会,数据结构更加重要。

    因为结构定义了一个程序的架构,结构定下来了才有具体的实现。好比盖房子,数据结构就是房子的框架结构,如果一间房子很大,而你并不清楚这个房子的结构,会在这里面迷路。而对于算法,如果属于暂时不需要深究的细节部分,可以参考前面“区分主线和支线剧情”部分,先了解其入口、出口参数以及作用即可。

    Linus 说: “烂程序员关心的是代码。好程序员关心的是数据结构和它们之间的关系。”

    因此,在阅读一份代码时,厘清核心的数据结构之间的关系尤其重要。这个时候,需要使用一些工具来画一下这些结构之间的关系,我的源码分析类博客中有很多这样的例子,比如《 Leveldb 代码阅读笔记》、《 Etcd 存储的实现》等等。

    需要说明的是,情景分析、厘清核心数据结构这两步并没有严格的顺序关系,不见得是先做某事再做某事,而是交互进行的。

    比如,你如果现在刚接手某个项目,需要简单的了解一下项目,可以先阅读代码了解都有哪些核心数据结构。理解了之后,如果不清楚某些情景下的流程,可以使用情景分析法。总而言之,交替进行直到解答你的疑问为止。
    cmostuor
        10
    cmostuor  
       2020-12-06 12:38:59 +08:00
    @tiedan +1
    flawless
        11
    flawless  
       2020-12-06 12:43:23 +08:00
    都不重要,业务最重要。
    imn1
        12
    imn1  
       2020-12-06 13:21:50 +08:00
    这样说吧,接触算法的程序员并不多,做业务流程的是大部分,业务流程跟数据结构是紧密相关的
    做核心算法的,就算你想加到程序里面,恐怕也要申请,不是程序员本身就能决定的
    程序员能直接控制算法的,多是研究人员岗位,或者独立开发

    至于基础算法会不会常用,就看项目有没有各种条条框框限制了,模块内优化还是需要的
    JeffGe
        13
    JeffGe  
    &nsp;  2020-12-06 13:33:22 +08:00 via Android   4
    《五官争功》
    fline
        14
    fline  
       2020-12-06 13:52:34 +08:00   2
    只有技术不好的人才纠结这种问题。。。
    autoxbc
        15
    autoxbc  
       2020-12-06 14:03:38 +08:00   2
    程序 = 算法 + 数据结构 ×
    程序 = 算法 * 数据结构 √
    charlie21
        16
    charlie21  
       2020-12-06 14:49:44 +08:00 via iPhone
    写到一万行代码之前根本不需要考虑这个
    Jooooooooo
        17
    Jooooooooo  
       2020-12-06 14:50:27 +08:00
    都不重要

    业务最重要
    zion03
        18
    zion03  
       2020-12-06 14:51:22 +08:00   1
    记得之前看过 Linus 评价 Git 的数据结构很稳定,好的数据结构设计能使代码更容易维护。
    在工作中遇到的实际情况也是如此,算法只是程序的一小部分,随着需求的不断更迭,程序也需要不断的重构(当然,良好的设计模式能应对大部分需求的变更)。但如果数据结构出现了无法满足新需求的情况,重构起来会非常痛苦。
    zzzzzzggggggg
        19
    zzzzzzggggggg  
       2020-12-06 14:53:51 +08:00
    没有讨论的意义
    wellsc
        20
    wellsc  
       2020-12-06 14:55:58 +08:00
    程序=数据结构+算法,缺一不可
    mascteen
        21
    mascteen  
       2020-12-06 16:19:22 +08:00 via Android   1
    数据结构更重要,因为能用数据结构解决的问题就不要用算法解决
    cccp2020
        22
    cccp2020  
       2020-12-06 16:23:06 +08:00 via iPhone   1
    程序=复制+粘贴
    nicebird
        23
    nicebird  
       2020-12-06 16:26:02 +08:00
    考虑这种东西完全没有意义,连这两个都搞不明白,不要当程序员了。
    aonshuy
        24
    aonshuy  
       2020-12-06 18:09:42 +08:00
    我认为辩证法更重要
    lijie0981
        25
    lijie0981  
       2020-12-06 18:16:43 +08:00
    其实我觉得设计模式比较重要
    TangMonk
        26
    TangMonk  
       2020-12-06 18:53:16 +08:00 via iPhone
    英语重要
    xuanbg
        27
    xuanbg  
       2020-12-06 18:55:25 +08:00
    @wszgrcy 肯定是油条泡一下豆浆再吃啊
    agagega
        28
    agagega  
       2020-12-06 18:59:25 +08:00 via iPhone   1
    认真回答的话:大部分时候数据结构更重要。很多程序员可能用不到什么算法,但一定会接触到数据结构(比如三天两头就会有人吐槽的前后端接口格式!)
    35aZ4P8mT576683q
        29
    35aZ4P8mT576683q  
       2020-12-06 18:59:30 +08:00 via Android
    目录结构更重要,笑
    no1xsyzy
        30
    no1xsyzy  
       2020-12-06 19:12:39 +08:00   1
    楼上认为接触不到算法的,感觉是受了狭义算法和广义算法的迷惑。
    只有数据结构,没有(广义)算法,那你连操作数据结构都做不到,这个不叫程序,叫数据备份。
    就是一个 strcmp 也是(广义)算法。
    没有(广义)算法,你操作不了数据结构;没有数据结构,你(广义)算法操作啥?

    至于业务重要,其实大部分程序员的工作不是设计业务(这是世界或者社会的活,轮不到你区区一个智人种个体),而是理解业务,再将业务转化为数据结构和算法(也就是计算机听得懂的方式)。
    “业务”和“数据结构和算法”哪个重要?这个问题跟主题的问题也一样。
    ggbdpq
        31
    ggbdpq  
       2020-12-06 19:17:06 +08:00   1
    除去算法工程师之外,月薪 2 万以下不用考虑算法,这时候数据结构的重要性就出来了;年薪三四十万的可能就接触一些简单的算法。现在的很多码农还真搞不清楚算法和数据结构,23 楼那哥们太以全概偏或者以偏概全都是片面的和不对的。

    总结,面对技术来说,两者都重要;面对业务来说,数据结构更重要;面对薪资来说,老板认为哪个重要就重要。撇开上述的,当然是两者都重要,并没有最重要分区别。因为你写的每一行代码都是粗略的算法,或多或小都包含数据结构这方面的知识。
    no1xsyzy
        32
    no1xsyzy  
       2020-12-06 19:26:20 +08:00
    @aguesuka 第三行没看懂……
    linyuxin
        33
    linyuxin  
       2020-12-06 19:51:11 +08:00 via Android
    能赚钱就重要
    namelosw
        34
    namelosw  
       2020-12-06 19:53:13 +08:00   2
    算法是你想出来解决某些问题的一个解.

    数据结构是算法用得比较多之后内化出来的一个模型. 重视数据结构的代码比不重视数据结构的代码清晰易懂好维护, 不过数据结构一般不会让你做出之前不能做到的事情. 你可以把数据结构看作某些算法的沉淀.

    Linus, Rob Pike 很多人都说过类似的问题, 这里引用一个 Eric Raymond: http://www.catb.org/esr/writings/taoup/html/ch01s06.html#id2878263
    大意是人很难理解简单的过程逻辑, 但是却能理解很复杂的数据结构.

    对比一下一个 50 行的 if else for 循环, 和一个 50 行的 class.

    或者一个不太恰当的比喻:
    只注重算法把逻辑全扔到 controller 里: 随着 use case 的增多代码会很难读且有很重复.
    重视数据结构≈把逻辑逐渐沉淀到 model 层, 然后想要理解代码的人着重看一看 model 就很快能理解, 而维护代码的人经常能直接用上 model 里已有的很多东西.
    skypyb
        35
    skypyb  
       2020-12-06 19:54:54 +08:00   1
    程序 = 搜索引擎+英语
    这才是对的
    OneMan
        36
    OneMan  
       2020-12-06 20:01:25 +08:00
    解决问题最重要
    muzuiget
        37
    muzuiget  
       2020-12-06 20:11:45 +08:00
    怎么设计数据结构也是算法的一部分,虽然一般人觉得“算法”只是代码控制流。
    rim99
        38
    rim99  
       2020-12-06 20:19:34 +08:00   1
    记得以前看过一个大牛的观点,就是说数据结构确定之后,已经决定了算法的效率的上下限。所以数据结构的设计更为重要些。
    zm8m93Q1e5otOC69
        39
    zm8m93Q1e5otOC69  
       2020-12-06 20:38:51 +08:00 via Android
    业务写不完了
    geebos
        40
    geebos  
    PRO
       2020-12-06 20:41:40 +08:00
    算法和数据结构两者不是孤立的,甚至我们有时候说算法就是在说算法和数据结构。恰当的算法配合恰当的数据结构就可以产生一个优秀的程序。比如 redis 里的 set 实现,hash table 的数据结构还要搭配 rehash 算法 set 才能发挥出最好的效果。个人认为把算法和数据结构拆开来比较没有意义,也许它们中某一个比另一个重要一些,但那又怎样呢,这对写出好的程序没有任何帮助。
    ZRS
        41
    ZRS  
       2020-12-06 21:40:41 +08:00 via iPhone
    这是个语文话题 和技术无关
    akira
        42
    akira  
       2020-12-06 21:58:29 +08:00
    数据库表结构设计 和 sql 哪个重要
    niubee1
        43
    niubee1  
       2020-12-06 22:03:25 +08:00
    互为表里,你非要拆开来说谁重要,要么是真不懂,要么是坏
    mingl0280
        44
    mingl0280  
       2020-12-06 22:20:57 +08:00 via Android
    很莫名其妙的问题啊,两个哪个拆得开一样……
    chenglus
        45
    chenglus  
       2020-12-06 22:38:15 +08:00
    业务最重要+1
    jones2000
        46
    jones2000  
       2020-12-06 22:50:30 +08:00   1
    数据结构重要, 程序员只是算法的搬运工.
    pinocc012
        47
    pinocc012  
       2020-12-06 22:57:23 +08:00
    如果你写一个“hollo world”,两者都不重要
    dr1q65MfKFKHnJr6
        48
    dr1q65MfKFKHnJr6  
       2020-12-06 23:25:28 +08:00
    算法 必定要针对不同的数据结构 有不同的实现,能分开嘛?
    prime2015
        49
    prime2015  
       2020-12-06 23:38:51 +08:00
    都不重要,生活最重要
    raaaaaar
        50
    raaaaaar  
       2020-12-06 23:49:49 +08:00 via Android   1
    根本就分不开,耦合度那么高,我问你怎么求树的直接前驱,这是不是数据结构的基本操作?那这是不是一个算法?
    我问你怎么堆排序,用到了堆,那它是不是个数据结构?

    如果是狭义上的那些算法,像什么排序,查找,贪心,动态规划,这些的确业务上不需要实现,但是如果你遇到一个你要看得懂,同样的,数据结构也是一样的,你读源码,你造轮子,不一样要接触这些东西吗?
    kidlj
        51
    kidlj  
       2020-12-07 00:17:06 +08:00 via iPhone
    数据结构是算法的一部分,瞎问问题。
    taogen
        52
    taogen  
       2020-12-07 00:38:22 +08:00 via Android
    活着最重要
    IvanLi127
        53
    IvanLi127  
       2020-12-07 00:56:25 +08:00 via Android
    角度刁钻,它俩分不开,得配套使用。
    lhx2008
        54
    lhx2008  
       2020-12-07 00:59:52 +08:00 via Android
    对于业务来说,只要测试,监控,压测都过了,再烂的代码也能玩的好好的
    FS1P7dJz
        55
    FS1P7dJz  
       2020-12-07 01:05:04 +08:00   1
    数据结构重要

    在目前大部分商业开发种,数据结构类似楼房的地基和框架,没这个你算法再牛逼,也成不了大气候

    说都重要的实际上就是再搅稀泥,来 v2 大家都知道楼主问的算法和数据结构指的是啥
    ChrisLi1018
        56
    ChrisLi1018  
       2020-12-07 08:05:56 +08:00 via iPhone
    算法难道不是用来操纵数据结构的吗?
    jackky365
        57
    jackky365  
       2020-12-07 08:37:33 +08:00
    很大程度上, 你使用什么样的数据结构,已经反映出了你的算法。

    两者是相辅相成的。
    IssacTomatoTan
        58
    IssacTomatoTan  
       2020-12-07 08:45:03 +08:00 via Android
    我也觉得数据结构重点 好的结构可以更容易进行处理 而不需要过度转换 在牛逼的算法也是建立在能处理的结构上
    snowydec
        59
    snowydec  
       2020-12-07 08:51:39 +08:00
    你上学的时候这两个是两本书?
    freenull
        60
    freenull  
       2020-12-07 09:18:16 +08:00
    两个难道不是一起的么
    StopTheWorld
        61
    StopTheWorld  
       2020-12-07 09:23:42 +08:00
    最让我差异的是这种问题有这么多人回复,当然我回复了也是其中一员。
    fhsan
        62
    fhsan  
       2020-12-07 09:38:56 +08:00
    讨论这个问题应该放在合适的场景
    securityCoding
        63
    securityCoding  
       2020-12-07 09:54:08 +08:00
    这种问题不应该被问出来的,算法和数据结构相辅相成.

    数据结构为算法服务,算法作用于特定的数据结构
    hugo2lee
        64
    hugo2lee  
       2020-12-07 10:04:01 +08:00
    数据结构就是人肉大脑设计出来的算法,装填数据的算法
    wangchonglie
        65
    wangchonglie  
       2020-12-07 11:00:27 +08:00
    数据结构是算法的基础, 数据结构是算法设计出来的, 就好比血与肉, 都重要。
    abser
        66
    abser  
    OP
       2020-12-07 11:47:04 +08:00
    @FS1P7dJz 数据结构重要

    在目前大部分商业开发种,数据结构类似楼房的地基和框架,没这个你算法再牛逼,也成不了大气候

    说都重要的实际上就是再搅稀泥,来 v2 大家都知道楼主问的算法和数据结构指的是啥

    明白人

    如果没有场景,为什么不能设立场景分析呢?
    如果问题不明朗,为什么不额外探究问题的新的可选答案呢?
    如果问题能够激发自己的思考,为什么不深入思考一下帮助自己进一步理解编程在做什么呢?

    我是站着这样的立场向自己提出的思考,分享这个问题希望大家也能获益。
    Anarchy
        67
    Anarchy  
       2020-12-07 12:13:41 +08:00 via Android
    算法是一个比较大的概念,可以完全涵盖数据结构。或者问题可以转换为数据结构在算法中的地位。都单独起专有名词了当然是重要的了。
    rotatefish
        68
    rotatefish  
       2020-12-07 12:20:08 +08:00   1
    好带哥
    annielong
        69
    annielong  
       2020-12-07 13:58:48 +08:00
    还没到能比较的层次,目前接触到最多都是 spring 框架接入数据库表自动生成一切
    Lemeng
        70
    Lemeng  
       2020-12-07 14:47:38 +08:00
    这个问题呢,额,宝妈,你喜欢老大还是老二只能喜欢一个
    lllllIIIlll
        71
    lllllIIIlll  
       2020-12-07 16:04:07 +08:00
    算法和数据结构没办法拆开来谈吧,还没有碰到两者任一单独出现的场景。
    chengkai1853
        72
    chengkai1853  
       2020-12-07 16:20:30 +08:00
    总不是看你写的是哪种工程。如果是系统这种算法比较多的,肯定算法重要啊。绝大多数情况(一般的软件),都是结构比较重要。毕竟写了那么多年,二叉树啥的算法都没手动写过。
    fox0001
        73
    fox0001  
       2020-12-07 19:08:54 +08:00 via Android
    需求最重要
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2887 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 14:22 PVG 22:22 LAX 07:22 JFK 10:22
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86