如果给你一个改进算法的任务,你是盲头苍蝇的 google 又 google 试了又试,还是利用算法知识一下找到问题所在?以我浅薄的经验,觉得应该学的是这些:
array.index?
的最佳和最差情况)
如果要求底层算法:
如果关心计算并行化:
如果是数据分析,暂时只想到这些:
#14 楼 @assassinpig 其实有根据磁盘的 buffer 大小来做优化的,还有针对 raid 磁盘和 mmap 写的数据结构... 帮助理解数据库源代码应该挺有用
我觉得数据挖掘的话。。。。知道原理和应用就好,基本上都有相关的算法包。比如 libsvm 什么的。。要是把里面的公式推导都搞通了,读个博士问题不大,顺便还能发几篇 SCI。
计算机是应用科学,学习算法其实没太大用,大部分人也无需去学算法。学习算法是应用数学系和 CS 的某些博士干的事情. 学会应用算法就行了,应用算法上面再加一点点稍微的要求——高效优美的实现算法。拿最简单的倒置数字来说,13 倒置成 31,不考虑 10,100 的处理,不考虑溢出。如何算优美写出,而不是反正实现了. 如何学会应用算法?手熟多练。
寄存器,内存,硬盘,IO 操作速度的不同之处
时间/空间复杂度,大 O 记法,多项式复杂度的基本概念 单/多递归函数的时间/空间复杂度 工作语言中的常用操作的复杂度 (例如 array.index? 的最佳和最差情况)
几种基本内存管理的实现 (malloc, memory pool, arena, reference counting, trace GC 等)
CPU 架构:流水线,分支预测,超向量指令等概念和应用
把简单的算术运算转换成矩阵运算
差分方程和母函数法的应用
有些只是介绍...具体详细还要翻翻教科书跟 paper...
不同领域需要的基础不一样。例如数据挖掘、机器学习、DSP(数字信号处理)、模式识别领域,当然这些领域每一个都很大,有非常多的算法。 在很多 AI 相关的领域,概率和数理统计的知识是最为重要的。
具体业务逻辑的抽象,最后可以归结到纯数学问题. 而针对数学问题的具体处理与分析,一些好的方法是通过抽象算法进行描述与处理。
从计算机系统的全技术栈,就可以找到很多算法技术。http://www.infoq.com/cn/news/2013/11/Core-algorithms-deployed
数据结构很重要,很多算法依赖于数据结构的设计. 推荐看<算法导论>.看完了,差不多"不惑"了. 算法的标准只有两条,有效性以及效率。如果对算法效率的要求深究到 CPU 底层实现的地步,那 ruby 就不合适了,用 C 吧。
赞 :plus1:
你是盲头苍蝇的 google 又 google 试了又试, 还是利用算法知识一下找到问题所在?
可否举例?
只会 Google 的求解。怎样可以减少 Google 之“鱼”,而能“渔”?