【文末有福利】炒鸡蛋竟然与无人驾驶有关?
分而治之、各個擊破是兵家常用的策略。分解問題就是分治法。兵法講了分治法的“道”,而計算思維介紹分治法的“術”,也就是具體什么是分解問題,怎么分,怎么表示,分了以后怎么一步步地做,最后怎么正確地解決問題。
今天,我將介紹計算思維中看似最簡單但其實最強大的概念:分解問題。在圖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小時內無法取得用戶回復或聯系,將按照留言點贊排名順延。
總結
以上是生活随笔為你收集整理的【文末有福利】炒鸡蛋竟然与无人驾驶有关?的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 组建实验室仅3年,团队人均26岁,这位8
- 下一篇: 阿伯特:芝加哥大学与社会学研究
