这次推荐的课程是北京大学陈斌老师的《python版数据结构与算法》
一共有87个视频, 已经听了30+, 适合起步阶段对数据结构和算法有基本的认识, 是入门python编程的一门比较好的系列课程.
我对时间复杂度O 能有更好的理解, 是从陈老师这里学来的
数据结构与算法的重要性
编程 = 数据结构 + 算法
我相信很多人开始和我有一样的误区, 主要源自于对算法和数据结构的理解不清楚.
机器学习那么多分类回归算法, 是不是算法? 当然算! 但是这些算法是针对于机器学习领域的, 你可以用这些算法去进行数据挖掘,打数据科学的比赛等等, 但是请记住这里的算法是“专业领域算法”, 是对数据进行建模的.
通常意义上说的算法, 是指“查询”, “排序”等这类方法, 是更为基础的算法. 比如你在使用KNN的时候, 采用sorted()函数, 对计算的距离进行排序, 取前K个距离最近样本的标签做投票, 这里就用到了排序方法.
因为 python是模块化非常好的编程语言, python有很多功能强大的包可以调用, 所以在平常进行数据分析的过程中,我是很少接触底层算法实现的, 但是其依然重要, 在刷leetcode, 面试的时候, 考察的是对基础算法的实现.
某次面试, 一道编程题, “两个有序数组合并, 求出中值”, 直接上去掉numpy的包, 用np.median()函数 … 考官ios:直接调包, 我还TM用你写啥…心态崩了, 其实这题主要是考察排序算法. 不同排序方法有不同的时间复杂度, 一般快排是最优方法.
对于数据结构, 我尽量用最简单和直观的语言来概括:
数据结构是逻辑层面的, 编程语言是不同的实例. 堆、栈、队列、链表…每种语言都有自己的实现方式, 你在刷leetcode时候, 筛选条件是不是有对不同数据结构类型的题型选择? 还可以选择编程语言? 数据结构和基础算法是原料和配方, 不同的大厨(编程语言)做菜的速度, 效率是不同的.
至于python, 本身是没有堆栈等数据类型的, 但是可以用list,dict等基础数据类型来实现堆栈的思想.
不对请指正, 如果解决了你心中的疑惑, 请勿吝关注与赐赞.