打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
怎样才能把算法学好?

算法和数据结构是密不可分的,如果你想让代码运行效率提高千百倍,那么算法和数据结构是必须要学的!

通常在计算机领域,表示算法时间有一个方法叫做大O表示法,比如O(N)常数级,O(log2n)对数级,O(n2)平方级等等!

举个栗子:从一个有4294967296(2的32次方)这么大的数量中找到某个数,如果是使用顺序查找(大O记数法为O(N)),平均查找次数需要总数量的的一半,也就是平均20多亿次,而使用二分法查找(大O计数法为O(log2n)),查找次数为log以2为底n的对数,也就是32,what??只要32次,没错,从20多亿次变为32次!效率提高了几千万倍!(当然,二分法查找需要保证这组数是有序的)。


由此可见,算法是追求快速度,高效率的路上不得不学的,然而怎么学好算法呢?

1,兴趣:程序员当了很多年,没有什么是像算法一样让我头疼的了,光是排序算法就有不知道多少种,像冒泡,快排,插入排序,希尔排序等等这些就够喝一壶的了,还有查找算法中的二分查找,二叉树查找,红黑树,hash,可以说学习的时候觉得每一个都很经典,每一个都很难,要不是兴趣使然,很难从算法的路上走下去

2,坚持:每天或者每周都要坚持沉浸在算法的世界里,很多算法由于在平时的开发中很难碰到,所以需要经常性的去看看,去回顾!一个算法一个算法的掌握,就是记忆效率中的贝瑟尔曲线一样,经常的去巩固学过的东西,温故而知新!


3,写demo:光说不练假把式,在学习算法的过程中,使用自己熟悉的编程语言实现这些算法,尽量涉及到算法中存在的坑,然后经常回来回顾这些Demo!

4,使用:算法都是用来使用的,我们可以在代码中使用算法实现业务逻辑,以追求更佳的性能,也可以从一些成熟的数据结构中追寻算法的轨迹,比如JAVA中的HashMap,hash算法是一种key-value的存储形式,对每一个存储的数或者对象对key使用hash算法,然后同一个hash值的对象放入同一个链表中!

再举个栗子:一个250000(500*500)的数(无序的,二分法不适用),如果使用顺序查找需要比较125000次,如果对1....250000进行hash,key对应的数组大小为500,每一个链表中存500,刚好存完250000个数(理想的情况下),我要查找有个数的时候,只要算出hash值,找到数组中的那个key,平均250次,再从链表中查找出那个value,平均250次,也就是说我只需要500次的比较查找,就能找到,比顺序查找快了几百倍以上!

当然,在JAVA8中,hashMap的算法已经发生了更改,在冲突(因为key对应的hash值分布不均,导致某些key对应的值较多)比较严重的时候会自动转为红黑树进行存储和获取,所以学习HashMap可以学到hash算法,红黑树等,是不是很强大?

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Java 8 中 HashMap 到底有啥不同?
java数据结构
深入理解数据结构之散列表
面试被问到 HashMap 底层原理?我有点慌.
Java 8系列之重新认识HashMap
聊聊 HashMap 和 TreeMap 的内部结构
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服