分而治之、各个击破是兵家常用的策略。分解问题就是分治法。兵法讲了分治法的“道”,而计算思维介绍分治法的“术”,也就是具体什么是分解问题,怎么分,怎么表示,分了以后怎么一步步地做,最后怎么正确地解决问题。

今天,我将介绍计算思维中看似最简单但其实最强大的概念:分解问题。在图1—1中,大家可以看到,分解问题是计算思维这栋房子的“屋顶”。问题被分解后,各类算法才能上阵发挥作用。

计算机既聪明又强大,它可以完成登月、自动导航、构建VR之类的特别有意思但人类还做不好或做不到的事情,它还可以下围棋,打败世界冠军。但是,计算机做到这些事,凭的是它的速度超快。计算机没有办法“一览众山小”,它只能一棵树一棵树地看,一朵花一朵花地数。计算机最核心的部件做的是极其严格、死板、正确、简单的操作。从简单操作到强大应用,计算机所使用的方法就是分解问题。

计算机能把复杂的大事情分解成多个简单的小事情,把一个大问题分解成若干小问题,然后逐个击破。分解问题听上去简单,但是我们需要用清晰的逻辑和流程来表现它,计算机才能理解和执行任务。

炒鸡蛋

举个例子,菜谱使用的就是一种标准的分解问题的表现方式,一个不会做菜的人看到菜谱可以一步步炒出一道菜。计算机算法就像菜谱,任何一台计算机接受一个算法都可以同样地完成一项任务。

下面我们就先用简单的菜谱来举例,

分解问题AI和未来计算排序算法分类算法搜索算法递归算法数据结构抽象模式识别优化介绍分解问题中的两个概念:串行和并行。

试想,如果世界上真有炒鸡蛋的菜谱,它会是怎么样的?它会分为以下几步:(1)准备原料,(2)炒蛋,(3)盛到盘子里。注意,这三步需要一步一步地进行,顺序不能颠倒,不能先盛盘再炒蛋。顺序执行,就是计算机语言所说的串行。

这三个步骤也可以用一个非常简单的流程图(见图1—3)来表示。对于串行的事情,做事只能按照给定的先后顺序来。

分解问题不限于一个层次。大步骤可以再继续分解细化。比如,如果一个人还是不理解怎么炒蛋,那么我们可以把上面的步骤细化,第二步“炒蛋”可以再次分解为:(2.1)把油下锅,(2.2)把蛋下锅,(2.3)翻炒5分钟。这三个小步骤也需要串行(见图1—4)。

那什么是并行呢?在第二步的同时,也就是炒蛋的同时,我们可以把盘子准备好,这就叫并行。简单地说,并行就是在同样的时间里同时做多件事。在图1—5所示的流程图里,并行被表示为不同的通道。大家可以看到,并行的两个通道上的任务2和2A可以同时做,但是2和2A必须都发生在任务1之后,任务3之前。

那么分解问题要分解到什么程度呢?我们再用上面的菜谱来打比方,把做菜的过程分解到看菜谱的人看到以后会做就行了。比如,拿盘子这件事一般人都会拿,至于这个人是用左手去拿,还是用右手去拿,写菜谱的人可以不管。只要那个人能准时在炒蛋完成的时候把盘子拿来就行了。

拿盘子这个操作,就等同于我们后面要大篇幅介绍的算法。这件事我们一看就会,还可以请别人代做。分解问题,最终要把问题分解成可以用一台计算机使用算法来解决的问题。

说到这里,你可能会感到疑惑,炒蛋的步骤可以分解,可你还是不知道计算机是怎么完成复杂任务的。其实,计算机实际做的事情确实要更复杂、更难、更耗时间,要求也更高。但复杂的任务也需要先进行分解,基本思路还是一样的。我们来看看短视频推荐和无人驾驶。

短视频推荐

记得前面我们简单介绍过抖音个性化推荐短视频吗?我们先来看一下,从用户的角度这是一个什么样的使用场景。

短视频应用最核心的功能是自动给用户推荐短视频。比如抖音这款短视频应用,产品界面主要是全屏单一短视频沉浸式的体验,打开应用程序,用户直接看到一个推荐的短视频自动开始播放。如果用户对当前视频感兴趣,视频自动完成播放,然后循环播放,用户可以上滑看下一个视频;用户如果对当前视频不感兴趣,也可以很容易地上滑翻看下一个视频。短视频的这种产品设计主要迎合了用户的下面几个使用习惯。

(1)基于推荐。把系统认为用户可能最喜欢的视频直接推荐给用户,让用户从打开程序到开始观看视频的路径最短。

(2)极简操作。用户喜欢看就沉浸其中,因为视频以不到一分钟的短视频为主,用户每看一个视频耗时很短,可以上滑翻看下一个,随时看随时刷。

(3)下一个视频的惊喜感。上滑看下一个视频,是一个非常自然的简单操作,且用户总有一种打开下一个看看是什么的惊喜感。加上短视频平台应用了AI算法,随着用户刷的视频增多,根据用户针对每一个推送视频的观看行为(看了多久、是否看完、点赞、关注、转发等),短视频系统对用户更了解,系统就能更准确地预测用户的喜好,进而推荐用户更可能会喜欢的短视频。这样在上滑看下一个视频的时候,用户刷到一个更喜欢的视频的概率就更大,产生刷完一个还想看下一个的持续使用体验。

在了解了从用户角度刷短视频是一种什么样的产品使用体验后,我们再来看一下,从计算机的角度看,这是一个什么样的计算问题。

本质上计算机需要解的问题是:给定一个用户,在一个给定的时刻,推荐一个最匹配用户喜好的短视频,从而优化某些产品使用目标。

对于一个给定的用户,计算机需要试图理解用户的喜好;对于一个给定的时刻,计算机需要发现用户在不同时刻的使用习惯;对于推荐的短视频,计算机需要理解整个内容库供给端的所有可推荐的视频;对于产品使用目标,它可以是用户使用时长、用户活跃度、转化率等。

用分解问题的思路,抖音个性化推荐短视频这个问题可以拆解成:(1)把所有的视频按内容分类和排序;(2)根据所有用户以前各自的观看习惯,推导出喜好;(3)把视频内容和用户喜好进行匹配,按匹配程度排序。现在,我们可以把这三步用我们刚学会的流程图来表示(见图1—6)。

看了这个问题分解的图1—6,我们发现其实前两步是可以并行完成的,它们都是耗时耗工的事儿,并行来做应该会有好处。而第三步,把视频内容和用户喜好进行匹配,按匹配程度排序,则可以拆成两步,如图1—7所示。

图1—6和图1—7是两个不同的流程图做同样的事。然而图1—7相对来说有几个好处。其一,第一步和第二步可以并行,而并行往往可以大大地节省时间。给千万个视频进行内容分类并不容易,在公司里,这两件事甚至可以由两个不同的团队去做。其二,在图1—7里,步骤1和步骤3.2使用的都是标准问题法。步骤1是一个分类问题,可以用我们第3章要学的某一个分类算法来做。步骤3.2是一个标准的排序,可以用后面第2章要学习的任何一个排序算法来解。步骤2和步骤3.1还比较复杂,可以继续拆解。

当然,上面我们给的只是个范例,真正的抖音推荐算法要复杂得多,但是原理类似。所以,现在你已经知道抖音推荐算法中最基本的方法了!

无人驾驶

我们再来举个例子。无人驾驶,是计算机正在解决的一个非常复杂的问题,全人类都对无人驾驶的广泛民用翘首以待,这当中有很多复杂的技术问题。

我们先来简要描述一下什么是无人驾驶,它的发展现状和应用价值,然后从计算思维的角度看计算机如何分解这个问题。无人驾驶,顾名思义就是没有人参与控制(没有司机)却能自动驾驶的交通工具的总称,最常见的就是无人驾驶汽车。

几十年来,无人驾驶技术的研究可以分为三个阶段。大约从1980年到2003年,大学研究中心致力于两大汽车自动化愿景:第一是自动化公路系统,相对“笨拙”的汽车依靠公路基础设施来行驶;第二,另一些团体致力于研究无须特殊道路的无人驾驶¤图1-8汽车。

2003年至2007年,美国国防部高级研究计划局(DARPA)进行了“三大挑战”,明显地推动了无人驾驶技术的进步:前两个挑战在农村环境,第三个挑战在城市环境。每个挑战都促使大学研究团队在此项技术的研发中进行大力投入。

近10年,私营企业也推动了无人驾驶技术的发展。谷歌的无人驾驶汽车计划已经开发和测试了一队汽车,并通过举办活动来展示这项技术的应用。2013年,奥迪和丰田在国际消费电子展上公布了各自的无人驾驶汽车愿景和研究项目,日产也宣布计划在2020年之后开始销售无人驾驶汽车。

无人驾驶的广泛民用一直是各大公司研发的目标。2020年10月,无人驾驶领域的先行者、谷歌母公司旗下的无人驾驶子公司Waymo在美国菲尼克斯向公众开放完全没有安全员的无人驾驶出租车服务,这也是首次有无人驾驶公司向公众开放完全无人驾驶的出租车,是无人驾驶民用的一个重要的里程碑。

无人驾驶是目前AI技术最前沿和前景最广阔的方向,从基于机器学习和机器视觉的算法,叠加5G(第五代移动通信技术)和云计算的信息互通,到机器人操控技术的“大综合”,都是它涉及的领域。随着汽车的电动化,传感器和车载芯片技术的发展,机器学习算法的突破,云计算的普及,以及5G的出现,全球乘用车和商用车都逐渐开始拥抱无人驾驶技术。

无人驾驶这个错综复杂的AI问题,从计算机的角度来看,一般可以分解为三步,如图1—9所示。

(1)感知环境:用摄像设备监测道路、障碍物、天气等。这一步有点像人的眼睛和耳朵做的事情。

(2)做出决策:根据汽车的目标、地图、交通规则等,对驾驶行为做出决策,可以是继续前进、加速、减速、转弯、停止等。这一步相当于人的大脑做的事情。

(3)开始行动:根据前一步所做的决策来行动,操纵方向盘、加速或者转弯。这一步相当于人的手和脚做的事情。

上面这三步可以串行,多个这样串行的步骤又在同时进行,不断地感知、决策、行动。当然,这三步中的每一步又可以分解成若干小步。尤其是第二步决策,它可能会使用非常复杂的算法,比如深度学习算法等。在第3章讲分类的时候,我会更加细致地告诉大家,在决策这一步有哪些分类问题。真实的计算机系统还要处理各种边界条件,但这并不妨碍我们理解它解决问题的大体思路。

你可以看到,小到炒鸡蛋,大到短视频推荐和无人驾驶,这些事都是可以用分解问题的方法去拆解的。计算思维是解决复杂问题的思维能力,而分解问题是计算思维的核心,这个过程把一个大问题分解成计算机可以运作的子问题,之后计算机再把子问题隔离开,分别清晰地描述出来,然后逐步用算法解决。

你可能会想,分解问题是计算思维的核心,可以帮助我们理解计算机是如何工作的,但是对我们日常生活有什么帮助呢?

其实,生活中我们会遇到的大大小小的问题,很多都可以用分解问题的计算思维来拆解,这样无论遇到多么复杂的问题,你都会知道如何下手。

办婚礼

举个贴近生活的例子,比如办婚礼。一提到办婚礼,人们可能会觉得,这是一个相对复杂和事项很多的大项目。其实只要合理地拆解,然后逐个办理,事情就会清晰很多。

如图1—10所示,我们可以先在大的层面按事件发生的时间顺序把婚礼拆解为筹备计划、前期准备、婚礼当天和婚礼后。

然后,我们再进一步把筹备计划拆解成决定日期地点、草拟客人名单、确定伴郎伴娘等,如图1—11所示。很多子步骤可以并行,主要的步骤需要串行。这样逐层分解问题,直到我们可以对每一个子问题明确地采取行动,就实现了化繁为简。

分解问题和编程

最后,我们简单解释一下分解问题和编程的关系。当我们把一个大问题分解成小问题,再分解成具体的步骤以后,我们就可以用一种计算机可以理解的语言,比如图形化拖拽语言、Python、C语言、Java语言等,把这些步骤表示出来,指导计算机做事。一个程序就是一系列计算机能理解的指令,编程就是写程序的这个过程。编程的关键不是写指令,而是想清楚这是什么问题,如何一步步地解决,然后再用语言写下来。本书不教大家如何写程序,而是告诉大家程序背后重要的方法和思路。有了计算思维,编程就会变得很简单。

我们讲了分解问题,把一个大问题分解成计算机可以理解的指令,再表示为能够被单独解决的小问题。那多小算是足够小了呢?要不要一直分解下去呢?这个问题的答案是,一个问题如果分解到能用我们下面几章要说的“算法”来解决,就足够小了。

推荐阅读

《未来算法:下一个十年赢在计算思维》

内容简介:

本文摘编自《未来算法》,诸葛越著,中信出版集团2021年6月出版。

我们的未来,是人和机器一起仰望星空的时代。

这本书用通俗易懂的语言和生动活泼的例子,介绍了有关“未来算法”的新知识,重点拆解了排序、分类、搜索、递归几大基本的未来算法,轻松讲述了数据结构、模式识别、抽象、优化的定义和应用,并提出了“计算思维”的新概念。

计算思维,简单地说就是计算机怎么解决世界上的问题。

  • 计算思维可以让你像计算机一样思考。学会了计算思维,你可以看透互联网世界和AI是怎么运作的,你也就学会了一种解决大规模复杂问题的方法。

  • 计算思维会给你一套现代的交往语言。它是现代社会的思维方式,它所提供的一套语言,比如算法、数据、模型、迭代、AI 等是现代人交往的语言。

  • 计算思维可以帮你优化每日的生活和工作,也可帮你解决人生的复杂问题,比如如何管理时间,如何分配资源,如何找工作或伴侣,如何理解和驾驭AI。

这本书会给你提供一种全新的看世界的视角,让你掌握现代信息运作的奥秘。作者认为,未来的十年是算法发展的黄金十年。在这样的时代背景下,如果能掌控计算思维,你就会在工作和成长中脱颖而出,赢在下一个十年。

***粉丝福利时间***

评论区留言,点赞数超过60即可

按照留言质量选择前十可获得此书!!!

72个小时计!

注:若是在活动截止日期后24小时内无法取得用户回复或联系,将按照留言点赞排名顺延。

【文末有福利】炒鸡蛋竟然与无人驾驶有关?相关推荐

  1. 【高并发】解密导致并发问题的第二个幕后黑手——原子性问题(文末有福利)

    写在前面 大冰:小菜童鞋,昨天讲解的内容复习了吗? 小菜:复习了大冰哥,昨天的内容干货满满啊,感觉自己收获很大. 大冰:那你说说昨天都讲了哪些内容呢? 小菜:昨天主要讲了线程的可见性和可见性问题.可见 ...

  2. 百年通信史:落后西方半世纪的中国,用 20 年绝地反杀! | 文末送福利

    作者 | Aholiab,责编 | Carol 出品 | CSDN(ID:CSDNnews) * 温馨提示:文末有福利! 视频内含更多干货,点击小程序立即围观! 在1905年的日俄战争中,俄罗斯第二太 ...

  3. MNIST竞赛准确度99+%技术详解,文末有福利~

    点击我爱计算机视觉标星,更快获取CVML新技术 本文为FlyAI竞赛社区供稿. Part.1 项目简介 MNIST项目基本上是深度学习初学者的入门项目,本文主要介绍使用keras框架通过构建CNN网络 ...

  4. 人工智能写小说python_1月下旬值得一读的10本技术新书(人工智能、C++、Python数据科学等)!文末有福利!...

    1月下旬,阿里云云栖社区 联合 图灵教育 为大家带来十本技术书籍(人工智能.C++.Python数据科学等).以下为书籍详情,文末还有福利哦! 书籍名称:<C++性能优化指南> 内容简介 ...

  5. 文末有福利 | 6大理由,告诉你为什么这个大会你不能错过!

    作者 | Carol 出品 | 区块链大本营(blockchain_camp) * 文末可参与抽奖活动! 如果说有一个什么领域,能让中科院.华为.腾讯.京东.360.微众银行的大咖汇聚在一起,那一定是 ...

  6. html类选择器使用在什么场景,你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)...

    1.CSS盒模型,在不同浏览器的差异 css 标准盒子模型 css盒子模型 又称为框模型(Box Model),包含了元素内容(content).内边距(padding).边框(border).外边距 ...

  7. css 商城 两列_你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)

    1.CSS盒模型,在不同浏览器的差异 css 标准盒子模型 css盒子模型 又称为框模型(Box Model),包含了元素内容(content).内边距(padding).边框(border).外边距 ...

  8. 架构师们,怎么走着走着就变“烟囱”了呢? | 文末含福利

    作者 | 耿立超 来源 | <大数据平台架构与原型实现:数据中台建设实战> * 文末有福利 这两年,随着中台概念的兴起,一种IT过去的常态,现在的明星反面教材--"烟囱式架构&q ...

  9. 万字长文解析“数据中台”的硅谷实践(文末有福利!)

    4月18日下午,智领云联合创始人&CTO,前EA(艺电)大数据平台高级工程经理宋文欣博士首度在智领云技术直播中开讲,向参加直播的数百位观众讲述了硅谷"数据中台"的故事.实际 ...

最新文章

  1. 转帖-Linux 磁盘坏道检测和修复
  2. Silverlight 鼠标与键盘事件注意点
  3. 作业——Windows核心编程学习手札系列之五
  4. Android studio使用git切换分支开发的方法(图文教程)
  5. android打开sqlite数据库,Android:打开和关闭SQLite数据库
  6. 黑客攻击公司化:网络犯罪也有商业模式也有CEO
  7. python类库31[命令行解析]
  8. CPU压力测试工具cpuburn
  9. 编程珠玑java_编程珠玑第八章
  10. 一款集成微信小助手的mac微信最新版!支持发朋友圈!
  11. 此生不戒多巴胺—冲刺总结
  12. Outperform
  13. 如何写毕业论文(个人心得,不是保姆级)
  14. Windows下载安装Redis
  15. 移动二班 21号 pycharm 04.09
  16. 如何将Nginx的版本号隐藏
  17. 何恺明:从高考状元到CV领域年轻翘楚,靠“去雾算法”成为“CVPR最佳论文”首位华人得主...
  18. egg支持路径别名@
  19. Pandaboard OMAP4460用linaro android源码启动
  20. U盘安装win 10

热门文章

  1. Replace Parameter with Methods(以函数取代参数)
  2. android 源码分析notification,# Notification 源码分析
  3. android scrollview居中,使用 HorizontalScrollView 实现滚动控制
  4. 外设驱动库开发笔记2:AD8400系列数字电位器驱动
  5. 记一次棋牌游戏 cocos2d-x LUA脚本解密
  6. [记录] --- linux安装redis
  7. controller中执行main方法报错NoClassDefFoundError: javax/servlet/http/HttpServletResponse
  8. JS模块化编程require.js简介
  9. 现代软件工程 学生阅读和调查作业
  10. arm linux head.s,arm-linux head.S 源代码分析