大话程序员可用的算法

66
程序员与算法

Upload: jeffz

Post on 10-May-2015

2.538 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: 大话程序员可用的算法

程序员与算法

Page 2: 大话程序员可用的算法

什么是算法?

Page 3: 大话程序员可用的算法

什么是算法

Page 4: 大话程序员可用的算法

什么是算法

Page 5: 大话程序员可用的算法

什么是算法

Page 6: 大话程序员可用的算法

什么是算法

Page 7: 大话程序员可用的算法

什么是算法

Page 8: 大话程序员可用的算法

什么是算法

把大象装进冰箱里!

Page 9: 大话程序员可用的算法

什么是算法

???

把大象装进冰箱里!

Page 10: 大话程序员可用的算法

什么是算法

Page 11: 大话程序员可用的算法

什么是算法

把冰箱门打开

Page 12: 大话程序员可用的算法

什么是算法

把冰箱门打开把大象放进去

Page 13: 大话程序员可用的算法

什么是算法

把冰箱门打开把大象放进去把冰箱门关上

Page 14: 大话程序员可用的算法

什么是算法

把冰箱门打开

囧,原来是这样

把大象放进去把冰箱门关上

Page 15: 大话程序员可用的算法

什么是算法

Page 16: 大话程序员可用的算法

什么是算法

帮用户统计这个月的净收入

No  Command  or  Program……Compile  Error…..

Page 17: 大话程序员可用的算法

什么是算法

Page 18: 大话程序员可用的算法

什么是算法

foreach(day  in  thismonth){          sum  +=  day.in  –  day.out;}Print(“本月净收入是”+sum+”元”)

Page 19: 大话程序员可用的算法

什么是算法

foreach(day  in  thismonth){          sum  +=  day.in  –  day.out;}Print(“本月净收入是”+sum+”元”)

本月净收入是12750元

Page 20: 大话程序员可用的算法

什么是算法

Donald  Knuth版定义

Page 21: 大话程序员可用的算法

什么是算法

Donald  Knuth版定义算法的特征输入

输出

有穷性

确定性

可行性

Page 22: 大话程序员可用的算法

什么是算法

winter版定义

Page 23: 大话程序员可用的算法

什么是算法

winter版定义算法是教会一个解决不了某个问题的人解决这个问题的一系列可行步骤步骤不能无限(累死)每一步都必须可行每一步都不能有歧义

Page 24: 大话程序员可用的算法

什么是算法

程序=数据结构+算法

Page 25: 大话程序员可用的算法

什么是算法

程序=数据结构+算法

=>  算法=程序-­‐数据结构

Page 26: 大话程序员可用的算法

什么是算法

程序=数据结构+算法

=>  算法=程序-­‐数据结构

程序里除了数据结构之外的部分就是算法

Page 27: 大话程序员可用的算法

算法有什么用?

Page 28: 大话程序员可用的算法

算法有什么用

Page 29: 大话程序员可用的算法

算法有什么用

算法无用?

Page 30: 大话程序员可用的算法

算法有什么用

算法无用?算法好吃吗?

Page 31: 大话程序员可用的算法

算法有什么用?

Page 32: 大话程序员可用的算法

算法有什么用?

谁在工作中用过圆的面积公式?

Page 33: 大话程序员可用的算法

算法有什么用?

谁在工作中用过圆的面积公式?谁在生活中用过两个3位数乘法?

Page 35: 大话程序员可用的算法

算法有什么用?

Page 36: 大话程序员可用的算法

算法有什么用?

一个场景:当我们需要一个新功能时……

Page 37: 大话程序员可用的算法

算法有什么用?

一个场景:当我们需要一个新功能时……程序员A:上网找”XXX如何实现”的文章

Page 38: 大话程序员可用的算法

算法有什么用?

一个场景:当我们需要一个新功能时……程序员A:上网找”XXX如何实现”的文章程序员B:想清楚XXX如何实现,再上网找文档为什么大公司喜欢要会算法的程序员

Page 39: 大话程序员可用的算法

算法有什么用?

一个场景:当我们需要一个新功能时……程序员A:上网找”XXX如何实现”的文章程序员B:想清楚XXX如何实现,再上网找文档为什么大公司喜欢要会算法的程序员

Page 40: 大话程序员可用的算法

算法有什么用?

一个场景:当我们需要一个新功能时……程序员A:上网找”XXX如何实现”的文章程序员B:想清楚XXX如何实现,再上网找文档为什么大公司喜欢要会算法的程序员

•重复性劳动

创造性劳动

Page 41: 大话程序员可用的算法

算法有什么用?

Page 42: 大话程序员可用的算法

算法有什么用?

你曾经”实现”过一个功能吗?

Page 43: 大话程序员可用的算法

算法有什么用?

你曾经”实现”过一个功能吗?调用别人的库!=你实现了这个功能

Page 44: 大话程序员可用的算法

算法有什么用?

你曾经”实现”过一个功能吗?调用别人的库!=你实现了这个功能当”拿来主义”变成”完全拿来主义”

Page 45: 大话程序员可用的算法

算法有什么用?

你曾经”实现”过一个功能吗?调用别人的库!=你实现了这个功能当”拿来主义”变成”完全拿来主义” “重新发明轮子”与”重新造轮子”

Page 46: 大话程序员可用的算法

算法与问题

Page 47: 大话程序员可用的算法

算法与问题

算法这门课递推法递归穷举法贪婪法分治法动态规划法迭代法

Page 48: 大话程序员可用的算法

算法与问题

算法这门课递推法递归穷举法贪婪法分治法动态规划法迭代法

Page 49: 大话程序员可用的算法

算法与问题

算法与问题

Page 50: 大话程序员可用的算法

算法与问题

算法与问题

Page 51: 大话程序员可用的算法

算法与问题

算法与问题

Page 52: 大话程序员可用的算法

算法与问题

Page 53: 大话程序员可用的算法

算法与问题

动态规划问题与子问题递归、数学归纳法递归方法的问题动态规划备忘录

Page 54: 大话程序员可用的算法

算法与问题

Page 55: 大话程序员可用的算法

算法与问题

搜索算法搜索算法问题集上的搜索深度优先,广度优先变种反向搜索两端搜索最大损耗搜索A算法从A到A*

Page 56: 大话程序员可用的算法

算法与问题

智能算法模拟褪火遗传神经网禁忌搜索蚁群

Page 57: 大话程序员可用的算法

算法与问题

智能算法模拟褪火遗传神经网禁忌搜索蚁群

Page 58: 大话程序员可用的算法

算法和数据结构

Page 59: 大话程序员可用的算法

算法和数据结构

Page 60: 大话程序员可用的算法

算法和数据结构

数据结构对算法的影响一个例子:无序的数组  vs  有序的数组数据结构决定算法

Page 61: 大话程序员可用的算法
Page 62: 大话程序员可用的算法

排序结构排序二叉树AVL树、B+树、红黑树……

有序数组二分堆

Page 63: 大话程序员可用的算法
Page 64: 大话程序员可用的算法

Hash结构 A  Joke:遇到不会的面试题怎么办 Hash表 Hash树字典树

Page 65: 大话程序员可用的算法

附记:我的一次面试

Page 66: 大话程序员可用的算法

Q  &  A