一些算法方面的文章索引


算法不是我所擅长的(脑子转的太慢,有些太精妙的思路虽能看懂,但要我自己想的话很难想出来或直接就想不出来o(╯□╰)o),但在实际工作/面试中会一些基础的算法又是很必要的,所以,打算多收录一些这方面的资料,等到需要用的时候查找起来也要方便一些(虽然我现在认为:在Google/Baidu(还有一些特殊类别的搜索引擎)出现了之后,你对一个东西或事件的了解程度,基本上取决于“你是不是想了解这个事件”。因为只要你会一些搜索技巧,是很容易/可以找到你需要的资料的。但是,这并不妨碍我保持“勤于/喜好整理/收集资料”的习惯,而且,有些资料并不是一直都有、可以/易于免费得到,也不是所有的网站都会是一直都在的),所以,自己做一个索引方便自己或他人参考是一件有意义的事,值得去做,然后说做就做。

备战面试中算法的五个步骤

    总体来说,备战面试中的算法,分为五个步骤,如下:

    1、掌握一门编程语言

    首先你得确保你已掌握好一门编程语言:

  • C的话,推荐Dennis M. Ritchie & Brian W. Kernighan合著的《C程序设计语言》,和《C和指针》;
  • C++ 则推荐《C++ Primer》,《深度探索C++对象模型》,《Effective C++》 。

    掌握一门语言并不容易,不是翻完一两本书即可了事,语言的细枝末节需要在平日不断的编程练习中加以熟练。

    2、过一遍微软面试100题系列

    我从2010年起开始整理微软面试100题系列,见过的题目不可谓不多,但不管题目怎般变化,依然是那些常见的题型和考察点,当然,不考察任何知识点,纯粹考察编程能力的题目也屡见不鲜。故不管千变万化,始终不离两点:①看你基本知识点的掌握情况;②编程基本功。

    而当你看了一遍微软面试100题之后(不要求做完),你自会意识到:数据结构和算法在笔试面试中的重要性。

    3、苦补数据结构基础

    如果学数据结构,可以看我们在大学里学的任一本数据结构教材都行,如果你觉得实在不够上档次,那么可以再看看《STL源码剖析》。

    4、看算法导论

    《算法导论》上的前大部分的章节都在阐述一些经典常用的数据结构和典型算法(如二分查找快速排序Hash表),以及一些高级数据结构(诸如红黑树B树),如果你已经学完了一本数据结构教材,那么建议你着重看贪心、动态规划、图论等内容,这3个议题每一个议题都大有题目可出。

    如果算法导论看不懂,你可以参看博客

    5、刷leetcode或cc150或编程艺术系列

  • 如主要在国外找工作,推荐两个面试编程网站:一个是http://leetcode.com/,leetcode是国外一网站,它上面有不少编程题;另外一个是http://www.careercup.com/,而后这个网站的创始人写了本书,叫《careercup cracking coding interview》,最终这本英文书被图灵教育翻译出版为《程序员面试金典》。
  • 若如果是国内找工作,则郑重推荐我编写的《程序员编程艺术》,有编程艺术博客版,以及在博客版本基础上精简优化的编程艺术github版。除此之外,还可看看《编程之美》,与《剑指offer》。

    而不论是准备国内还是国外的海量数据处理面试题,此文必看:教你如何迅速秒杀掉:99%的海量数据处理面试题

    此外,多看看优秀的开源代码,如nginx或redis,多做几个项目加以实践之。

后记

    学习最忌心浮气躁,急功近利,即便练习了算法,也不一定代表能万无一失通过笔试面试关,因为总体说来,在一般的笔试面试中,70%基础+ 30%coding能力(含算法),故如果做到了上文中的5个步骤,还远远不够,最后,我推荐一份书单,以此为大家查漏补缺(不必全部看完,欢迎大家补充):

  1. 《深入理解计算机系统》
  2. W.Richard Stevens著的《TCP/IP详解三卷》,《UNIX网络编程二卷》,《UNIX环境高级编程:第2版》,详见此豆瓣页面
  3. 你如果要面机器学习一类的岗位,建议看看相关的算法(如支持向量机通俗导论(理解SVM的三层境界)),及老老实实补补数学基础,包括微积分、线性代数、概率论与数理统计(除了教材,推荐一本《数理统计学简史》)、矩阵论(推荐《矩阵分析与应用》)等..
    综上:上述全部过程短则半年,长则三年。最后一句:急功近利者必败,越想快速越要循序渐进,踏实前进。

来源: <http://blog.csdn.net/v_july_v/article/details/19131887>

 


在编程和算法领域,有哪些经典问题?
一篇百度百科经典算法合集

排序

排序算法:http://baike.baidu.com/view/297739.htm
冒泡排序法:http://baike.baidu.com/view/1313793.htm
起泡法:http://baike.baidu.com/view/174304.htm
鸡尾酒排序:http://baike.baidu.com/view/1981861.htm
桶排序:http://baike.baidu.com/view/1784217.htm
计数排序:http://baike.baidu.com/view/1209480.htm
归并排序:http://baike.baidu.com/view/90797.htm
排序二叉树:http://baike.baidu.com/view/922220.html
鸽巢排序:http://baike.baidu.com/view/2020276.htm
基数排序:http://baike.baidu.com/view/1170573.htm
选择排序法:http://baike.baidu.com/view/1575807.htm
希尔排序:http://baike.baidu.com/view/178698.htm
堆排序:http://baike.baidu.com/view/157305.htm
快速排序算法:http://baike.baidu.com/view/19016.htm
插入排序法:http://baike.baidu.com/view/1443814.htm
树形选择排序:http://baike.baidu.com/view/3108940.html

========================================================

搜索

深度优先搜索:http://baike.baidu.com/view/288277.htm
宽度优先搜索:http://baike.baidu.com/view/825760.htm
启发式搜索:http://baike.baidu.com/view/1237243.htm
蚁群算法:http://baike.baidu.com/view/539346.htm
遗传算法:http://baike.baidu.com/view/45853.htm

========================================================

计算几何

凸包:http://baike.baidu.com/view/707209.html

========================================================

图论

哈夫曼编码:http://baike.baidu.com/view/95311.htm
二叉树遍历:http://baike.baidu.com/view/549587.html

最短路径:http://baike.baidu.com/view/349189.htm
Dijkstra算法:http://baike.baidu.com/view/7839.htm
A*算法:http://baike.baidu.com/view/7850.htm
SPFA算法:http://baike.baidu.com/view/682464.html
Bellman-Ford算法:http://baike.baidu.com/view/1481053.htm
floyd-warshall算法:http://baike.baidu.com/view/2749461.htm
Dijkstra算法:http://baike.baidu.com/view/7839.htm

最小生成树:http://baike.baidu.com/view/288214.htm
Prim算法:http://baike.baidu.com/view/671819.html
网络流:http://baike.baidu.com/view/165435.html

========================================================

动态规划

动态规划:http://baike.baidu.com/view/28146.htm
哈密顿图:http://baike.baidu.com/view/143350.html
递推:http://baike.baidu.com/view/3783120.htm

========================================================

动态规划优化

优先队列:http://baike.baidu.com/view/1267829.htm
单调队列:http://baike.baidu.com/view/3771451.htm
四边形不等式:http://baike.baidu.com/view/1985058.htm

========================================================

其他

随机化算法:http://baike.baidu.com/view/1071553.htm
递归:http://baike.baidu.com/view/96473.htm
穷举搜索法:http://baike.baidu.com/view/1189634.htm
贪心算法:http://baike.baidu.com/view/112297.htm
分治法:http://baike.baidu.com/view/1583824.htm
迭代法:http://baike.baidu.com/view/649495.htm
加密算法:http://baike.baidu.com/view/155969.htm
回溯法:http://baike.baidu.com/view/45.htm
弦截法:http://baike.baidu.com/view/768310.htm
迭代法:http://baike.baidu.com/view/649495.htm
背包问题:http://baike.baidu.com/view/841810.htm
http://baike.baidu.com/view/1731915.htm
八皇后问题:http://baike.baidu.com/view/698719.htm
百鸡问题:http://baike.baidu.com/view/367996.htm
二分法:http://baike.baidu.com/view/75441.htm
kmp算法:http://baike.baidu.com/view/659777.html
遗传算法:http://baike.baidu.com/view/45853.htm
矩阵乘法:http://www.douban.com/group/topic/12416781/edit
Floyd算法:http://baike.baidu.com/view/14495.html
路由算法:http://baike.baidu.com/view/2276401.html
ICP算法:http://baike.baidu.com/view/1954001.html
约瑟夫环:http://baike.baidu.com/view/717633.htm
约瑟夫问题:http://baike.baidu.com/view/213217.htm
AVL树:http://baike.baidu.com/view/414610.htm
红黑树:http://baike.baidu.com/view/133754.htm
退火算法:http://baike.baidu.com/view/335371.htm
并查集:http://baike.baidu.com/view/521705.htm
线段树:http://baike.baidu.com/view/670683.htm
左偏树:http://baike.baidu.com/view/2918906.htm
Treap:http://baike.baidu.com/view/956602.htm
Trie树:http://baike.baidu.com/view/1436495.html
RMQ:http://baike.baidu.com/view/1536346.htm
LCA :http://baike.baidu.com/view/409050.htm
矩阵乘法:http://baike.baidu.com/view/2455255.htm
高斯消元:http://baike.baidu.com/view/33268.html
银行家算法:http://baike.baidu.com/view/93075.htm

*分类参照维基百科里算法的分类 http://zh.wikipedia.org/zh-cn/%E7%AE%97%E6%B3%95


经典算法:

递归:汉诺塔,全排列的生成等 
分治法:快速排序、归并排序等 
贪心法:背包问题、Dijkstra、Prim算法 
动态规划:0-1背包问题,各种子串问题 
搜索法:N皇后问题、迷宫问题 
随机算法:蒙特卡洛、随机快排等 
近似算法:TSP等方面相关算法等 
在线算法:K-服务器问题等 
应用方面的算法: 
K-Means、ID3等算法 

以上都是经典的不能再经典的算法,也是算法入门必读。


算法学习初级,中级,高级各应该掌握些什么内容?

  • 初级:排序、树、图…
  • 中级:动态规划、组合、NP…
  • 高级:专业领域(数据挖掘、自然语言处理、神经网络…)

下面列举了一些最常使用的算法,按照从基础到高级的顺序:

  • 数据结构:堆、栈、队列、Bag容器、并查集、优先级队列
  • 排序:选择排序、插入排序、快排、归并排序、堆排、基数排序
  • 查找:二叉查找树、红黑树、哈希表
  • 图论:深搜、宽搜、Prim、Kruskai、Dijkstra、Bellman-Ford、拓扑排序最短路径
  • 字符串:KMP、正则匹配、TST、哈夫曼、LZW压缩算法
  • 高级:B树、后缀数组、Ford-Fulkerson最大流

 

还有一些比较简单但在面试/实际中经常会用到的:
,

《 “一些算法方面的文章索引” 》 有 9 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注