零.前言
這學期我們開設了演算法設計與分析這堂課,出于對這位大佬(是我們哈工大深圳的博士生導師)博導的喜愛和對演算法的興趣,我打算寫一系列的博文來記錄我的一個學習程序,博主在重要的部分錄了音,將十分詳細地還原授課內容,力求將大佬的思想和方法講透徹,提升自己的同時,也將這些內容分享給大家,
本篇文章是為緒論,即簡單介紹了一下演算法,上學期看了《大話資料結構》這本書,很喜歡里面的講課方式,下面我也將和老師身份互換,以第一人稱上這堂課,
目錄
1.自我介紹
2.教材
3.什么是演算法
4.計算與演算法的定義
1.計算
2.演算法
5.關于演算法
1.演算法的來源
2.最早的演算法--歐幾里得求最大公因子演算法
6.偽代碼
7.什么是問題
8.為什么要學演算法
9.資料的重要性
10.本課目標
11.總結
11.演算法設計者的問題
1.自我介紹
同學們好!歡迎來學習我的演算法課,我的辦公室在資訊樓,你有事情可以來找我,雖然我經常不在辦公室,所以大家有什么事情可以在qq群里反饋,也可以反映給你們的助教,不過我更希望你給我發郵件,其實我們技術人員用郵件最多,就像明星總是聚集在微博中一樣,
下面我們來上課,《演算法設計與分析》是非常非常重要的一門課,我們先說一說我們哈深計算機的大部分出路,一條是出國,一條是讀研成為這一領域的研究人員,還有一條是進大廠,對吧,我想你們相當大的一部分會選擇進大廠,做“新時代的農民工“(開個玩笑)對不對,我們說進大廠一般有三個崗位對不對,哪三個崗位大家可以說一下嗎?
演算法崗,測驗崗,開發崗對不對,那么一般情況下大家會覺得演算法好一點,薪資來說一般是演算法高于開發,高于測驗,所以經常有同學問我,我是去大廠的開發崗,還是去小廠的測驗崗,我也不好說,所以一般情況下我們會認為去大廠的演算法崗好一點,所以為了實作這個目標,我們一定要把我們這門課好好學習,
2.教材
我們這門課有教材,這個教材呢,大家都應該有所耳聞,就是這本演算法導論,

我從16年開始上這門課,一直用的是這本書,這本書有沒有同學看完了?我向大家匯報一下,實話實說,我還沒看完,所以這學期我不建議大家從頭到尾全都看完,畢竟時間有限,你們還只是本科生,我們要學什么看什么,這本書已經在一定程度上很完備了,但是寫作風格不太適合你們,外國人寫的這本書比較全,比較深奧,理解起來會比較吃力,如果你只想考個七八十分,每天來上課就足夠了,如果你想考的更高的話,就要多多思考,大學的自學能力也很重要,暫時將這本書當成字典來用,所以要跟著老師的思路走,把老師的講義搞懂,是真的要看懂,不是把里面每一個字看懂,而是把背后的意思看懂,有可能的話去做一些課后題,對你能力的提升有很大的幫助,
也要多刷題,到leetcode上刷,從簡單題到中等題到難題,現在內卷如此嚴重,我以前很少要求大家去刷題,但刷題其實真的是一個提升自己的程序,在刷題中要注入自己的思考,
3.什么是演算法
什么是演算法?演算法是計算機領域的皇冠,或者說是皇冠上的明珠,我認為計算機領域最重要的兩門課之一,另一門就是資料結構,在數學和計算機科學之中,演算法/算則法(Algorithm)為一個計算的具體步驟,常用于計算、資料處理和自動推理,
舉幾個演算法的例子,不知道大家以前是否參加過一個數學競賽叫“祖沖之杯”,里面就有這種演算法的題目,比如煉訓割圓術,在圓中放多邊形,多邊形的邊數n越大,這個多邊形面積就越接近這個圓的面積,不過很遺憾,當時還沒有提出極限這一概念,所以總是差一點點,
比如加減乘數四則運算也是一種演算法,還有上學期學的,也經常用到的最小生成樹,
演算法有什么用,在一些公司中,一個好的演算法可以節省大量的人力物力,尤其是需要處理龐大的資料時,一個好的演算法可以甚至可以幫公司省下上億的資產,其實我們的生活的方方面面都被演算法給深入地浸入了,我們看抖音,抖音的視頻是不是一打開軟體就是你想看的,比如你經常看小姐姐,那么它給你推的·是不是就都是小姐姐的視頻了,當你在地鐵上把手機拿出來,打開抖音,,,,或者當你想在京東上買一雙皮鞋,你甚至會發現不只是在京東,在qq看點,在百度上都有向你推薦皮鞋的廣告,我們發現我們的生活甚至被演算法給操縱了,看的啥推的啥,你的抖音和我的抖音都不一樣,每個人都被對自己獨特的演算法分析著,影響著,
4.計算與演算法的定義
1.計算
可由一個給定計算模型機械地執行的規則或計算步驟序列稱為該計算模型的一個計算,
計算模型可以是圖靈機,也可以是其他計算模型,一個計算機是一個計算(計算模型是計算機),計算可能有用不停止--不是演算法,
2.演算法
演算法是一個滿足以下步驟的計算:
有窮性:有限步內必須停止,
確定性:每一步都是嚴格定義的操作,
能行性:每一個動作都能被精確地機械執行,
輸入:有一個滿足給定條件的輸入,
輸出:滿足給定約定條件的結果,
5.關于演算法
1.演算法的來源
中文名字“演算法”來源于周髀算經(公元前一世紀),
英文名字“Algorithm”來自于9世紀波斯數學家花拉子米(al-Khwarizmi),后面在說某個國家數學很厲害,但我沒聽清(捂臉),
2.最早的演算法--歐幾里得求最大公因子演算法
定理:兩個數的最大公約數等于兩個數中較小的那個數和這兩個數相除余數的最大公約數,
定理是需要證明的,但公理不需要證明,感興趣的同學自己證明一下,
int euclid(int m, int n){
int r;
do{
r = m % n;
m = n;
n = r;
}while(r!=0);
return m;
}
這段代碼就是這個演算法的基本操作,你們都學過了高級語言程式設計和資料結構,別跟我說看不懂這段代碼的內容,
我們知道世界上的大學有兩種體系,是德國的鴻寶體系(有點沒聽清楚,百度沒查到,,)和美國的費曼體系,鴻寶體系是什么呢,鴻寶體系就是德國在19世紀中葉建立起來的大學體系,就是嚴格按照教學,老師講,學生記,學生學,就是這種教學體系,另一種體系是美國教育學家費曼他提出來辦大學其實很簡單,只要找到足夠的錢,只要把全國最優秀的年輕人聚集到一起,放在同一間教室,給他們最好的條件,讓他們能找到他們想找到的任何知識,然后互相交流,甚至都不需要老師來講,從而實作世界上最好的大學,你們的分數也都很高,但是你們不要指望老師把什么都交給你,我們這里沒有學渣,至少高三的時候都是學霸,要把自己當成精英,老師講的都是白米飯,如果想吃到大魚大肉一定要自己多學,好好利用這里的條件,可以自己搞一個演算法小組啊,一起討論研究一下,多刷刷leetcode你們一定會受益匪淺的,如果這段代碼看不懂你就不配在我們工大讀書,你的高考成績一定是有水分的,忘記的同學要好好復習C語言相關的內容,
6.偽代碼
講到這里我要問一下大家,有沒有學過偽代碼嗎?我默認你們都學過而且都會寫,我這里有一個偽代碼的教程,回頭發給大家,不會的一定要看,(想要的可以私聊博主啊!)
7.什么是問題
設Input和Output是兩個集合,一個問題是一個關系RíInput′Output,Input稱為問題R的輸入集合,Input的每個元素稱為R的一個輸入,Output稱為問題R的輸出或結果集合,Output的每個元素稱為R的一個結果,
注意:問題定義了輸入和輸出的關系,
?排序問題定義如下:
輸入集合Input={<a1,…,an>|ai是整數}
輸出集合Output={<b1,…,bn>|bi是整數, b1£….£bn}
問題SORT={(<a1,…,an>,<b1,…,bn>)|<a1,…,an>?Input, <b1,…, bn>?Output,{a1, …, an}={b1, …, bn}}
問題就是輸入和輸出的關系,把問題數字化了,
好比一個導航系統,輸入是什么?這些大廈,食堂,街道之類的,輸出是什么?就是一個最優路徑,這也涉及到數學中圖論的內容,演算法和數學是分不開的,學好演算法的同時,還要學好數學的內容,
8.為什么要學演算法
同學們,你們為什么要學演算法?為了進大廠?好,同學們你們為什么學計算機?,我們學校招1000多個人,有五百個是計算機專業,一半,我們先休息幾分鐘回來再說,
好,為什么要學習計算機?為了就業,所以現在計算機為什么這么火,是就業造成的,你們怎么學的計算機?現在編程在初高中其實還并不普遍,你們大多數人都不會特別了解計算機,多半是老師推薦,家長推薦,學長推薦,所以你們選對了嗎?選對了,如今很多的甚至有化學專業的報研究生的都報了計算機,學電子的,學機械的,學航天的報了計算機,
20年前,或者15年前,你們知道哪個專業是最火的嗎,是通訊,計算機不行,計算機當時只能寫一些網頁,當時中國有四家企業,叫“巨、大、中、華”,分別是巨龍通信,大唐電信,中興通訊,華為這四家公司,巨龍已經沒了,大唐是消失邊緣,中興也沒有以前的輝煌了,現在干的最好的就是華為,當時的通訊公司,諾基亞,愛立信,摩托羅拉,現在是不是基本要消失了,所以這就是行業的發展,我們的同學一般都想進華為,騰訊,還有一些最近很火的游戲行業,工資基本都是很高的,現在都不是特別想進通訊行業了,我們的基本薪資在各行業中也算是高的,
1.演算法是計算機解決問題的基礎,毫無疑問計算機是為了解決我們日常生活中的基本問題的,
2.演算法是有用的,這是廢話
3.演算法是有趣的,
不知道你們記不記得打敗圍棋界各大高手的阿爾法go,你們很小的時候也有一個機器人“深藍”,記不記得下國際象棋是冠軍,基本都是碾壓式的打敗,基本已經不可能有人類戰勝計算機了,幾幾年的事情,就那個時候人們都知道演算法這個東西了,打敗了我們人類的棋類冠軍,還有那個機器人跑酷,會翻跟頭,有一家公司經常會發機器人的各種運動的視頻,這些都基于什么,是不是演算法呀,所以我們說演算法是不是太牛了,以后機器人一定會代替人類所有的體力勞動,你們可能現在玩的吃雞呀,王者榮耀什么的,之前看新聞已經有人工智能擊敗人類的了,我不太懂怎么玩啊,我已經好多年沒有玩游戲了,因為我發現了有比游戲更好玩的東西,
大家看現在的自動駕駛,華為在搞,百度在搞,特斯拉在搞,以后可能會解放雙手代替汽車的,如果人人有一輛事故率和堵車率一定會降低的,還有一段視頻,那個(英美達?沒聽清)的老板,一段演講的視頻,是完全虛擬生成的,他根本就沒做這段報告,虛擬出來的,非常真實,這樣的話你們什么都可以被虛擬出來,非常可怕,我現在有一個學生在做什么呢,在做基于音樂的舞蹈,就給一段音樂,就輸出來一段人跳的舞蹈,非常真實,看不出破綻,我有一個師弟在創業公司做一個(唉,沒聽清)拿著幾千萬的工資,
所以你看人類在棋類已經被打敗了吧,隨著機器人對人類各種勞動的模擬替代,這個潘多拉魔盒就打開了吧,現在在游戲領域人類也被打敗了,大公司都在拼了命的搞演算法,騰訊,阿里,招那些搞演算法的年輕人們,華為有個天才少年,給兩百萬,那么一下子薪資標準往上猛漲,別說大廠,現在稍微像一點樣子的公司都在花費巨額資金招攬那些演算法天才們,所以你看全部都是計算機,你看現在家長群里也是,問我我的孩子能不能報哈工大計算機,如果可以報我就上,不能報我就去別的學校了,計算機對社會的發展非常重要,而且比較容易有成就感,你學的多了你會發現計算機這個行業非常非常有趣,不要只局限于賺錢上,其實博主的感覺也是一樣,那些真正搞科研搞到一定程度的人,源動力一定不是錢了,否則不會有那么高的成就,
博主有一個華5的研究生學長,是學化學的,我當時問他畢業年薪大概多少,他說10萬左右,我當時想會不會有點少,要知道華5最差的專業有的也比我們哈深最好的計算機專業分高,可能是我們薪資的三分之一或者二分之一,但我想不一定有趣,這也許就是好多碩士跨考計算機的原因吧,
9.資料的重要性
當我們能夠獲得的資料越來越多,演算法就越來越重要,學好演算法可以幫助你們找到喜歡的作業,毫無疑問,我認為人工智能能夠這么火,就是大資料與高算例,以及基于大資料與高算例的深度網路演算法的發展,造成了這么火的計算機演算法領域,同學們知道人工智能的三要素嗎?演算法,資料,算例,我們要學習的只有三分之一哦,你們認為三要素里最重要的是什么呢,我個人認為是資料,你有好的資料,哪怕演算法一般,也很有可能讓這個資料算的很好,我打一個比方,資料就好比是一個食材,演算法就好比是一個廚師,你廚師做的菜再好,食材不行,仍然無法做出高水平的食物,巧婦難為無米之炊,所以說資料是非常重要的,大家知道一家公司,到美國去上市,按照美國的規定,一些資料要交到美國審查,但是我們中國的規定不允許,屬于泄密,所以資料十非常重要的,像我們和一些有資料的公司或者醫院合作,我們研究出一些演算法,要寫論文,但是寫論文可以,第一作者必須是人家而不是我們,為什么呢?研究是我們做的呀,但資料是人家出的,只要用到人家的資料,我們就不能是第一作者,不做的話,有的是人需要這份資料來做,所以現在有很多地方的公司倒閉了,但他最值錢的東西就是他們的資料,所以現在也有大量的專門做資料的公司,有的一份資料就要好多錢,按秒收費的也有,當實驗需要大量資料的時候,開銷可想而知,所以也有很多人從事這種處理資料的作業,然后賣給一些需要這些資料的大廠,所以現在有一句話叫“人工智能人工做”,所以現在資料真的非常吃香,
另一個就是CPU,我當年讀博士的時候一臺筆記本就可以把所有資料都做了,但是現在我給我博士生上課用的那臺電腦,花了我40萬,我們還有老師花了300萬買這個,有些大廠要花幾千萬,你們的筆記本都跑不了大資料,你們做實驗一定要有大廠的支持或者學校的支持,你們的電腦只能處理一些很小的資料,真正能跑起來的都在機房里,你說你們一年6000多塊的學費,這些錢還不值CPU的電費呢,我們學校的機房溫度很高的,光膀子都不覺得冷,說話一定要喊出來才互相聽得見,你們有條件有機會的話一定要珍惜,你們進大廠的話一定要知道演算法只占三分之一,而且還不是排在第一位的三分之一,大家一定要清楚地認識,
10.本課目標
1.培養演算法分析與設計的能力,這意味著我們要掌握常見的演算法并擁有設計優秀演算法的能力,創新精神就是用來應用的,
2.理解演算法后面隱藏的歷史,你會發現新的問題,你了解的演算法和課本上不一樣怎么辦,了解他們創建的思想,思想很重要,
3.具有良好的演算法思維,并要熟練應用,語言是會過時的,但是資料結構和演算法永遠不會過時,
4.有時間看看演算法導論的書,多刷刷leetcode題,
11.總結
首先說明這個總結是博主寫的,感覺這樣寫文章還是很累的,有些口語我只能把它們轉化成書面語,說出來能聽懂,但寫出來我自己都有點懵,打算“賣血”買一個好的錄音筆,再去聽下一節課程(發抖),
寫這個專欄的目的呢是因為我很喜歡這個老師的課,也很喜歡演算法這一很有成就感的技術型搬磚方向,在提升自己的同時也分享給大家,我還是要宣告一下,這篇文章的內容如果大家感覺有哪些不對的地方(比如我沒聽清楚的地方都用藍色筆寫了)歡迎私信我,由于文體比較特殊,是我站在老師視角寫的,所以還是希望大家不要太過糾結于摳字眼(狗頭保命),把握文章主要想表達的大體方向,如果你非要認為我們老師哪里說得不對的話,,,,那就是我錄音錄的有問題,或者聽錄音聽的有問題,
還有最后一個所有演算法設計者經常要考慮的問題:
11.演算法設計者的問題
這里我用一張圖來表示全部內容,hiahiahia

希望你的的回答是

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298587.html
標籤:AI
