这几天通过做算法题,谈谈自己的对语言的感觉 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hejw19970413
V2EX    程序员

这几天通过做算法题,谈谈自己的对语言的感觉

  •  
  •   hejw19970413 2020-06-17 21:40:25 +08:00 5463 次点击
    这是一个创建于 1942 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 Java 中在工具包中,就提供了多种多样的数据结构的支持 map hash 栈 等等。在工业级别上这种的老牌而又稳定的数据以及语言,给予开发者很多的方便。

    在 Go 中没有对应的像 Java 中那么多的数据结构支持,但是在语法上给予开发者足够的想象空间。神奇的“切片”

    在 PHP 中最重要的还是在于 PHP 的数组。PHP 中的数组是万能的小黑,在官方提供的函数给予开发者足够的方便,这可能就是 PHP 能够快速开发的秘诀。

    Python 接触的不多,但是每次用 Python 解决问题,好像不用费太多的步骤,直击要害。但是自己用后的感觉就是自己不知道 Python 在内部搞了什么飞机

    Ps:这个只是自己的感觉。也没有什么太多的感受,就是在相同的思路上,每个语言的实现方式的不同。也能希望得到个位的指点。

    34 条回复    2020-06-19 10:20:57 +08:00
    chizuo
        1
    chizuo  
       2020-06-17 22:36:33 +08:00   3
    C++写算法才是真的爽,上到各种 stl,下到各种优化,随你折腾。
    Vegetable
        2
    Vegetable  
       2020-06-17 23:02:58 +08:00   2
    因为做题默认不能用高级类库方法,只用数据结构,用什么语言这些基础设施的区别没特别大,当然还是会有。

    但是总体来说

    写得爽,跑的憋屈
    写的憋屈,跑的爽
    hejw19970413
        3
    hejw19970413  
    OP
       2020-06-17 23:30:47 +08:00
    @Vegetable 嗯 有道理
    yannxia
        4
    yannxia  
       2020-06-17 23:38:50 +08:00   2
    刷题我感觉最爽的是 Python,直接撸算法核心思想,缺点就 Timeout (个别题目)。
    lithbitren
        5
    lithbitren  
       2020-06-17 23:49:18 +08:00
    如果只写各种语言内的最佳实现,py 的最佳实践九成以上都是调库,标准库实现大概率比自己实现要快,一行版的答案非常多,其他语言则很难说,毕竟一般算法题不用考虑太复杂的边界和类型,可以节省很多数据结构的开销。
    lithbitren
        6
    lithbitren  
       2020-06-17 23:50:41 +08:00
    不过一般也是只有 python 发明了超越传统复杂度的新算法,大家都能大概看懂,其他语言如果出现了新算法,基本没啥人看得懂。
    786375312123
        7
    786375312123  
       2020-06-17 23:54:26 +08:00
    @yannxia python 如果算法对的话,不会 TLE 。很多时候 TLE 了看看评论区
    kidlj
        8
    kidlj  
       2020-06-18 00:13:31 +08:00 via iPhone
    Go 在这些当中是最 accessible 的吧,不论是什么库,点进去看实现,因为没什么 magic,很容易就看懂。
    lithbitren
        9
    lithbitren  
       2020-06-18 00:13:59 +08:00   1
    @786375312123 也不一定,比如 leetcode 839,从比赛变成常规题目的时候扩了数据,导致主流的两种方法用 py 写都过不了,其他主流静态语言都能轻松暴力过,国际版的 py 也没人过,卡了我两个星期才想到分类讨论 ac 了,过了以后我提了意见给官方说是不是应该延长计时,结果官方过了几天也出了一个分类讨论的解法。。
    cmdOptionKana
        10
    cmdOptionKana  
       2020-06-18 00:26:34 +08:00
    @kidlj 与现代语言相比,缺少现代黑魔法,与 C 相比,缺少古代黑魔法,因此貌似真的没有比 Go 更直白的语言了。
    786375312123
        11
    786375312123  
       2020-06-18 00:34:25 +08:00
    @lithbitren 一般你用暴力解法过的,就算 oa 过了,现实中 onsite 面试写出来这种会有大概率挂。你说的本身暴力就不应该让过
    lithbitren
        12
    lithbitren  
       2020-06-18 01:02:11 +08:00
    @786375312123 一般是这么说没错,那题除了 python 需要分类讨论,其他语言完全不需要分类讨论就能 ac,当时几百个通过的人里也没人把分类讨论当正解,常规法写完就完了。leetcode 近千题刷下来,需要在时间复杂度上分类讨论的题目几乎没有,这应该是我遇到唯一一道,很难说是一般面试考察的重点,一般面试最多是要求写出不同时间复杂度的解法。当时 leetcode 的 py 版本是 3.7,分类讨论过这题平均要 4-6 秒,不分类二十秒以上是必然的,而 c++不分类讨论也就是 200-500ms,这个时间量级在 leetcode 里也见怪不怪了,一般不会想到要去分类讨论做这题。
    786375312123
        13
    786375312123  
       2020-06-18 01:16:47 +08:00
    @lithbitren 时间复杂度上需要讨论的多的去了,亚马逊最高频的题 Critical Connections in a Network 就是。
    NVDA
        14
    NVDA  
       2020-06-18 03:30:16 +08:00
    @786375312123 那道题是 OA 题,至今不理解为什么要放这种题进 OA...
    786375312123
        15
    786375312123  
       2020-06-18 05:27:56 +08:00
    @Mirage09 你说 Critical Connections in a Network ?没办法,就那么几个恶心的难题,你总要会做。
    yafoo
        16
    yafoo  
       2020-06-18 06:31:24 +08:00 via Android
    所以说,PHP 是世界上最好的语言
    jxie0755
        17
    jxie0755  
       2020-06-18 07:25:08 +08:00 via iPhone
    @lithbitren 自从我发现很多 py 的一行版并不是最快的解法后,我感觉我就不再纠结于一定要一行解决问题了。
    NVDA
        18
    NVDA  
       2020-06-18 08:33:53 +08:00
    @786375312123 会做是会做,但是跟其他普通 OA 题差距也太大了…幸好当时没碰到这题
    NVDA
        19
    NVDA  
       2020-06-18 08:36:43 +08:00
    Python 的 one-liner 没意义,有本事你面试的时候也这么写…而且你看得懂,能写出来不代表面试官看得懂
    VDimos
        20
    VDimos  
       2020-06-18 08:39:49 +08:00 via Android
    树,图,链表,有些题 leetcode 直接就不提供 rust 版本的。其实 rust 用 raw pointer 也能写,但是官方不开放。
    sxfscool
        21
    sxfscool  
       2020-06-18 08:46:34 +08:00
    有不少 PHPer 分不清 map 和 array[狗头]
    lithbitren
        22
    lithbitren  
       2020-06-18 09:07:12 +08:00 via iPhone
    @786375312123 1192 吗?不是直接 tarjan 嘛,比赛的时候几分钟用拓扑排序 ac 了,比完才意识到拓扑排序是错的,这题怎么讨论
    Rwing
        23
    Rwing  
       2020-06-18 09:17:59 +08:00
    C# ???
    35aZ4P8mT576683q
        24
    35aZ4P8mT576683q  
       2020-06-18 09:18:12 +08:00 via Android
    发明一种语言,在装编译器的时候可以选择封装度,伪"动态"类型
    goodboy95
        25
    goodboy95  
       2020-06-18 10:00:42 +08:00
    大学一直用 C++搞算法题,工作两年之后想再试试,结果发现 C++没了 split 都会让我非常难受……
    goodboy95
        26
    goodboy95  
       2020-06-18 10:06:21 +08:00
    @786375312123 当初在知乎上看见有人贴这题,给我的感觉就是,打 ACM 的那帮子人到底接触了几百种数据结构和算法啊
    786375312123
        27
    786375312123  
       2020-06-18 15:26:14 +08:00
    @lithbitren 对,“直接”tarjan 。暴力解呗,不需要考虑时间复杂度?
    786375312123
        28
    786375312123  
       2020-06-18 15:44:46 +08:00
    @goodboy95 高频题,就那么几道难的。多做做就好了,其实也没什么麻烦的。都是熟能生巧罢了
    goodboy95
        29
    goodboy95  
       2020-06-18 17:41:47 +08:00
    @786375312123 主要是一群 ACMer 说这是 ACM 签到题,比赛时给人送分的那种……哎,感觉他们这水实在深
    786375312123
        30
    786375312123  
       2020-06-18 17:45:31 +08:00
    @goodboy95 你花个一年时间去备赛也会一样的,这东西就是熟能生巧。。。而且 acm 的难度不是数据结构有多难,大多数情况是读题你得想明白这个题到底是什么问题,用什么样的算法。
    lithbitren
        31
    lithbitren  
       2020-06-18 20:27:07 +08:00
    @786375312123 我说的时间复杂度讨论不是这种,说的是那题的两种解法一种是 O(m*m*n)一种是 O(m*n*n*n),python 必须依据 m 和 n 的数据规模分类讨论成 O(m*n*min(m, n*n))的复杂度才能过,其他语言都不用。
    786375312123
        32
    786375312123  
       2020-06-18 22:56:32 +08:00
    @lithbitren 你不是说暴力吗?暴力你也可以试试遍历树,用其他语言
    12tall
        33
    12tall  
       2020-06-19 09:02:03 +08:00
    @Vegetable 经典啊,woc
    LennieChoi
        34
    LennieChoi  
       2020-06-19 10:20:57 +08:00
    写算法还是 python 最爽啊,不是说它提供了很多工具函数,是他的语法简便性。尤其 A 题的时候,不用写括号,不用写大括号,不用写分号,不用 var,各种懒人操作
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2416 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 01:09 PVG 09:09 LAX 18:09 JFK 21:09
    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