引言
一则关于2019华为软件精英挑战赛的心得总结,让我学到了很多新东西。
前言
今年第一次参加华为软挑,最终拿到了全国16强,也是很不容易,团队配合很重要,坚持不懈的态度也很重要,过程中也是受益匪浅,总体上来说,真的是收获多多~
赛题其实都不太重要,每年题目都不一样,也有很多人分享了他们自己的解题方法,Github上搜索2019codecraft可以搜到很多,我也就不再多说了,说说全局的注意点:
- 团队配合分工很重要。软件为主的比赛,还是得有软件功底。
- 语言选择很重要。我们今年用的是Python,19年的题目对速度有一定的要求,所以用C/C++/java会相对有时间优势一点,但是写起来会复杂很多,所以也是相对的,自己取舍,但还是建议用速度快的,速度优势比代码优势要划算得多。
- 一定不要在比赛前一天还在大幅改动代码。没有经过一段时间测试的代码,说崩就崩。
- 如果对速度有要求,一定要好好看看数据结构与算法。
- 多交流,不要局限于组员之间,组与组之间也是可以的。
通用的心得,其实也没有很多,也没说到很多重点,但是比赛中对Python有了很多新的认识。
内建函数VS自己写
Python真的自带了很多很多内建函数和标准库,可以完成各种各样的数据结构,特别是collection
库,很好使,还有heapq
。这次比赛中,要用到D算法
,D算法
要用到二叉树优先队列,但是heapq
里面的优先队列没有decrease key
这个操作,我就使用了自己写的优先队列,但是后来经过对比发现,就算不用decrease key
这个操作,使算法变复杂了一点,使用标准库,依然比自己写的快不知道到哪里去了,所以,标准库,你值得拥有。
类实例VS内存
这次赛题,会生成很多类实例,毕竟Python是动态分配,担心会占用太多内存,于是神奇的搜到了一个魔术方法__solt__
,加上这个,可以减少属性占用的内存,还能加快读取,所以,还是得多多学习呀。
程序性能分析软件
程序性能分析软件真的真的很重要,特别是对时间有要求的时候。我用的是cProfile
,很好使,可以知道每个函数块用时占比,进而可以有针对性的修改。