高手问答第 220 期 —— 美女博士带你玩转 Python 算法

局长 发布于 2018/12/10 17:47
阅读 18K+
收藏 39

OSCHINA 本期高手问答(2018 年 12 月 11 日 — 12 月 17 日)我们请来了@zjgogogo 张洁为大家解答关于算法方面的问题。

张洁,计算机专业科班出身,获博士学位,《你也能看懂的Python算法书》作者之一,多年国有大型银行信息系统开发及管理经验,发表 SCI、EI 检索论文十余篇,研究兴趣集中在信息系统架构设计与优化、计算机图形学、算法设计与实现。

算法是编程的核心,就像一台计算机的 CPU,算法的好坏决定了一个系统的效率高低。

许多人认为学习编程就是学习最新的编程语言、技术和框架,其实计算机算法更重要。计算机语言和技术日新月异,但万变不离其宗的是算法。修炼好算法这门“内功”,再辅以新技术这些“招式”,才能独霸“武林”。这也是为什么像 Google 和 Facebook 这类大公司在面试中主要会考查算法问题的原因。

本期问答内容:

1. Python 算法学习的知识框架;
2. Python 算法学习的进阶之路;
3. Python 算法学习中的难点与困惑。

或有其它关于算法相关问题,也欢迎大家积极提问!

为了鼓励踊跃提问,@博文视点  会在问答结束后从提问者中抽取 5 名幸运会员赠予《你也能看得懂的Python算法书》一书。

购买地址:京东

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就算法方面的问题向@zjgogogo 张洁提问,请直接回帖提问。

加载中
1
tcxu
tcxu

我的理解:
    算法是在有限步骤内解决某一问题所使用的一套定义明确的规则,即计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。
    算法,可以用某一种计算机语言, 如 Java, C, JS, ... 或 Python 来实现。
    是否将本期定出的三点问答内容的措辞,稍作如下修改:每项内容的前面,都冠以 '用' 这个汉字? 这个修改旨在强调目的是掌握算法,掌握使用 Python 实现某一算法的技能:

  1. 用 Python 学习算法的知识框架;
  2. 用 Python 学习算法的进阶之路;
  3. 用 Python 学习算法中的难点与困惑。

The following three aspects will be clarified.

  1. The knowledge framework of Algorithm by Python,
  2. The way of advancing Algorith by Python, and 
  3. The  difficulties and challenges in mastering Algorithm by Python.


提问:

  1. 20 年前的 AI 教学,多用 Prolog, Lisp。如今,盛行使用 Python。这是为什么?
  2. 对于 "一农夫要带狼和羊白菜过河,但只能带一个过河" 的问题,如何通过 Python 实现 Prolog 的 算法? (我没读过你的或其它有关的著作,更是 Python 的新人, 即 刚自学 Python 半年。以上问题可能在正规的课堂上,早就解决了。)
xmhexi
xmhexi
回复 @zjgogogo :   前面看到一位同学提到 ”农夫带狼、羊和白菜过河“的问题,我感觉这个跟 ”梵塔“有点像,带有 递归,搜索,回溯的意思在里面。 如果人工去写if-else那就有”土办法“的味道了, 如果用 阿法狗 的迭代思路 来解决这类问题,可能更加有意思,甚至能解决类似的其它问题,比如那种”五个房子住五国人...谁喝饮料”的问题。
tcxu
tcxu
回复 @zjgogogo : 没错,与功能性的(functional)计算机语言,如 java,Python相比, prolog 是一种逻辑性的(logic)语言。
z
zjgogogo
作为计算机学习的后辈,说实话没有接触过20年前流行的Prolog,通过学习相关资料,说一下自己的浅见。
z
zjgogogo
1. 一方面,谈一下Prolog与Python之间的差异。Prolog是一种针对逻辑的陈述性语言,它用来描述事实和规则,定义好事实和规则以后,Prolog利用自身的逻辑推演机制进行推理获得结果,相当于用户所做的只是界定了最初的事实和事实之间的内部逻辑,求解的主动权在Prolog本身。举个通俗点的例子就是我要生产某种糖果,在流水线入口提供原材料以及各材料的配比,流水线能自动地生产出我要的糖果。
z
zjgogogo
而Python作为一门编程语言,只是实现用户目标的一种工具,用户自己设计解决目标问题的整体流程,之后用这种工具实现出来供计算机解析得到结果,举个通俗点的例子,我觉得像是出门旅游时的路线规划,用户自己把路线规划好之后,至于各目的地之间用什么交通工具,可以根据用户喜好自己决定,比如飞机或者高铁,就像实现同一个解决方案,可以选择java也可以选择python是相似的。
下一页
0
fys
fys

@zjgogogo 算法确实必修的"内功",编程语言就是"招式",各种"招式"各有长短,各有擅长的领域, Python 一直火了有几年了,现在各种宣传铺天盖地,我也接触了但没研究,语法有点蹩脚,我想问的是Python究竟比其它语言好在什么方,Python适合用在哪方面?

tcxu
tcxu
没错,算法是根本。为解决同一个问题,编程者往往基于自身的背景/计算机语言知识,选择不同的语言来解决问题。当然,知识面越宽,选择的空间就越大。"对于资深程序员,从之前熟悉的编程语言转型也是比较轻松"。这样看来,之前熟悉的编程语言,也是一种财富。正如张洁博士介绍,掌握了Python, 就多了一条解决图像处理、数据分析、人工智能等问题的捷径。
z
zjgogogo
在回答tcxu的问题时,我提到了一些自己对Python的看法,说它比其他语言“好”,感觉主要侧重于Python像是一种轻量级的面向对象的高级程序设计语言,上手快、类库多,能够用较小的学习代价实现自己想要的结果,在图像处理、数据分析、人工智能、游戏开发等各个方面都有广泛的应用,对于新手,可以快速获得实际编程的体验,对于资深程序员,从之前熟悉的编程语言转型也是比较轻松。
0
Kuangcp
Kuangcp
Python学习算法的优势是什么,只是语法简洁?
z
zjgogogo
楼上回答很对呀,我自己的感觉主要就是易上手和类库多两方面,其简洁和包容的特性使其获得了大批用户。
鞋底两万里
鞋底两万里
算法包丰富
0
miller-he
miller-he

@zjgogogo C的算法是上学时必学的,但最近对Python感兴趣,希望能抽中,拿到书看一下,学习

z
zjgogogo
祝得偿所愿~加油~
0
久永
久永

@zjgogogo 书中有没有这个问题的答案:这个算法为什么要用 Python 实现?为什么必须用 Python 实现?

海参拉面
海参拉面
回复 @zjgogogo : 没太关注过 不过听说 确实写起来比java 简单的多
j717273419
j717273419
回复 @zjgogogo : 貌似有一点,我觉得大家可能忽略了.现在it基本已经融入各个行业了。现在又是各种跨界的时代,汽车要联网,自行车也要联网。背后都是各种系统,算法,芯片之类的。python由于简单,能被很多人作为第一门上手的编程语言。有些人不是以编程吃饭的,所以他只需要学一门编程语言,把他想实现的功能,用这个语言实现了。比如一个生物学家,研究什么蛋白质啊,预测啊。顺手用了python。
z
zjgogogo
我的理解是,任何算法,可以用任何语言描述,这里不局限于计算机语言。换句话说,我们采用的编程语言只是实现我们算法思想的一种工具,所以不存在“必须”这种情况。之于我们选了Python作为本书的算法实现语言,是看中了它简洁明了,用户友好的特点,让大家的关注点在算法的思路上,不会被晦涩的编程语言的语法限制思路。
0
你为什么不吃药
你为什么不吃药

@zjgogogo python越来越火,逐渐和java拉小差距,自己本身是做java的,但是也会自学python的东西,python的开发方向有很多,python在哪个方向比较容易入门,逐渐的去深入。python中对于数学,算法要求比较高,对于初学者对于学习python有什么方面的阻碍,怎么学习效率会高。

tcxu
tcxu
回复 @zjgogogo : 一本优秀的教科书,首先要让读者读懂。《你也能看得懂的Python算法书》这本书,道出了优秀作品的初衷。愿张洁博士推荐的这本书,能为更多IT工作者铺路,通向未来IT大数据世界。
z
zjgogogo
好巧,我平时主要用的编程语言也是java~就我自身的经验来说,具备了java的编程经验,使用起python来障碍应该不多,入门的话建议您先了解一下python的基本语法,之后可以试着解决一些小问题~
z
zjgogogo
至于对数学和算法的要求高,我感觉不是这样的,因为python只是一种编程语言而已,它本身对使用者没有数学或者是算法的要求,只不过python具有强大的各类算法库可以方便用户使用,这两者不要混淆了哈~至于说到入门的点,建议从阅读《你也能看得懂的Python算法书》开始呀,看完一个算法,跟着书上的程序实现一下,应该是一种比较轻松的入门方式啦~
0
知行合一1
知行合一1

@zjgogogo  现在有百度ai平台,face++平台等等, 很多和基础的python算法重叠了,

如果用python算法,应用在自己公司项目中,应该怎么结合线上线下和本地的python算法包呢?

z
zjgogogo
您的这个问题比较宏观,我感觉应该具体问题具体分析~百度ai平台之类的,确实提供了丰富的接口可以供用户调用和选择,但是具体应用到公司的项目中,感觉涉及到商业利益,应该需要考虑商业合作的问题,所以具体实施过程中建议根据自己公司项目需解决问题的规模、各种限制条件等综合分析。
0
夜郎人

哎,只能呵呵,也只是蜻蜓点水,安装、示例运行截图都发上去,这样的书对于新手还行,要真从中学到东西帮助不大。

z
zjgogogo
我们的初衷就是给读者贡献一本轻松有趣的、深入浅出的算法书,用心读,会有收获的~
0
glassfunct
glassfunct

为什么还是一头秀发?

大海的贝壳
回复 @玫友人 : 学位高头发长
kioijh6
kioijh6
毕竟学位摆在那呢
z
zjgogogo
你猜~
不会飞翔的鸟
或许假发
0
知行合一1
知行合一1

@zjgogogo  

并行算法计算,20个用户同时访问深度图像处理算法,应该怎么架构算法??
z
zjgogogo
您好,我没有这方面的处理经验,所以不敢轻易给出建议,请您跟专业人士讨论相关问题吧~
返回顶部
顶部