说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

《算法的乐趣》作者王晓华访谈:多看、多做、多想是秘诀

HTML文档下载 WORD文档下载 PDF文档下载
王晓华是一位热衷于算法研究的程序员,他是CSDN算法专栏的超人气博主,也是《算法的乐趣》一书的作者。近日,笔者采访了王晓华,请他分享算法的经验之道。

王晓华是一位热衷于算法研究的程序员,他是CSDN算法专栏的超人气博主( 博客),也是《算法的乐趣》一书的作者。2005年毕业于华中科技大学,目前在中兴通讯上海研发中心从事光纤接入网通讯设备开发,担任EPON(以太网无源光网络)业务软件开发经理,参与开发的PON设备在全球部署过亿线,为数亿家庭提供宽带接入服务。 

日前,笔者对王晓华进行了采访,请他分享专研算法的乐趣之道。


王晓华

CSDN:请先做个自我介绍、所在公司以及目前所负责的领域。

王晓华:我目前在ZTE上海研发中心从事软件开发相关工作。我们开发的产品是无源光网络(PON)设备,在网络设备领域中,我们开发的设备属于接入网设备,也就是常说的“网络的最后一公里”。光接入技术目前已经是接入网的主流技术,未来的家庭宽带建设,比如FTTH、FTTB,都依赖于光接入技术的不断发展和革新。当前,下一代PON技术(NG-PON2)的标准正在制定过程中,NG-PON2标准将提供单纤40G bps的下行带宽,千兆光纤入户将成为现实,到时候只有百兆接口家用路由器将被淘汰,无线传输的速率也将水涨船高。

CSDN:是什么原因促使你对算法感兴趣的?又是什么原因让你坚持把算法做下去的?

王晓华:刚开始我对算法和软件没有概念,觉得编程序就是为了应付作业。后来因为学习表形码输入法,就写了一个程序把Windows格式的表形码码表文件转换成UCDOS支持的码表文件格式,这个程序只用了几分钟就完成了十几万条记录的转换,给我很大的震撼,让我觉得这东西不只是交作业,还可以做一些有用的事情,从而开始对编程感兴趣,从简单的排序算法开始,逐渐接触了更多有用的算法,进而对设计算法产生兴趣。

研究算法其实是一个很枯燥的过程,常常一个人在计算机前面一坐就是一天,其他人都很难理解这种行为,没有兴趣是坚持不下来的。上学的时候也热衷于参加各种算法比赛,填鸭式的背很多东西,记算法的模式,搞得很辛苦,也没取得很好的结果。当时以为这就是算法的意义,搞得几乎对算法失去了兴趣。读研究生的时候想做一个MP3播放器,为了实现均衡器和频谱的功能,找了很多资料,最后发现了离散傅立叶变换算法,小小的算法蕴含了这么多的意义在里面,于是对算法又燃起了兴趣。后来有学习了一些很有意思,但是都很实用的算法,比如A*寻径算法、棋类游戏的博弈树算法等等,渐渐地开始把兴趣放在更有实用意义的实用类算法上,开始研究针对各种现实问题的算法设计和实现。解决的实际问题越多,分析问题、解决问题的能力就越强,“玩”算法的兴趣就越大。

CSDN: 《算法的乐趣》这本书的思路是怎样的?对读者而言如何学习这本书,你有什么建议?

王晓华:这本书从一开始就顺着培养兴趣的思路来策划的。市面上已经有很多算法设计的书了,或浅显易懂,或深不可测,如果沿用类似的讨论再写一本完全没有意义。而我的“算法系列”专栏中刚好已经介绍了很多有意思的算法,于是就以此专栏为基础,补充了一些有趣的专业类算法和实用类算法,构成了本书的主要结构。每一个有趣的算法都展示了从问题的提出,到设计模型,最后得到能解决问题的算法实现的完整过程,将算法设计的三个关键问题融入到整个过程中,使得读者在得到一个趣味算法的同时,也学习了算法设计的整个过程。

本书各个章节之间没有前后关系,可以从任意一个感兴趣的章节开始看这本书。对读者而言,我建议先系统看完前三章,然后再挑选感兴趣的章节开始。在图灵社区可以下载本书的全部源代码,任何问题都可以在源代码中找到答案。

CSDN:什么是算法?最常见的算法有哪些?可否就其中一个给大家举个示例。

王晓华:我理解的算法的意义就是解决问题,从这个角度看,我将算法分为专业类算法、通用类算法和实用类算法三类。专业类算法通常都有一些坚实的数学理论、物理理论或其他理论作为理论支撑,比如离散傅立叶变换算法、RSA算法、AES加密算法、各种曲线拟合算法、插值算法、牛顿迭代法以及计算机图形学中的各种图形生成算法、消隐算法等等。专业类算法通常在一些专业领域内广泛应用,经过多年的研究和技术积累,普遍形成了各种固定的高效算法实现,很多情况下都可以像函数库一样直接拿过来用。

通用类算法也有相应的理论支撑,算法的套路是固定的,但是算法的实现要视具体的问题而定。此类算法的例子也比较多,比如退火算法、蚁群算法、遗传算法、BP神经网络模型学习算法(误差反向传播算法)等等。此类算法虽然套路固定,但是不同的问题有不同的实现方式。以遗传算法为例,针对不同的问题要设计不同的遗传编码格式,遗传编码格式不一样,对应的基因交叉和变异算法的具体实现自然也不一样,但总的来说,还是按照遗传算法的套路进行。通用类算法应用领域更广泛,上面提到的几种算法都是常用的最优化求解算法(随机搜索算法),在机器学习、人工智能和虚拟现实等领域都可以看到这些算法的身影。

实用类算法往往是针对特定的问题设计的算法,用于解决某个或某种类型的问题。有时候解决问题的算法很多,但是受重视的往往是公认的效率最高的算法。比如稳定匹配问题,Gale-Shapley 算法就是公认的最好算法。二分匹配问题,大家会首选匈牙利算法。Pierre Dellacherie 算法是俄罗斯方块游戏中最好的One-piece评估算法。除了这些著名的算法之外,任何人为解决某个问题而设计的算法也可以归为实用类算法,比如本书提供的求解“三个水桶等分8升水问题”的算法和“爱因斯坦的思考题”的算法。设计针对具体问题的实用类算法是衡量一个程序员水平高低的重要因素,也是程序员需要重点关注的问题。

CSDN:目前中兴通讯用到了哪些算法?能不能向读者详细介绍下该算法?

王晓华:中兴通讯的产品线很长,甚至包括太阳能发电和无线充电,我还真不知道这些产品中到底都用到了哪些算法。就我所涉及的产品来说,很多基本的算法都会用到,既有各种专业算法,也有为解决特定问题而设计的通用算法。比如线性表的排序和查找就用到了快速排序算法和二分查找算法,数据一致性校验用到了CRC算法,还有本书中提到的环形队列算法。PON网络的特点是下行数据是广播到所有终端设备上的,为了数据安全,标准定义了一套密钥交换算法,同时规定了实际加密数据采用了三重扰动算法和AES加密算法。

CSDN:从一名资深程序员到《算法的乐趣》的作者,你的学习秘诀是什么?会通过哪些方式来提升自己的专业技能?

王晓华:其实没有什么秘诀,就是多看、多做和多想。多看就是多看书,多看各种优秀算法的实现代码。多做就是多写代码,看懂算法的实现原理和写出正确的算法实现之间还是有一道很宽的槛儿,研究一个算法,要到能正确写出算法实现为止,而不是看懂就算了。多想就是多思考,为什么这个算法比那个算法高效?这个启发函数为什么要这样设计?多思考可以培养举一反三的能力。

CSDN:未来的下一步计划是什么?有哪些难点需要去克服?

王晓华:这个还真一时不知道从何说起,先不回答了,抱歉。

CSDN: 目前,你常用的编程语言有哪些?在你看来还有哪些语言比较热门?

王晓华:我目前用的编程语言是C/C++和Lua,偶尔用用Java。2008年听Ivar Jacoson的演讲,他讲了个笑话,形容软件行业就像是时尚业,一天一个潮流:十五年前我们都讨论OO,十年前我们追的是组件、UML和UP,五年前变成了RUP和CMMI,两年前流行XP,现在是Scrum。但是他的一句话我很认同,那就是这些都是好东西,但是没有任何一种是可以解决你的全部问题的银弹。我对当今比较流行的编程语言的看法也是这样,存在就是有道理,这些编程语言没有好坏之分,但是有各自擅长的领域,要合理的使用它们。

CSDN:你是从什么时候开始接触CSDN的?对CSDN有什么建议吗?

王晓华:我从2001年开始就是CSDN的注册用户了,刚开始是泡论坛,后来写博客。建议的话我觉得CSDN要让博主们能够通过博客获得收益,无私的奉献是一种热情,但是热情过后就什么都没有了。之前CSDN的博客是可以嵌入广告的,我就从嵌入广告中获得了十几美元的收益,后来都取消了,我看到很多人就把博客迁走了,或者申请了独立的域名。CSDN的博客和技术文章要繁荣,就要有一个共赢的模式。

VB用API函数控制光驱的开关 VB用注册表保存数据(VB函数篇) 有关Tray系统盒的VB API函数 在VB中调用API函数动态改变及恢复屏幕设置 在VB中控制Ctrl+Del+Alt键 在VB中使用API函数 (之二) 在VB中使用API函数 (之三) 在VB中使用API函数 (之四) 在VB中使用API函数 (之五) 在VB中使用API函数 (之一) 在VB中用API实现多媒体 VB怎样用VB在应用程序中调用API VB怎样在DELPHI中使用API函数 指定文件夹-VB资料 VB5中注册控件三法 Bug:维护 Internet Transfer Control 之 Username 及 Pass VB对低层硬件访问控制 HitTest的妙用 -VB资料 ListBox项的控制-VB资料 VB 6.0中类聚集关系的实现 VB6编程中如何获取硬盘分区信息 VB的坐标系统综述 VB调用C程序动态链接库的方法 VB对低层硬件的访问控制 VB软件开发中的错误捕获及处理技术 VB中Combo的一种输入检查制约方法的实现 VB中Winsock控制的UDP协议的使用 VB中的时间处理问题 Windows操作平台下CGI的实现 -VB资料 按下某组键(HotKey)便执行某程式-VB资料 把所有的字体名称放到 ComboBox -VB资料 如何重新定义表中字段的默认值 如何把 网页的html代码 保存到 Sqlserver数据库 ntext(16) 字段中 把ACCESS数据库转换为SQL SERVER 2000数据库后里面的“自动编号”字段该怎么样进行处理? 求一本linux的书。有高分的 我的显示器亮度不够,想用软件提高亮度,哪位大侠知道应该怎么做? 请JFC的大侠指点 ▲▲▲高分求网址!!!哪有好的JBuilder 7.0 或8.0的学习书,要电子版的(chm格式,或图书格式都可以)▲▲▲ 写给 net_lover(孟子E章) 的问题。 请各位帮忙设计一个product类好吗?谢谢 请教高手,如何在JBuilder中使用windows中的ocx,dll 关于clientdataset的PacketRecords属性问题!!!!! 急!!!!!!! 电话公司的问题 一个关于线程的简单问题(急) 急~请教C里的一个函数 oracle如何插入中文 DirectDraw的几个问题,请高手进入! 请高手指教一个JLabel的问题 请问什么方法可以取得某控件在浏览器中的位置 一个关于adodc控件莫名其妙的问题,5555555急死我了,解决马上给分,信誉之上! 焦点在Datagird跳转....在线等待 为什么xml便于显示? 移动硬盘问题..... 请教:窗体关不掉,怎么处理? 再问一个问题 面试题,求解! “桃李春风结子纨“,猜一姓 求购类似于联众的网络棋牌游戏 ◆◆◆ 网易的免费邮箱中收到的信件,怎样设置,能直接在outlook express中收信? 在DLG工程中我想在对话框上画一位图,请问怎么取得显示设备的CDC?/ 请问一个数据库查寻的问题 鼠标钩子的小问题 ▲▲▲▲▲高分求网址!!!▲▲▲▲▲ 像Word一样的功能 CSDN的好兄弟们,求助!!!选择点击DATAGRID中的行改变Image图片的问题。 请问如何通过asp将excel表格的内容导入到oracle数据库中。100分送上,谢谢。 大家来看看这两个病毒呢w32.Randex和Backdoor.Roxy!!! 下拉菜单出错???(在线等候!--) 怎样在启动98时不让计划任务不启动? 谁偷了张飞的羽扇?(zt) C#树操作 想在客户端页面控制扫描仪,并将图象上传到服务器,up有分。 到出Excel表 打开foxpro文件时需要找索引文件,如何取消这种情况? ????????????????????csdn你凭什么改我的E-mail?????????????????? 来看看 请教回溯问题(N皇后) 紧急求救,在数据库中取已存的图片问题 请问怎么安装mysql的驱动程序和mysql++? 重分求解技术难题的解决方案 给定窗体的句柄,如何知道该窗体是否有状态栏? 请教VirtualAlloc和new的区别何在?有什么优点? 交叉互换发生在哪个时期? 当所有人都否定他时,我还要坚持吗 当一个人不断否定历史,但最终发现否定的是你自己可以从那个角度进行写作~ 基因的自由组合和交叉互换各发生在什么时期 交叉互换是否需要DNA连接酶? 当自己的理想被别人否定了?梦想真的不重要么` 中山狼比喻什么? 别人否定你自我感觉很好的事,怎么反驳他大神们帮帮忙比如我画了一副画,自我感觉很好,就拿来放东西上装饰,可别人说 我一看你这画就我就知道你没有画画底蕴.这样我搞的我很尴尬 也不知 当你总是被人否定时,你会怎么办? 中山狼故事寓意 中山狼指什么? “各地大学生生活费参考标准”引发网络汪洋:中国优先推进西部大开发的决心不贝克汉姆千金参加足球训练 获得全家助美媒:巴总理访美系关系缓和前奏 众多中国好声音第二季八学员即将签约与名次中国好声音新剧三亚开拍 吴莫愁赞三亚澳大利亚两火车遭电线缠住 1200名酝酿八旬六连任 麦凯恩欲2016年竞俄普斯科夫军事训练场发生爆炸 致6死中联重科午后跌幅加深 H股股价跌超6多项民调显示美国人质疑政客能力 看淡我们变成现在的样子是不是别人给的?俄罗斯外长说俄韩不能接受朝鲜有核国家爱尔兰VS瑞典首发公布 伊布成全场最高清:小白助攻皮克绝杀 西班牙1 0钢铁防线 西班牙保持欧洲杯599分钟幸福各有不同“营养水果保持者”牛油果应该怎么吃?帮帮我孩子算未来呗果然还是呆在宿舍好好好的一个屁看来我那么丑,全世界都知道了重生之光辉岁月重回2004三千世界垃圾场道心修神传异次元游戏鉴宝大师韩娱之演技大师我家古宅连着异界战场鼎镇九州末日之宠物小精灵午夜打更人3D奇幻印象体验馆旅游信不信由你博物馆旅游唐寅园旅游苏州古运河旅游狮子桥旅游厦门海底世界旅游鼓浪屿珍奇世界馆旅游鼓浪屿老厦门故事馆旅游鼓浪屿音乐厅旅游万石植物园旅游南普陀寺旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘