韩顺平_PHP程序员玩转算法公开课(第一季)01_算法重要性_五子棋算法_汉诺塔_回溯算法_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/

课程说明:算法是程序的灵魂,为什么有些网站能够在高并发,和海量吞吐情况下依然坚如磐石,大家可能会说: 网站使用了服务器集群技术、数据库读写分离和缓存技术(比如memcahced和redis等),那如果我再深入的问一句,这些优化技术又是怎样被那些天才的技术高手设计出来的呢? 我在上大学的时候就在想,究竟是什么让不同的人写出的代码从功能看是一样的,但从运行效率上却有天壤之别, 就拿以前在软件公司工作的实际经历来说吧, 我是做服务器的,环境是UNIX系统,功能是要支持上千万人同时在线,并保证数据传输的稳定, 在服务器上线前,做过内测,一切OK,可实际上线后,服务器就支撑不住了, 公司的CTO(首任sina技术总监) 花了3天时间对我的代码进行优化,再次上线,坚如磐石。那一瞬间,我认识到程序是有灵魂的,就是算法。如果你不想永远都是一个代码工人,不想当孬种程序员,那就花点时间来研究一下算法吧!
 本次公开课为六天,着重讲解算法的基石-数据结构。

为照顾更多的朋友,本次公开课分两个阶段, 每个阶段相对独立,讲解的顺序也考虑到知识的先后顺序,你可以选择自己感兴趣的课程来收看。学习完后,你可以处理编程中比较复杂或是比较变态的需求,让你快速掌握常见算法,建立编程思想。

对算法的重要性,举的一些例子:
韩老师在工作中遇到的一个问题,有多个人登录的时候,我们怎么去处里上千万人登录的时候,用什么方案去处里,用结构体来解决...

图片大,在新窗口中打开图片,观看完整图片。

数学对我们编程来说,重不重要?
看你站在什么样的层次来说,如果你应用程序开发,对数学要求不高
但是,如果你开发系统软件,比如(搜索/识别软件[图像,语言识别]/操作系统...)对数学要求高
建模...大量数学模型

我是学习C++的,请问对QT和MFC的看法,前景什么的

记住:打好基础,大有可为!

学习IT,不管是java,php,c#,对学历要求不高。
学历不是问题,能力是问题

★什么是算法?
程序=数据结构+算法
说:我们使用数据结构(int->数组、链表、队列、二叉树、散列...)+一些逻辑(if,forwhile...)=完成某个任务

思考:为什么有些网站可以支持千万以上人来访问?点击科技和新浪工作。(产品竟开协同软件|新浪邮件)->问题?我在公司内部测试一切ok!登录时候解决办法:首任sinaCTO->三天优化。结论:程序是有灵魂,就是算法
百度/google/腾讯/淘宝=>如果不想当一个coder,你一定看算法。[设计模式]

★算法有什么用,在什么地方用?
提出几个实际的问题?
<?php
$str="abc,ytkhello,abc,北京";
//echo str_replace(‘abc‘,‘韩顺平‘,$str);
?>
你能不能做一个字符串这样的一个数据结构,可以做成:
试写出用单链表表示的字符串及字符串结点类的定义,并依次实现它的构造函数、以及计算串长度,串赋值、判断两串相等,求字串,两串连接、求字串在串中位置等7个成员函数。
要求每个字符串结点只存放一个字符。

再举一个例子,说明数据结构的重要性

五子棋里有很多关于算法的
1.下子算法
2.判断胜负算法
3.悔棋算法
4.存盘与读取算法
5.其他算法

看几个实际编程中遇到的问题
约瑟夫问题(丢手帕问题)[最常见的一个笔试题]
1.Josephu问题
Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。
提示:用一个不带头结点的循环链表来处理Josephu问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除,算法结束。

使用环形链表解决上面的问题

其它算法问题:
邮差问题
最短路径问题
汉诺塔
八皇后问题

汉诺塔,是一个经典试题(递归问题)

总而言之,算法是很重要,是程序的灵魂。

时间: 2024-10-19 19:39:45

韩顺平_PHP程序员玩转算法公开课(第一季)01_算法重要性_五子棋算法_汉诺塔_回溯算法_学习笔记_源代码图解_PPT文档整理的相关文章

韩顺平_PHP程序员玩转算法公开课(第一季)02_单链表在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/链表——最灵活的数据结构链表用来解决复杂的问题和算法是很方便的. 内容介绍1.什么是链表2.单向链表3.双向链表4.环形链表5.使用环形链表解决约瑟夫问题 链表——什么是链表链表是有序的列表,但是它在内存中是分散存储的. 链表无处不在,比如在操作系统中,文件和文件之间,文件块和文件块之间,是靠链表链接起来的.使用链表可以解决类似约瑟夫问题,排序,索引,二叉树,广义表... 链表——单链表的快速入门使用head头的单向链表

C#学习笔记——MDI窗体(多文档界面)

1.设置父窗体: 如果要将某个窗体设置为父窗体,只需将该窗体的IsMdiContainer属性设置为True即可. 2.设置子窗体: 通过设为某个窗体的MdiParent属性来确定该窗体是那个窗体的子窗体. 语法如下: 1: public Form MdiParent{get;set;} 3.排列MDI子窗体: 语法如下: 1: public void LayoutMdi(MdiLayout value) value:是MdiLayout的枚举值之一,用来定义MDI子窗体的布局. 枚举成员 说明

Android程序员职业规划免费公开课

[课程时间] 4月14日20点 [课程入口] http://open.itcast.cn/java/25-200.html?nch [课程主题] 从就业.升职到发展,从个人.公司到行业,多角度的剖析,全方位的解读,让你清晰地认识Android要如何发展才是最好的. [课程知识点] 1.移动互联网的发展 2.Android的发展 3.我们的机会 4.与移动互联网的共同成长

算法之刻画指定尺的刻度由次引发的简单汉诺塔代码实现

1.刻度尺递归优美实现 1 # 画英式标尺,刻度线长度为 n 的 m 英寸标尺 2 # 对于开始 L = 0,直接绘制 该刻度 3 # 那么一般的情况有, 4 # 中央刻度 L >= 1 时 有 5 # 一个中央刻度为 L-1 的刻度间隔 6 # 一个中央刻度为 L 的间隔 7 # 一个中央刻度为 L-1 的间隔 8 # 设计思路: 分三个功能函数,一个构建整体的 刻度尺, 一个接受画几条刻度线, 一个输出 应该画几条刻度线 9 10 def draw_line(tick_length, tic

[Linux] PHP程序员玩转Linux系列-nginx初学者引导

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 翻译自官网文档 nginx有一个master进程和很多个worker进程.master进程的主要目的是读取和执行配置文件,维持work

Ionic2文档整理

来自:Rainey's Blog 原文地址:http://rainey.space/2016/04/06/Ionic2_Chinese_Document/ Github:https://github.com/XueRainey/ionic2 ionic2文档整理 发表于 2016-04-06   | 本文档不是英文文档的完全翻译,是个人的阅读笔记.如果阅读后有不明白或者不懂,请移步英文版阅读.如果本文有错误,请在本页末尾留言或者提交Issues. 您可以点击小标题跳转到相应的ionic2英文文档

NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)

Nodejs学习文档整理 http://www.cnblogs.com/xucheng/p/3988835.html 1.nodejs是什么: nodejs是一个是javascript能在后台运行的平台,具体来时只是使code javascript能在后台运行,因为不在浏览器中运行所以不涉及到document等对象.(Mozilla 则指出 JavaScript 由Core JavaScript 和 Client JavaScript 组成.) 2.nodejs如何运行javascript: n

【运维者说】程序员玩跨界,错在运维人员

在很多交流场合,我们或多或少能听到有小伙伴抱怨运维岗位工作没有得到老板或者公司同事的认可,这怪谁呢?私以为只能怪运维岗位的各位同行,为什么这么讲呢?我这个攒了很久的大招,今天终于可以释放出来了. 恰逢看到田逸老师写的博客<程序员,请不要抢系统管理员的饭碗>以及文章下面各位同仁的评论内容,很多小伙伴基本上是从一个系统管理员的角度出发说出了安全问题的原因是程序员不应该这么做而这么做了,那程序员应该怎么做,他们知道吗?从这篇博客中描述的安全问题出发,田逸老师作为系统管理人员排查问题的思路非常清晰,对

[Linux] PHP程序员玩转Linux系列-lnmp环境的搭建

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 在平常的工作中,我作为PHP程序员经常要搭建一下环境,这个环境就是Linux系统下安装nginx,php,mysql这三个软件,对软件进行配置,然后在浏览器上能够正常打开运行查看项目.CentOS中安装软件有好几种方式,我经常用的是包安装方式,因为这种非常简单一句命令就能安装成功,这也是与windows下安装软件最大的不同点.包安装方式就一个关键单词就是yum. 解决找不到nginx包的问题 我先安装一下web服务器nginx,按好这