在实际开发中,如何权衡选择使用哪种数据结构和算法?
-
时间空间复杂度不能跟性能划等号
-
抛开数据规模谈数据结构和算法都是"耍流氓"
-
要结合数据特征和访问方式选择数据结构
-
区别对待IO密集、内存密集和计算密集
- 磁盘,数据库:磁盘IO
- CPU密集型:代码执行效率瓶颈主要在CPU执行效率,我们从内存读取一次数据,到CPU缓存或者寄存器之后会进行多次频繁CPU计算,CPU计算耗时占大部分,要尽量减少逻辑计算复杂度,比如用位运算代替加减乘除运算,加减乘除在CPU会用位运算计算(加法器)
- 内存密集型:代码执行效率瓶颈在内存数据的存取,对于内存密集性代码,计算操作比较简单,比如字符串比较操纵,每次从内存读取数据之后,只需要进行一次简单比较操作,所以内存数据读取速度是字符串比较操作瓶颈,在选择数据结构和算法时候需要考虑能够能否减少数据读取量,数据是否在内存连续存储,是否能利用CPU缓存预读
-
善用语言提供的类,避免重复造轮子
-
不要漫无目的的过度优化