第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

算法簡(jiǎn)介

大家好,今天我們開始學(xué)習(xí)一個(gè)新專題 — 算法(Algorithm)。關(guān)于算法,我們?nèi)粘i_發(fā)中有很多應(yīng)用,介紹算法的書籍也有很多,其中涉及到的知識(shí)點(diǎn)和信息量都很龐大,這個(gè)專題我們重點(diǎn)針對(duì)基于 Java 語言實(shí)現(xiàn)的算法設(shè)計(jì)和應(yīng)用進(jìn)行講解,讀者也可以自己將其擴(kuò)展到其他語言的實(shí)現(xiàn)。本文我們主要先介紹一下算法是什么?為什么要學(xué)習(xí)算法?常用的算法有哪些?

1. 什么是算法(Algorithm)?

什么是算法呢?在維基百科中這樣定義的:

在數(shù)學(xué)和計(jì)算機(jī)科學(xué)中,算法是一個(gè)有限的、定義明確的、可在計(jì)算機(jī)上實(shí)現(xiàn)的指令序列,通常是為了解決一類問題或進(jìn)行計(jì)算。算法總是不含糊的,是作為執(zhí)行計(jì)算、數(shù)據(jù)處理、自動(dòng)推理等任務(wù)的規(guī)范。 — 維基百科

通俗一點(diǎn)來說,算法就是用來解決一類問題或者進(jìn)行計(jì)算的,但是需要有一個(gè)明確的數(shù)學(xué)或者計(jì)算機(jī)科學(xué)定義,可以在計(jì)算指令上實(shí)現(xiàn)。

2. 為什么要學(xué)習(xí)算法?

前面說到算法是有明確的數(shù)學(xué)和計(jì)算機(jī)科學(xué)定義的,那我們?yōu)槭裁匆獙W(xué)習(xí)算法了?

2.1 作為基礎(chǔ)知識(shí)

算法其實(shí)是一種通用的基礎(chǔ)知識(shí),算法本身與任何計(jì)算機(jī)編程語言、操作系統(tǒng)等無關(guān);算法是定義良好的通用的計(jì)算過程。比如我們?cè)趯W(xué)習(xí) Java 語言的時(shí)候,發(fā)現(xiàn)里面有很多關(guān)于數(shù)組(Array),集合(Set),哈希表(Map)等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)底層都涉及到了算法知識(shí)。學(xué)習(xí)算法知識(shí)有助于我們可以更好地理解編程語言的一些內(nèi)部實(shí)現(xiàn),幫助我們理解其中的函數(shù)設(shè)計(jì)思路及底層代碼實(shí)現(xiàn)邏輯。

算法作為基礎(chǔ)知識(shí),學(xué)習(xí)算法就等于是學(xué)習(xí)數(shù)學(xué)、操作系統(tǒng)、數(shù)據(jù)庫等大學(xué)基礎(chǔ)課程一樣,有助于我們培養(yǎng)良好的計(jì)算機(jī)基礎(chǔ)理論知識(shí),有助于自己更好的職業(yè)生涯發(fā)展。

2.2 解決實(shí)際問題

現(xiàn)實(shí)生活中的很多實(shí)際問題都可以歸結(jié)到某種算法實(shí)現(xiàn),比如我們經(jīng)常用到的地圖導(dǎo)航軟件,不知道大家有沒有思考過導(dǎo)航軟件是如何為我們規(guī)劃出出行路線規(guī)劃的了?其實(shí)里面就會(huì)涉及到算法領(lǐng)域的一些圖算法知識(shí)(這里不做過多介紹,在后續(xù)的章節(jié)里面會(huì)有詳細(xì)說明)。

還有現(xiàn)在很多的抖音小視頻 APP,大家都發(fā)現(xiàn)一不小心刷個(gè)抖音就過去了一個(gè)小時(shí)了,為什么推薦給你的小視頻會(huì)對(duì)你如此有吸引力了?其實(shí)這是因?yàn)樵诙兑魞?nèi)部實(shí)現(xiàn)中有一套規(guī)則復(fù)雜的視頻推薦算法,可以給每個(gè)用戶推薦自身喜歡看的小視頻。

總而言之,算法知識(shí)可以用來解決現(xiàn)實(shí)生活和開發(fā)場(chǎng)景中的各種問題。

2.3 求職者的必備基礎(chǔ)知識(shí)

現(xiàn)在大家去一些稍微好一點(diǎn)大廠求職,無論你是做哪個(gè)開發(fā)崗位,如果說自己對(duì)算法知識(shí)一點(diǎn)都了解,估計(jì)肯定會(huì)被面試官戲弄一番了。其實(shí),基礎(chǔ)算法知識(shí)及對(duì)應(yīng)的邏輯思維已經(jīng)成為每個(gè)互聯(lián)網(wǎng)公司招聘開發(fā)崗求職者的一個(gè)必備條件了。在 BAT 這種大廠里,算法知識(shí)可能就是技術(shù)面試中的一個(gè)極為重要的環(huán)節(jié)了。所以,學(xué)習(xí)一些算法知識(shí),有助于我們?cè)诿嬖囍忻摲f而出。

3. 算法好壞的評(píng)價(jià)標(biāo)準(zhǔn)是什么?

當(dāng)大家針對(duì)同一個(gè)問題都各自設(shè)計(jì)出自己的算法出來時(shí),我們?nèi)绾螌?duì)算法的好壞做出評(píng)判呢?首先,算法必須是正確的,意思就是算法可以正確地解決問題。當(dāng)滿足這一前提條件之后,我們還需要哪些條件來判斷算法的好壞呢?主要有以下兩點(diǎn):

  • 時(shí)間復(fù)雜度 :時(shí)間復(fù)雜度就是判斷這個(gè)算法解決某個(gè)實(shí)際問題所需要花費(fèi)的時(shí)間周期是多少,時(shí)間越短,說明算法設(shè)計(jì)得越好。
  • 空間復(fù)雜度:空間復(fù)雜度就是說這個(gè)算法在解決實(shí)際問題時(shí)計(jì)算機(jī)設(shè)備需要消耗多少內(nèi)存空間,需要消耗的內(nèi)存空間越少,說明算法設(shè)計(jì)得越好。

當(dāng)比較算法的好壞時(shí),我們需要在相同的實(shí)驗(yàn)環(huán)境下進(jìn)行測(cè)試。同時(shí),在日常的開發(fā)實(shí)踐中,很多時(shí)候我們?cè)谠O(shè)計(jì)算法時(shí)需要綜合考慮算法的時(shí)間復(fù)雜度和空間復(fù)雜度,以便可以達(dá)到一個(gè)更好的平衡。

4. 學(xué)習(xí)基礎(chǔ)

  1. 學(xué)習(xí)這門課程首先至少需要會(huì)一門編程語言,最好是 Java 語言,因?yàn)榻酉聛淼氖纠绦驎?huì)選擇用 Java 語言編寫。
  2. 有一定的數(shù)學(xué)基礎(chǔ),可以理解一些數(shù)學(xué)定義。