分享好文,中學生要學電腦嗎?
作者:創新工場CTO、人工智慧工程院執行院長 王詠剛
文章来自半轻人微信公众号(ban-qing-ren)
………………………………
朋友的孩子高中剛畢業,已拿到美國頂尖大學(非電腦專業)的錄取通知。疫情影響,不知何時才能去學校報到。孩子想抓緊學習一下程式設計,為大學打好基礎。這孩子找我聊了一個多小時,從如何學程式設計,聊到非電腦專業和電腦專業的路徑差異,又聊到如何從不同角度認識電腦與程式設計。聊得比較寬泛,不知是否對這孩子有用。
回想我自己的高中時代:那時雖迷戀程式設計,卻完全沒有懂行的人指導。在我們那個四線城市的廠礦中學裡,開設電腦興趣課的老師知道的資訊還沒我多。我高一時跑到北京中關村逛街,卻完全沒意識到中國第一代頂尖程式師當時就在我身邊的低矮辦公樓裡寫代碼(這話說得並不準確,比如求伯君那年就主要是在珠海做開發),鼎鼎大名的UCDOS、WPS、CCED就出自他們之手……我在當時街邊的一家書店(位置似乎就在今天的鼎好大廈對面)買到了許多種印刷品質極低劣的電腦圖書。用今天的標準看,那就是一批盜版影印或未授權翻譯的國外圖書。可那批書竟成了我高中時代最寶貴的程式設計知識來源。
顯然,我在高中時根本就是野路子學電腦。現在後悔也沒用,當時我的眼界或能觸及的資源就那麼多。如果能穿越回30年前,我該對喜歡程式設計的自己說些什麼呢?這些年,我與世界上最好的一批程式師合作過,也參與過世界上最有價值的軟體系統研發——我所積累的一些粗淺經驗裡,有哪些可以分享給一個愛程式設計的中學生?
【問題1】中學生要不要學電腦?
當然要!
每個中學生都要學。只不過——建議大部分中學生使用“休閒模式”,小部分(不超過10%)中學生使用“探險模式”。
啊?兩個模式?那我該進入哪個模式?⟹請跳轉至【問題2】
【問題2】選哪個模式?
你癡迷電腦嗎?比如,你玩遊戲時會特別想知道這遊戲背後的代碼是如何編寫的嗎?再比如,就算老師家長不同意你學電腦,甚至當著你的面把電腦砸了,你也要堅持學電腦嗎?如果是,恭喜你進入“探險模式”⟹請跳轉至【問題200】
你對數學有興趣嗎?比如,你看到街邊建築的曲線,就會在腦子裡琢磨曲線對應的函數或方程嗎?每當手裡攥著幾粒骰子,你就會不由自主地計算概率嗎?如果是,歡迎進入“探險模式”⟹請跳轉至【問題200】;當然,如果有些猶豫,也可以先進入“休閒模式”⟹請跳轉至【問題100】
即便你對電腦和數學興趣不大,家長、老師還是強烈建議你學電腦嗎?就算你一百個沒時間一千個不願意,家長、老師還是會逼著你學電腦嗎?如果是,建議你主動進入“休閒模式”並向家長、老師彙報說“我已經按照前谷歌資深軟體工程師的專業建議在認真學程式設計了”⟹請跳轉至【問題100】
其他情況,一律進入“休閒模式”。⟹請跳轉至【問題100】
【問題100】休閒模式 | 主要學什麼?
“休閒模式”將電腦視為我們生活、工作中的必備工具,主要學習如何聰明、高效、優雅地使用計算設備。這裡說的計算設備,包括所有形式的電腦、手機、遊戲機、智慧家電以及未來一定會進入生活的自動駕駛汽車。
什麼什麼?你已經會用電腦、會玩手機、會打遊戲了?別著急,慢慢往下看。
【問題101】休閒模式 | 我會用搜尋引擎嗎?
我知道你會用百度搜習題答案。但,習題答案不是知識。你會用搜尋引擎來搜索和梳理知識嗎?請試著用電腦和你喜歡的搜尋引擎來解決如下兩個問題:
(1)圓周率𝜋的計算方法有多少種?每種不同的計算方法分別是由什麼人在什麼時代提出的?借助電腦,今天人們可以將圓周率𝜋計算到小數點後多少位?將圓周率𝜋計算到小數點這麼多位元,一次大概需要花掉多少度電?
(2)全球大約有多少個廁所?在發展程度不同的國家,分別有多少比例的人可以享用安裝了抽水馬桶的衛生廁所?為什麼比爾·蓋茨曾大力推動一個設計新型馬桶的研發專案?比爾·蓋茨的公益組織在這個專案上大約花費了多少資金,最終收到了多大的效果?
如果你沒法快速得到上述問題的全部答案,那就給自己設一個小目標:一個月內,學會用搜尋引擎系統地獲取、梳理一組知識點的全部技巧。
【問題102】休閒模式 | 接下來學什麼?
建議學好典型的工具軟體。比如,我知道你會用Office了,但用Office和用Office是很不一樣的。對生活、學習、工作來說,學好、學透一個工具軟體比鑽研程式設計技巧更實用。
你會用Excel來管理班級公益基金的預算和實際收支情況嗎?
你會用Excel做出過去20年裡全球大學排名的演變趨勢圖嗎?
你會用Word排版一篇中學生論文嗎?論文中的圖表和最後的參考文獻部分該如何排版?
你會用Word編排一份班級刊物,包含封面、扉頁、目錄、插圖頁、附錄、封底等部分,可以在列印後直接裝訂成冊嗎?
PowerPoint呢?你有沒有研究過蘋果公司發佈會上那些幻燈片的設計?當約伯斯(多年以前)或蒂姆·庫克站在幻燈片前的時候,他們的演講思路是如何與幻燈片完美結合的?
還有哦,別忘了學學如何為數碼照片做後期,如何用電腦或手機剪視頻,如何為剪輯好的視頻配字幕,如何將照片、音樂、視頻等素材結合起來,做出一段吸引人的快手/抖音短視頻。
最後,抽空玩玩那些設計精妙的遊戲吧,比如《紀念碑穀》、《塞爾達傳說:曠野之息》之類;同時,遠離那些滿屏廣告,或者一心騙你在遊戲裡充值花錢的垃圾。
【問題103】休閒模式 | 不學學知識嗎?
當然要學知識。下面每種實用的電腦知識都夠大家學一陣子了。
(1)色彩知識:你知道同一張數碼照片在不同品牌的手機螢幕上、不同的電腦螢幕上、不同的智慧電視上顯示時,為什麼經常有較大色差嗎?你知道有一些色彩只適合螢幕顯示,不適合列印輸出嗎?你知道軟體工具裡常用的RGB、HSL之類的色彩空間都是什麼意思嗎?如何在設計PowerPoint幻燈片時選擇一組和諧美觀的色彩?
(2)字體知識:你知道什麼是襯線字體,什麼是無襯線字體嗎?你知道網頁中常用的英文字體都有哪些嗎?你知道商務演講時最適用于幻燈片的英文字體有哪些嗎?你知道電腦和手機常用的黑體、宋體、仿宋體、楷體等中文字體分別適合哪些實際應用場合嗎?你會將不同字體混排成一個美觀的頁面嗎?
(3)網路知識:你知道5G是什麼嗎?你知道5G和4G在通信頻寬、通信距離上的具體區別嗎?你知道什麼是路由器,什麼是防火牆嗎?你知道如何配置路由器,如何配置防火牆嗎?微信或QQ聊天時,對方發的文字、語音或視頻是如何傳送到你的手機上的?
(4)應用知識:淘寶中搜索得到的商品資訊是從哪裡來的?商品是按什麼方式排序的?為什麼購物APP經常會推薦給你一些曾經買過、看過的商品?你知道如何為自己建立個人網站嗎?你知道如何管理微信公眾號嗎?
(5)安全知識:你知道網路上的釣魚攻擊是怎麼回事兒嗎?你知道什麼是電腦漏洞嗎?你知道駭客為什麼想把一大批受攻擊的電腦變成可以遠端操控的傀儡機嗎?你知道為什麼現在很多手機APP都要通過短信發送驗證碼嗎?如果驗證碼被壞人截獲,你會面臨哪些風險?
這裡只是舉例。實用的電腦知識還有很多。大家可以自己發掘。
【問題104】休閒模式 | 我需要學程式設計嗎?
可以學,但不是必須。即便學,也只需要根據自己的需要,學那些最能幫你解決現實問題的部分。
【問題105】休閒模式 | 我該學什麼程式設計語言?
在“休閒模式”裡,電腦就是工具,程式設計也是工具,夠用就好。學什麼程式設計語言,完全看你想要電腦幫你做什麼。
• 如果你想對資料處理有更多自主權,那不妨學學Python;
• 如果你想做簡單的交互演示程式,那就先把JavaScript學起來;
• 如果你想更好、更快地寫論文,那不妨學學LaTeX(什麼什麼,LaTeX不是程式設計語言?你太小看LaTeX了);
• 如果你想學做簡單的手機APP,那麼,Android手機就學Java,蘋果手機就學Swift好了;
• 如果你只想知道程式設計是怎麼回事,那……從Python或JavaScript開始就行。其實,跟五六歲的小朋友一起學學Scratch圖形程式設計也不錯。
【問題106】休閒模式 | 我需要學人工智慧嗎?
在“休閒模式”裡,最需要學的不是“人工智慧的實現原理”,而是“什麼是人工智慧”,以及“人工智慧能做什麼,不能做什麼”。
• 在手機上試一試,人工智慧做語音辨識時能做到什麼水準?哪些話容易識別,哪些話不容易識別?
• 打開機器翻譯軟體,試一試哪些資訊翻譯得好,哪些資訊翻譯得不好?
• 手機上的拍照軟體一般都有人臉識別功能。試一試人臉識別在什麼場景下做得好,什麼場景下做得不好?
• 找一部講人工智慧的科幻電影,用自己的判斷解讀一下,電影裡哪些技術有可能成為現實,哪些技術存在邏輯矛盾。
【問題107】休閒模式 | 推薦什麼參考書、參考文獻?
書不重要,豆瓣評分7分以上的電腦應用、程式設計甚至科普類圖書都可以拿來翻翻。
直接在知乎裡搜索你想瞭解或學習的知識點可能更有效率。
如果你意猶未盡,覺得自己剛活動開筋骨,還想挑戰更高層次,歡迎進入“探險模式”。⟹請跳轉至【問題200】
否則,“休閒模式”到此結束。⟹請離開此問答
【問題200】探險模式 | 主要學什麼?
“探險模式”需要有挑戰精神。電腦科學的世界技術演進快,脈絡複雜,要想在探索時不迷路,你得通過有順序、有系統地學習電腦知識,慢慢構建出一張可以在未來幫你走得更遠的思維地圖來。
在“探險模式”裡,電腦就不止是一件能快速計算的工具了。電腦更像是我們大腦的一種延伸。這既包括認知能力的延伸,也包括認知邏輯的延伸。隨著學習深入,大家會逐漸體會到電腦所具有的多維度能力:
電腦是一種可以表示不同類型資訊(數、符號、文字、語音、圖像、視頻、虛擬空間、抽象邏輯)的“資訊管理機”;
同時,電腦也是一種可以連續執行指令以完成特定的資訊處理任務的“指令處理機”;
同時,電腦還是一種可以在知識與邏輯層面完成特定推理任務的“知識推理機”;
同時,電腦也是一種可以從人類給定的資料或自我生成的資料中總結規律,建立模型,自主完成某些決策的“智慧學習機”。
“探險模式”的目標就是盡可能準確地認識電腦,掌握有關電腦運行的最基本規律。有了這些基礎。未來在大學期間或工作中,你就能更容易地設計電腦軟硬體系統,或是設計出碳基大腦(人類)與矽基大腦(機器智慧)之間的最佳協作方案。
【問題201】探險模式 | 我的英語水準足夠嗎?
蘋果每年秋季的新品發佈會,不加字幕的話,你能聽懂多少?
能聽懂大部分:建議在學習電腦的過程中,盡可能使用英文教材、英文文檔。
能聽懂小部分:建議將原來準備學電腦的時間,分出一部分來學英語。
只能聽懂“你好”“再見”之類:⟹請離開此問答。然後,把原來準備學電腦的時間用於學英語,六個月後再回來。
【問題202】探險模式 | 我的數學水準足夠嗎?
如果你是數學和數學應用小能手——較複雜的數學問題總能快速找到核心思路,或快速簡化為簡單問題;很容易就能將抽象概念映射到具體的數學圖形,或將數學問題與相應的現實問題關聯在一起:請繼續探險之旅。
如果你應付正常數學課程感到吃力:建議將原來準備學電腦的時間,分出一部分來學數學。
如果你還搞不清楚什麼是方程、函數、集合、概率……:⟹請離開此問答。然後,把原來準備學電腦的時間用於學數學,六個月後再回來。
【問題203】探險模式 | 為什麼強調英語和數學?
(1)統計上說,最好的電腦參考資料大都是英文寫的,最好的電腦課程大都是用英文講的,最新的電腦論文大都是用英文發表的。
(2)函數、方程、坐標系、標量、向量、排列組合、概率這些中學數學裡會初步學習到的數學知識,是電腦科學的基礎。
【問題204】探險模式 | 電腦知識那麼多,正確的學習順序是什麼?
最重要的順序有兩個。建議先從順序一開始,學有餘力時兼顧兩個順序。
順序一:自底向上,即,自底層原理向上層應用拓展的順序。
電腦原理的基礎知識:
為什麼每台電腦(包括手機)都有CPU、記憶體和外部設備?
(馮·諾依曼體系結構的)記憶體中為什麼既可以存儲資料,也可以存儲指令?
CPU是如何完成一次加法運算的?
程式設計語言的基礎知識:
資料類型,值,變數,作用域……
語句,流程控制語句……
過程、方法或函數,類,模組,程式,服務……
編譯系統的基本概念:
電腦程式是如何被解釋或編譯成目標代碼的?
演算法和資料結構的基礎知識:
陣列,向量,鏈表,堆,棧,二叉樹,樹和圖……
遞迴演算法,排序演算法,二叉樹搜索演算法,圖搜索演算法……
應用層的基礎知識:
為什麼電腦需要作業系統?設備驅動程式是做什麼的?
網路通信的基本原理是什麼?流覽器是怎麼找到並顯示一個網頁的?
資料庫是做什麼用的?
虛擬機器是怎麼回事?
人工智慧系統的基礎知識:
先熟悉些線性代數、概率和數學優化的基礎知識。
什麼是機器學習?從簡單的線性回歸中體會機器學習的基本概念、基本思路。
什麼是神經網路?什麼是深度神經網路?為什麼神經網路可以完成機器學習任務?
如何使用PyTorch或TensorFlow實現簡單的深度學習功能?
順序二:自頂向下,即,自頂層抽象邏輯向下層具體邏輯拓展的順序。
• 電腦的本質是什麼?
• 什麼是圖靈機?什麼是通用圖靈機?
• 什麼是讀取﹣求值﹣輸出迴圈(Read–eval–print Loop,REPL)?
如何用自頂向下的方式理解(解析、解釋、編譯)一段程式碼?
• 靜態語言和動態語言的區別?
如何理解變數與資料類型之間的綁定關係?
• 什麼是函數式程式設計?
程式設計語言中,函數的本質是什麼?
函數為什麼可以像一個值一樣被表示、存儲、傳遞和處理?
• 什麼是物件導向?
類的本質是什麼?
如何用物件導向的方式定義個功能介面?
如何依據介面實現具體功能?
• 什麼是事件驅動?
什麼是事件?事件如何分發到接收者?
如何在事件驅動的環境中理解代碼的狀態和執行順序?
【問題205】探險模式 | 如何提高程式設計水準?
在掌握基本知識體系的基礎上,學好程式設計只有一條路:多程式設計,多參加程式設計比賽,多做程式設計題,多做實驗項目,多找實習機會——其中,能參與真實專案是最有價值的。
【問題206】探險模式 | 該從哪一門程式設計語言學起?
我個人推薦的程式設計入門語言(可根據情況任選):
Python
Java
Swift
C#
JavaScript / TypeScript
Ruby
……
可能不適合入門,但適合後續深入學習的語言:
C
C++
Go
Objective-C
組合語言
機器語言(CPU指令集)
Shell Script
Lua
Haskell
OCaml
R
Julia
Erlang
MATLAB
……
【問題207】探險模式 | 如何選參考書和參考資料?
(1)強烈推薦的參考書和參考資料:
• MIT、Stanford、CMU、UC Berkeley這四所大學中任何一個電腦專業方向使用的教學參考書或參考資料。網上可以查到這些學校電腦專業方向的課程體系,有的學校甚至公開了課程視頻。其中往往會列舉參考書和參考資料連結。
• 維琪百科(英文)上的數學、電腦科學相關條目。
• Github上star數在1000以上的開原始程式碼和開來源文件。
(2)強烈推薦但須小心辨別的參考資料:
知乎上的數學、電腦科學相關條目。使用時需要格外注意三件事:
儘量只看高贊答案或高贊文章;
辨別並避開廣告軟文;
辨別並避開純抖機靈的故事或段子。
Stack Overflow上的程式設計問題解答:
自己動手實驗,辨別解答是否有效。
CSDN上的程式設計問題解答:
自己動手實驗,辨別解答是否有效。
(3)其他推薦的參考書和參考資料:
國內專業作者寫作的專業技術書籍(豆瓣評分7分以上的)。
大廠(Google、Facebook、Microsoft、Amazon、阿裡、騰訊、百度、頭條等)資深工程師的技術公號、專欄、博客等。
著名圖書系列:如O’Reilly的動物封面的系列圖書(請注意最新版本和時效性)。
國內翻譯的著名技術圖書(譯本在豆瓣評分7分以上的)。
(4)儘量避免的參考書和參考資料:
• 已經過時的圖書或參考資料。
• 作者或譯者人數比章節數還多的專業圖書。
• 百度百科上的數學或電腦科學相關資料。
什麼什麼?你這篇問答居然沒有推薦一本具體的圖書?是,沒錯。如果你覺得即便有了上面的線索,自己還是找不到好書好資料,那也許你還是適合“休閒模式”⟹請跳轉至【問題100】
同時也有2部Youtube影片,追蹤數超過3萬的網紅李祥數學,堪稱一絕,也在其Youtube影片中提到,成為這個頻道的會員並獲得獎勵:https://www.youtube.com/channel/UCU2axN3MDyvq01LOK1umZGQ/join 追蹤我的ig:https://www.instagram.com/garylee0617/ 加入我的粉絲專頁:https://www.face...
「c組合遞迴」的推薦目錄:
- 關於c組合遞迴 在 李開復 Kai-Fu Lee Facebook
- 關於c組合遞迴 在 Anya says 安雅說 Facebook
- 關於c組合遞迴 在 【食尚夫妻】職能治療師&插畫家&寶皇 Facebook
- 關於c組合遞迴 在 李祥數學,堪稱一絕 Youtube
- 關於c組合遞迴 在 李祥數學,堪稱一絕 Youtube
- 關於c組合遞迴 在 Re: [問題] 遞迴產生組合問題- 看板C_and_CPP - 批踢踢實業坊 的評價
- 關於c組合遞迴 在 【C語言】(有變數觀看版本)使用Dev C++ 5.11 對排列組合 ... 的評價
- 關於c組合遞迴 在 【C 語言入門】13 - 函式遞迴 - YouTube 的評價
- 關於c組合遞迴 在 求解排列組合程式(第2頁) 的評價
c組合遞迴 在 Anya says 安雅說 Facebook 八卦
最近常聽朋友嚷嚷著放暑假很頭痛,
不知道能上哪去遛遛屁孩們!!!
Anya真的要和大家推薦一個好地方了!!
保證是有玩有收穫又長知識~~~~
2020新光三越兒童藝術季活動又開始了!!
每年舉辦的時候也會有兒童繪畫比賽~~
一進到展區的時候就會看到滿滿的兒童畫作~
這次展覽特別以「美感練習」為主題,
與信誼基金會、小人小學共同策劃
-「赫威.托雷的美感創意派對」與
「大小孩的美感練習」主題展區,
透過顏色找出生活中存在的一切事物,
搭配人許多互動式的遊戲區能讓孩子玩玩看,
也透過美感傳遞激發孩子的創造力!
這次最讓我印象深刻的是:
「大小孩的美感練習」展區
藉由紅黃藍三個常常出現在日常生活中的顏色,
提到孩子有很多喜歡的玩具也有這三色,
大人愛喝的飲料、吃的零食等等,
來帶出除了事生活中常用到,
一方面也是環境中的污染源~
引導孩子從小小細節體驗生活中的大事~~
另外「赫威.托雷的美感創意派對」,
透過點、線、面和色彩的各種組合,
引導親子體驗現代藝術的任何可能,
這次展出讓孩子可以,
在黑暗中拿著手電筒透過書,
玩光影的故事遊戲;
現場互動小遊戲能拼湊點線拼圖,
打破一般對拼圖的概念,
不用依照拼圖原有的樣貌來拼,
而是透過點、線的概念來做拼圖🧩
真的是很有趣的體驗呢!!
除了靜態展出外,
下午整點時段還有多場親子活動唷!
年紀從2到10歲都適合一起參加唷!
上週末時去參加了朱宗慶打擊樂party,
和YAMAHA動物音樂嘉年華~
透過巧妙音樂結合節奏、
讓孩子融入音樂中並學習那些陌生的樂器~
連平常很害羞的喜西、
都還自告奮勇要上台去示範敲擊樂器呢!
最後要推薦的就是在展場門口的新藝商號了!
商店裡有許多親子選物、
在晃完展區後可以帶孩子去逛逛、
最特別的是新藝商號賣的產品都是MIT台灣製唷!
孩子放暑假沒事做趕緊帶他們去參加新光三越兒童藝術季~
展開一場美好的美感薰陶吧!!!⭐️
/
ℹ️ 新光三越兒童藝術季巡迴展
7/3—7/14 台北南西一館9F
8/8—8/18 台南新天地6F C區
8/21—8/31 台中中港店10F
詳細資訊🔎https://bit.ly/37T9RjG
#新光三越 #兒童藝術季 #免費入場
財團法人新光三越文教基金會
c組合遞迴 在 【食尚夫妻】職能治療師&插畫家&寶皇 Facebook 八卦
⭕結團通知⭕明晚23:59【人類文化新書優惠首團】
【寶寶認知黏貼書】擴充詞彙⨯認識圖片⨯視知覺配對(適1+)
認知黏貼書有4個學習主題:可愛動物、交通工具、趣味形狀、認識顏色。每個圖片皆為魔鬼氈設計,且為厚圖卡較耐用,可以讓孩子練習手部撕貼。黏貼時,要找一樣的輪廓,然後每個物品旁邊標示有中文名稱&英文名稱可以讓孩子在視覺配對時認識圖片也能擴充詞彙,一舉數得呀~
另外4個主題還內附著色本,圖案都是學習過的圖卡喔(一模一樣的放大圖片),適合大一點開始練習著色再使用。整套購買還加送12支台灣製無毒大蠟筆!
🎉『人類文化』為了謝謝大家這次團購的熱烈迴響,特別在結團前加碼小象帕歐系列一本$30!是的!一本只要$30!幫大家查過價錢博客來現在一本$89!『人類文化』提醒每本主題限量50本賣完就沒有了!請大家把握機會要買要快喔!
💟詳細圖文:https://bit.ly/2UizLHE
💟優惠團購:https://reurl.cc/v1AO4a
#食尚夫妻獨家團購優惠
❤滿額大禮3選1(圖片詳見留言處):
組合A:經典童話繪本組(市價1000元)
組合B:專注力遊戲14冊(市價966元)
組合C:動物奇觀18冊(市價1440元)
凡購買滿$2000即選贈1套,$4000選2套以此類推,累贈無上限喔!但每組限量50套,送完為止,有喜歡手腳要快!
#請記得下單時需在結帳處的【訂單備註】想要獲得滿額禮的優先順序(若有贈品已贈送完,會依順序贈送)
❤️購買滿800元免運(包含離島,但離島開放全家,沒開放宅配)
❤️書名標示[嚴選]就是食尚夫妻推薦商品,老闆已給最優惠團購價。而全館其他商品,只要透過食尚夫妻的團購連結就可享8折優惠(進入購物車的結算處可看到食尚夫妻粉絲優惠促銷折扣)。
【團購說明】
(1)團購時間:即日~11/19(四) 23:59
(2)付款方式:『刷卡』或『超商貨到付款』
(3)運費:宅配與貨到付款單筆運費:80元;取貨免付款:63元,滿八百免運(包含離島,但離島僅開放全家取貨)
(4)出貨:
➡現貨-結帳後3個工作天內出貨,
➡預購-預計12月中旬出貨,若訂單有現貨及預購商品,將分2批寄,運費只算1次。
(5)所有開團教材與玩具皆經曼曼兒童職能治療師依專業和臨床經驗嚴謹評估。每個季末我們會把當季開團部分收入+個人捐款做公益,讓爸媽們團購育兒好物的同時,還能將愛心一起傳遞出去做公益。
c組合遞迴 在 李祥數學,堪稱一絕 Youtube 的評價
成為這個頻道的會員並獲得獎勵:https://www.youtube.com/channel/UCU2axN3MDyvq01LOK1umZGQ/join
追蹤我的ig:https://www.instagram.com/garylee0617/
加入我的粉絲專頁:https://www.facebook.com/pg/garylee0617/
有問題來這裡發問:https://www.facebook.com/groups/577900652853942/
喜歡這支影片,記得按個"喜歡",並且分享
訂閱就可以看到最新的影片
你最棒,記得按鈴鐺^^
高中數學重要觀念解析:https://www.youtube.com/playlist?list=PLOAKxvSm6LGkzAh5k3h-CI0-clwS7xsWm
數學思考題型:https://www.youtube.com/playlist?list=PLOAKxvSm6LGmx__4F2KucNWpEvr1rawkw
關於數學的兩三事:https://www.youtube.com/playlist?list=PLOAKxvSm6LGlD5ABfGtLkOhNIRfWxIRc5
真的祥知道:https://www.youtube.com/playlist?list=PLOAKxvSm6LGmQC77bAQPdl_Bw5VK8KQc-
YouTube合作影片:https://www.youtube.com/playlist?list=PLOAKxvSm6LGlQk7b-jDmCaUjJ57UMSXsf
高中數學講座:https://www.youtube.com/playlist?list=PLOAKxvSm6LGmgafYQliX1Ewh2Ajun9NNn
學測考前猜題:https://www.youtube.com/playlist?list=PLOAKxvSm6LGko-fghK4k3eZJ23pmWqN_k
指考數甲數乙總複習https://www.youtube.com/playlist?list=PLOAKxvSm6LGlrdoVFRflK46Cm25CGvLBr
統測考前猜題:https://www.youtube.com/playlist?list=PLOAKxvSm6LGkP_Nvl8iToZUWNfOHT42Pg
抖音精選:https://www.youtube.com/playlist?list=PLOAKxvSm6LGmoWuzdrsxoeKQBR_GgZyIk
國中會考總複習:https://www.youtube.com/playlist?list=PLOAKxvSm6LGlbMqjF4W6ElHM_lrFZijkg
![post-title](https://i.ytimg.com/vi/q0xmMj6Wr0A/hqdefault.jpg)
c組合遞迴 在 李祥數學,堪稱一絕 Youtube 的評價
成為這個頻道的會員並獲得獎勵:https://www.youtube.com/channel/UCU2axN3MDyvq01LOK1umZGQ/join
追蹤我的ig:https://www.instagram.com/garylee0617/
加入我的粉絲專頁:https://www.facebook.com/pg/garylee0617/
有問題來這裡發問:https://www.facebook.com/groups/577900652853942/
喜歡這支影片,記得按個"喜歡",並且分享
訂閱就可以看到最新的影片
你最棒,記得按鈴鐺^^
高中數學重要觀念解析:https://www.youtube.com/playlist?list=PLOAKxvSm6LGkzAh5k3h-CI0-clwS7xsWm
數學思考題型:https://www.youtube.com/playlist?list=PLOAKxvSm6LGmx__4F2KucNWpEvr1rawkw
關於數學的兩三事:https://www.youtube.com/playlist?list=PLOAKxvSm6LGlD5ABfGtLkOhNIRfWxIRc5
真的祥知道:https://www.youtube.com/playlist?list=PLOAKxvSm6LGmQC77bAQPdl_Bw5VK8KQc-
YouTube合作影片:https://www.youtube.com/playlist?list=PLOAKxvSm6LGlQk7b-jDmCaUjJ57UMSXsf
高中數學講座:https://www.youtube.com/playlist?list=PLOAKxvSm6LGmgafYQliX1Ewh2Ajun9NNn
學測考前猜題:https://www.youtube.com/playlist?list=PLOAKxvSm6LGko-fghK4k3eZJ23pmWqN_k
指考數甲數乙總複習https://www.youtube.com/playlist?list=PLOAKxvSm6LGlrdoVFRflK46Cm25CGvLBr
統測考前猜題:https://www.youtube.com/playlist?list=PLOAKxvSm6LGkP_Nvl8iToZUWNfOHT42Pg
抖音精選:https://www.youtube.com/playlist?list=PLOAKxvSm6LGmoWuzdrsxoeKQBR_GgZyIk
國中會考總複習:https://www.youtube.com/playlist?list=PLOAKxvSm6LGlbMqjF4W6ElHM_lrFZijkg
![post-title](https://i.ytimg.com/vi/SzBFpsBR-yc/hqdefault.jpg)
c組合遞迴 在 【C語言】(有變數觀看版本)使用Dev C++ 5.11 對排列組合 ... 的八卦
![影片讀取中](/images/youtube.png)
原始Java程式逐步執行錄影: 【Java語言】使用NetBeans對排列 組合遞迴 程式進行逐步執行錄影https://www.youtube.com/watch?v=qdfetEKYLuE. ... <看更多>
c組合遞迴 在 【C 語言入門】13 - 函式遞迴 - YouTube 的八卦
![影片讀取中](/images/youtube.png)
【 C 語言入門】13.1 - 數數字的練習(使用函式). Feis Studio•27K views ... 各區都在模考的好壞處|排列與 組合 |河內塔這樣玩| 遞迴 數列|110竹模. ... <看更多>
c組合遞迴 在 Re: [問題] 遞迴產生組合問題- 看板C_and_CPP - 批踢踢實業坊 的八卦
※ 引述《willyhsu (wi)》之銘言:
(略)
: 問題(Question):
: 計算資料所有的組合和其出現的次數
: 目前寫法是以深度優先產生所有組合(目前已完成),但是要改成當深度下去時
: 當有子集未被產生,會先產生子集的部分才能產生超集的部分
: 比方: 總共有4個attributes A,B,C,D
: 目前深度產生方式: A, AB, ABC, ABCD, ABD, AC ,ACD, AD, B...
: 改成當AB要產生時,因為B還沒被產生,所以必須先產生B才能產生AB
有點疑惑,為什麼你覺得深度搜尋是還沒用到 B 就不要先產生 B ?
深度搜尋應該是先存在一顆樹,不管那是概念上的或真的有那個樹結構,
反正樹節點可以先存在,然後你隨時可以去搜尋.
先說我看到這題目最初的解法: 要準備一個 stack, 然後,
1. 先處理 A, 這時要把 {A,B,C,D} 大於 A 的項目都放進堆疊,
是以項目由大到小依序放進堆疊 .
|DCB
這些元素之後取出來,會是同一層級的平輩節點.
2. 接下來要關心子節點. 目前有 A, 所以對 {B,C,D} 這些大於 A 的元素,
也就是大於手上元素最後一項的元素,挑出最小的項目,在此挑 B.
挑了 B 之後得到 AB, 要再進行 1. 程序,但對象是 B,
把大於 B 的項目都照特定順序放進堆疊做為目前 B 的平輩節點,
堆疊的情況為:
|DCBDC
3. 程序 1. 2. 很顯然是一對遞迴程序. 在此暫停一下,來看什麼叫作遞迴:
遞迴是指大結構的問題套疊或拆結為小結構的問題,而大小結構都是一模一樣,
所以解決問題的程序不但可以套用在大結構的問題,也可以適用於小結構的問題.
而且,對於遞迴,我們還要關心另一方面是,所處理的小結構問題是不是可以拆解到
最後,問題小到可以使遞迴程序結束.
回頭繼續講程序 3. ,既然程序 1. 2. 是一對遞迴程序,要怎麼使遞迴停止?
首先我有 {A,B,C,D}, 經過程序 1. 然後程序 2. ,手上有 AB, 剩下 {C,D}.
接著再做程序 1. ,手上有 ABC, 剩下 {D}. 到最後會發現手上有 ABCD,
然後當我在程序 2. 要挑大於 D 的最小項元素時,卻挑不到東西,因為剩下 {}.
這就代表一個結尾. 所以程序 2. 可以修正為:
2. 接下來要關心子節點. 目前有 X_1,X_2,...X_i, 所以對 {X_i+1,X_i+2,...,X_n}
這些大於 X_i 的元素可以挑出最小的項目 X_i+1 做為 X_i 的子節點.
當挑出 X_i+1 的瞬間,執行程序 1.
以上 1. 2. 為向前搜尋的動作. 接著,必定要處理倒退的動作. 在程序 1. ,因為有
把一些分歧點放進堆疊,就像是把麵包屑沿路丟下做記號,順著記號倒退到前一個岔路,
就可以找到下一個搜尋的去處了.
4. 因為剩下 {}, 只好根據手上的 ABCD 回頭,直接把最後一個, D, 丟掉,剩下 ABC.
5. 由於程序 4. ,已經退到 ABC, 但 C 是分歧點所以丟掉, 剩下 AB. 再看看
堆疊,此時是
|DCBDCD
所以取出 D, 堆疊剩下
|DCBDC
而手上得到 ABD.
接下來是一個新的開始,請走程序 1.
程序 4. 5. 然後程序 1. 2. ,這整個看起來也是遞迴程序. 基本上是 1. 2. 遞迴,
有時諱言伸出 4. 5. 接下來問題就是,包含了程序 1. 2. 4. 5. 的遞迴要怎麼結束?
還記得,遞迴程序 1. 2. 的底是當已經沒有大於手上最後一個項目的元素時,遞迴結束.
這是處理子節點的部份.
至於遞迴程序 1. 2. 4. 5. 就要處理到平輩節點, 而我們用 stack 處理平輩節點,
所以想當然是當 stack 清空了,完整的遞迴程序就結束了.
----------------
這樣寫好長喔, 先休息一下.
----------------
接下來是實作. 我用 C 語言來實作.
首先, stack 是一定要寫的,先列個綱要,細節省略:
#define STACK_SIZE 80
struct Stack { int top; char data[STACK_SIZE]; };
void init(struct Stack *s)
void push(struct Stack **s, char data)
char pop(struct Stack *s)
int is_full(struct Stack s)
int is_empty(struct Stack s)
int size(struct Stack s)
在程序 1. 需要處理平輩節點. put_siblings 函數將大於某元素的集合取出,
反序放入堆疊:
void put_siblings(struct Stack **s, char e, char* a, int l) {
int i, j;
for (i=0; e>=a[i]&&i<l; i++);
for (j=l-1; j>=i; j--) {
push(s, a[j]);
}
}
以上其中 e 是比對元素, a 是集合, l 是集合陣列長. a 陣列內定為由小排到大
的字母,使用時請自行手動排序.
在程序 2. 我需要取陣列的最後一個元素:
char last(char* a, int l) {
return a[l-1];
}
另外還要有一個 min_of_greater 函數, 求大於指定元素的最小元素:
char min_of_greater(char e, char* a, int l) {
int i;
for (i=0; e>=a[i]&&i<l; i++);
return (i == l)? 0: a[i];
}
以上其中可能有找不到項目的狀況, 用傳回 0 表示找到空集合 {}.
基本工作定好了,遊戲就開始了. 首先,向前搜尋我取名為 breed (繁殖),
程式大意是說: 對任一非空字串 str (長度為 lstr), 其目前的字串組合可以印出.
然後由程序 2. 找大於最後一個字母 (以 last 函數取最後一個字母) 的集合中
最小元素 (由 min_of_greater 求之), 如果找出空集合 (由 0 表示找出的是空集合)
就進行程序 4. 5. 然後 1. 等等. 否則如果找得到大於最後一個字母的最小元素,
就把找出的最小元素當作子節點,同時把大於這個新的子節點的其他集合元素推入堆疊
(由 put_siblings 進行), 然後遞迴進行 breed 函數.
void breed(char* str, int lstr, char* set, int lset, struct Stack *s) {
char last_char, mog;
void backtrack(struct Stack *s, char* str, int lstr, char* set, int lset);
printf("%s\n", str);
last_char = last(str, lstr);
mog = min_of_greater(last_char, set, lset);
if (mog == 0) {
backtrack(s, str, lstr, set, lset);
} else {
lstr = lstr + 1;
str[lstr-1] = mog;
str[lstr] = '\0';
put_siblings(&s, mog, set, lset);
breed(str, lstr, set, lset, s);
}
}
下一段是程序 4. 開始的 backtracking. 我取名為 backtrack 函數:
void backtrack(struct Stack *s, char* str, int lstr, char* set, int lset) {
int stack_size;
stack_size = size(*s);
if (stack_size == 0) {
return;
} else {
char ch;
lstr = lstr - 2;
str[lstr] = '\0';
ch = pop(s);
lstr = lstr + 1;
str[lstr-1] = ch;
str[lstr] = '\0';
breed(str, lstr, set, lset, s);
}
}
在 backtrack 函數中,我認定 stack 如果清空了,就可以結束所有的工作.
而如果堆疊有東西,另外還要有一個前置狀態為手上的資料起碼有二個可以刪掉,
意思是先退後一個節點,刪掉一個分歧點,然後從堆疊中找下一個點做新的分歧點.
當然,程式一開始的狀態是: 手上有一個點 A, 堆疊中已經放好 |DCB ,
並且集合列表的字母是排序的. 如主程式:
#define STRING_LEN 80
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[STRING_LEN] = "A";
int lstr = 1;
char set[4] = "ABCD";
int lset = 4;
struct Stack *stack = malloc(sizeof(struct Stack));
init(stack);
put_siblings(&stack, str[0], set, lset);
breed(str, lstr, set, lset, stack);
return 0;
}
----------------------
執行情況:
----------------------
$ gcc -o sos sos.c;./sos
A
AB
ABC
ABCD
ABD
AC
ACD
AD
B
BC
BCD
BD
C
CD
D
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.160.212.16
... <看更多>