登 录
注 册
< 编程语言
Python
Java
Go
SQL
数据结构与算法
定义与复杂度
数组与链表
栈、队列与递归
初级排序
中级排序
排序总结与优化
二分查找
跳表原理与实例
堆和堆排序
动态规划
选择合适的算法
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
数据结构与算法
>>
选择合适的算法
选择合适的算法
2020-10-06 20:51:20 星期二 阅读:2110
在实际开发中,想要灵活、恰到好处的应用数据结构和算法,需要非常深厚的实战经验积累。在工程上选择数据结构和算法,我们往往需要考虑如下因素(包括但不限于) >编码难度; 维护成本; 数据特征; 数据规模; 最终会选择一个工程的最合适解,而不是理论上的最优解。 关于在实际的软件开发中,如何权衡各种因素,可参考以下6条: `1.时间、空间复杂度不能跟性能划等号` 复杂度不是执行时间和内存消耗的精确值 代码的执行时间有时不跟时间复杂度成正比:比如O(nlogn)在数据量小的时候,比O(n^2)时间复杂度更高。 对于处理不同问题的不同算法,其复杂度大小没有可比性; `2.抛开数据规模谈论数据结构和算法都是耍流氓` `3.结合数据特征和访问方式来选择数据结构` 如何将一个背景复杂、开放的问题通过细致的观察、调研、整理清除要处理的数据的特征与访问方式。这才是解决问题的重点 `4.区别对待IO密集、内存密集和计算密集` IO密集:如算法代码执行效率的瓶颈可能在磁盘IO,而非算法本身; 内存密集:代码执行效率的瓶颈在于内存的读写,存储等。比如字符串比较操作就需要频繁的从内存里读数据,而CPU只需要进行简单的比较操作。所以,这种情况如果能引入CPU缓存是一个不错的优化。 CPU密集:代码执行效率的瓶颈主要在CPU执行的效率,比如计算复杂的数据逻辑。 `5.善用语言提供的类,避免重复造轮子` `6.千万不要漫无目的的过度优化` 有时候很小的优化却要花费很大的成本,如代码的维护成本,增加bug率 优化代码的时候,一定要做Benchmark基准测试,这样才能避免优化后还不如优化前。