關於計算機編程中的算法問題,這2個案例的觀點值得去思考

2020-11-24 上世是朵花

首先寫本文之前,我先拋出一個問題,什麼是算法?用官方的話說就是

是一系列解決問題的清晰指令,算法代表著用系統的方法描述解決問題的策略機制

我自己的理解就是生活中的實際問題,轉化成數學問題去解決,將實際的抽象性問題轉換成數理性的問題去解決。算法的五大特徵是,有窮性,可行性,確切性,輸入,輸出。凡是任何一個算法都必須滿足這5個基本特徵,只要是數學問題,不存在模稜兩可的事情。哪怕是概率問題在數學裡專門有一門課程叫「概率論」與之對應,能將這些不確定問題進行數學化。

因此計算機編程的人都有一些數學基礎才行,這裡舉幾個常見的計算機編程算法,比如快速排序,歸併排序,遞歸,窮舉,貪心算法,漢諾塔算法,八皇后算法等等,這些算法有的需要數學理論,有的可能不太需要數學理論,但是有一點可以肯定的,比需要有智商才可以搞定的東西。

好了,關於算法我就談到這些,相信大家對算法已經有一定的概念了,大家在認識上也統一一下,達成一個共識,說了這麼多,我是為了表述一下我下面的2個觀點。

圖片來之網際網路

學歷高不一定算法強

算法首先需要有數學理論去做輔助才行,在工作中我有這樣一個同事他是數學系畢業的,但是他的算法我看也是一般般的,他的數學理論是很棒的,如微積分,傅立葉變換,德布羅意方程組,薛丁格方程,歐拉公式,麥克斯韋方程組等等,他都是非常了解熟悉的,但是解決實際算法問題他還不如一個專科畢業的一個程式設計師強呢,這是為什麼,數學理論不等同於算法,我個人理解為這樣一個公式 數學理論加持 + 邏輯設計組織 + 智商 = 算法能力。也就是數學理論強只能說對算法是有一定幫助的,但是數學理論強並不代表算法能力強,不完全等同的。

圖片來之網際網路

我下面再舉一個反面例子,這個倒是很典型,也是一個真實的案例,在20多年前的時候,當時上大學就是很了不起的,我們村裡出了一個大學生,這個大學生的數學也是一級的棒,有一次,市領導來探望他,並且還想讓他幫一個忙,市領導拿出了一張河南地圖,地圖上標有比例尺,讓他算一下河南的土地面積有多大,結果這個大學生花了4個小時愣是沒算出來,用各種公式計算,特別複雜,大家都是知道的,這個地圖不是標準的長方形,正方形,那曲曲折折的拐彎拐的暈頭轉向你怎麼能算出面積呀。真把這個大學生累的不行了,但是最後這個大學生的爸爸把這個問題算出來了,牛啊,他爸用的什麼算法啊,他爸用的算法的確挺牛,別急,在說他用的算法之前,我先隆重的介紹一下他的爸爸,他的爸爸是當地一個地地道道的農民,小學文化水平,好多字認識不全。

圖片來之網際網路

他爸的做法是,找了一個質量均勻的50cmX50cm的正方形塑料板,稱量一下這個正方形塑料板的重量,然後對著地圖把把這個塑料板按照地圖的形狀給畫下來,然後再稱一下地圖形狀的塑料板的重量,根據重量比,以及地圖的比例尺輕鬆算出土地面積。說到這裡是不是應該為這位爸爸鼓掌呀,說明他的算法能力也是很強的啊,起碼能說明他的智商也是很高的,只不過沒受過良好的高等教育罷了,要是他會高等數學,再加上會計算機編程的話,他一定是個牛人了。

圖片來之網際網路

算法不單單來源於知識,也需要經驗加持

我一直認為算法是來源於生活和人的大腦的一種產物,人們生活中遇到的問題,通過一定的數學機理在加上人的大腦的組織規劃就形成了算法,算法是很嚴密的一個東西,需要考慮到邊邊角角,要求對某一個步聚進行數位化,算法強需要有強大的知識體系做支撐,但是也需要有一定的生活經驗加持才行,畢竟算法就是用於解決生活中的問題嘛,如果過於研究理論,沒有一點生活經驗也會鬧出笑話了,我就以這樣一個段子為例來說明,相信這個笑話大多數人都聽過,就是一個家庭主婦被誤加到一個博士們的聊天群,群裡突然一人問道一滴水高空自由落體運動能不能把人砸死?問題一出,群裡異常活躍,速度,加速度的各種公式計算,討論了將近一個小時沒結果,結果家庭主婦在群裡問了一句難道大家都沒有淋過雨麼?頓時群裡安靜,呵呵。

圖片來之網際網路

算法其實就是用數學知識去解決生活中的實際問題,他是需要人類大腦的智慧將數學的知識巧妙的組合利用起來才能去解決生活中的實際問題,如果只是有一堆數學理論知識不會合理的運用那也是不行的,只能說有數學理論基礎的算法方面會更有優勢一些,但是不代表他們的算法會更強。

大家好,我是「上世是朵花」。如果你有什麼好的看法或者觀點可以在評論區展現你的才華,互動交流,如果想進一步了解我,那就關注我吧!

相關焦點

  • 最受歡迎的25本計算機編程書籍
    第1~7 章主要涉及面試流程解析、面試官的幕後決策及可能提出的問題、面試前的準備工作、對面試結果的處理等內容;第8~9 章從數據結構、概念與算法、知識類問題和附加面試題4 個方面,為讀者呈現了出自微軟、蘋果、谷歌等多家知名公司的150 道編程面試題,並針對每一道面試題目,分別給出了詳細的解決方案。
  • 為什麼要學計算機編程?
    編程是個求解問題的過程, 首先需要分析問題,抽象內容之間的交互關係,設計利用計算機求解問題的確定性方法,進而通過編寫和調試代碼解決問題,這是從抽象問題到解決問題的完整過程。計算思維的訓練過程能夠促進人類思考,增進觀察力和深化對交互關係的理解。編程能夠增進認識。
  • 物理不好,如何給量子計算機編程?
    該標準是從硬體的角度去衡量一個量子計算機的能力和有效性。QV 是一個基於不同因子計算所得的數值,例如計算機中量子位的數值、它們的連接性以及錯誤率的度量等。如果我們需要在實際的硬體上運行真實世界規模的算法,我們就需要一個很大的 QV 值。到目前為止,IBM 公司擁有 QV 值最大(32)的設備。
  • 計算機大數乘法引發的思考|CSDN 博文精選
    並不是,因為我不善於寫教程,而且這方面的資源已經夠多了,我再寫一遍徒增冗餘。我比較善於寫一些思考的過程。所以,我們按照相對常規的思路,循序漸進地來思考如何來優化程序。記住,準則只有一個,即讓計算的步驟變少!看看上面的代碼,算法完全模仿人類的手工豎式,按照十進位一位乘法來推進計算過程。但是這裡面有個根本的問題,猜猜看是什麼?
  • 計算思維≠編程,該如何培養孩子的計算思維?
    計算思維是為了便於人機的溝通,便於實現用計算機去解決問題,實現目的的一種思維方式。它不是要像計算機一樣思考,而是架起人機交流之橋梁的核心思維模式。在用計算思維解決問題時,人負責把實際問題轉化為可計算問題,並設計算法讓計算機去執行,計算機負責具體的運算任務,通過運算,達到人想要實現的工作目標,並將這個結果呈現出來,這就是計算思維裡的人機分工。
  • 在編程教育這方面 日本家長的眼光長遠得讓我們焦慮
    舉個例子,我們想通過編程畫一個正三角形,就先要將其分解轉化成計算機能夠理解的一個個小條件,例如「三角形的所有邊都一樣長」、「所有角的大小一樣」等等,當計算機逐個完成所有指示後,自然也就得到了我們想要的正三角形。
  • 臉書開源Detectron計算機視覺算法
    在我最近發表的一篇文章中,詳細介紹了當今增強現實技術即將面臨的三大挑戰,在這其中我注意到計算機進行實時對象分類是我們最大的技術難區之一:不僅僅只觀察一個形狀,讓計算機利用視覺去理解「杯子」的物體含義是一個值得深究的問題。這就是為什麼多年以來,我們在看到的增強現實技術演示中發現人們將基準標記附加到觀察對象上,從而促進機器與觀察物體之間更細緻的跟蹤和交互。
  • 量子計算機的算法模型初探
    其一,qubit是可疊加態(這意味著量子計算機可以進行真正意義上的並行計算),而bit必須只能取0或1之一;其二,qubit的演化必須是么正的,而bit之間如何變化沒什麼具體約束(一個簡單的例子:量子態的演化必須是可逆的,而傳統計算機裡很多邏輯門都是不可逆的,例如與非門)。
  • 計算機專業本科生編程能力弱,考研是否應該繼續選擇計算機專業
    即使自己並不擅長編程,這一點也不應該成為考研計算機專業的障礙,因為按照歷史經驗來看,很多編程能力比較弱的同學,在讀研的過程中也會逐漸提升自己的編程能力,這一點在跨考生身上有非常明顯的體現。實際上,在計算機專業的讀研過程中,對於編程能力的要求並不算特別高,很多方向對於數學能力的要求反而更高一些,比如大數據、人工智慧等方向就有比較明顯的體現。
  • 計算思維:編程教育的價值追求
    我們在「編程」的旅途中,時常有茫然失措、忘了初心的感覺。為什麼要踏上編程之旅?為什麼要帶孩子們一起編程?有個聲音不早不晚地出現:因為通過編程,可以讓孩子們擁有與讀、寫、算同等重要的認知能力——計算思維! 是的,計算思維是我們俯下身子和計算機對話的入口,也是編程學習漫漫歷程中對編程學科本質的一種洞見。
  • 秒懂機器人編程與計算機編程的區別
    機器人編程:機器人課程,不僅涉及編程的知識,還需要孩子們了解學習機械、工程、信息等方面的知識。很多時候要運用機械解決問題,強調動手能力。解決問題的過程可能狀況百出,需要細心觀察、耐心解決,更強調團隊配合能力。
  • 計算機大數乘法引發的思考 | CSDN 博文精選
    我們當然希望設計一種巧算的步驟,但在此之前,我們先設計一種 按部就班的算法,類似我們手算豎式一樣:人就是這麼算的,老老實實地按照十進位99乘法表,一個數字一個數字地進行計算,計算過程中處理進位。手工算豎式人人都會,說這些也無益,上周三下班的班車上,順手擼了一個代碼,感覺還好,發了個朋友圈就想分享出來,本周就休息一天,趕早起來就寫下了這篇文章。
  • 編程世界中的18個重要的算法
    下面是一些比較重要的算法,原文羅列了32個,但我覺得有很多是數論裡的,和計算機的不相干,所以沒有選取。
  • 計算機專業大學生怎麼學好編程?
    而對於剛接觸編程的人來說,更加的晦澀難懂。剛入門的小白很難能體會到編程中的樂趣,更不用說找到對編程感興趣的點。 對於如何判斷自身是否對編程感興趣,這篇文章裡我也已經說過了,就不再重複造輪子。
  • 除了編程,中小學領域計算機科學教育應該學什麼?
    另一新主張是人人都該學習編程 (Programming,Coding) 的說法,甚至美國總統與知名女星都為此說法發聲,這幾年下來讓學習編程快變成陳腔濫調了,事實上,此主張倒有其根據,根據美國勞工統計局預估,2020 年美國將約有 140 萬個計算機科學 (Computer Science,CS) 領域的職缺,但是只有約 40 萬個計算機科學本科畢業生,而 STEM 領域的新職缺有三分之二是計算機科學相關領域
  • 我是計算機專業,身邊同行沒一個讓孩子在三年級前學編程
    課程一開始人家的老師就表示:我們這門課的主旨是在培養編程思維,程式語言只是幫助我們形成這種思維的工具。這句話讓我瞬間知道了自己的問題之所在,也是現在很多少兒編程教育的癥結:本末倒置。編程本質上一種解決問題的手段,程式語言只是工具。要解決問題,最重要的是你要先有一個解決問題的思路,然後在通過手裡的工具去實現。
  • 資料| Python入門經典:以解決計算問題為導向的Python編程實踐
    from=leiphonecolumn_res0429內容簡介 《Python入門經典:以解決計算問題為導向的Python編程實踐》是一本系統而科學的Python入門教程,美國密西根州立大學等多所美國知名高校採用其作為程式語言的入門教材,被奉為經典。
  • 美國K-12CS《幼兒階段的計算機科學教育》指南解讀
    問題解決(迭代式策略)幼兒在探索周圍世界並與之互動時,自然會在日常生活中參與解決問題的過程。教師可以通過提問來揭示孩子的推理和思考過程(例如,你是怎麼知道的?是什麼讓你這麼認為?)以及提供結構化的方法來幫助孩子解決問題,從而幫助解決問題「可見」。在計算機科學中經常使用的一種這樣的方法是迭代開發過程。
  • 資料|MATLAB優化算法案例分析與應用(進階篇)
    from=leiphonecolumn_res0817內容簡介 · · · · · ·《MATLAB優化算法案例分析與應用(進階篇)》是深受廣大讀者歡迎的《MATLAB優化算法案例分析與應用》一書的姊妹篇,即進階篇。本書全面、系統、深入地介紹了MATLAB算法及案例應用。
  • 關於AI學習方法的思考——產品經理入門人工智慧
    好了,今天這篇文章我將向您分享我(作為產品經理)對入門人工智慧學習方法上的一些思考。我是一名網際網路產品經理,也希望進入AI領域。目前為止,我已經用了2個月的業餘時間學習入門知識,但還不能算是入門,原因就是人工智慧領域的概念過於寬泛,技術門檻較高。我先用這2個月的學習成果,分享一下我對於入門AI領域學習方法的思考,給大家拋個磚,也許能為大家節省一些時間。