国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

你需要知道的算法之基礎(chǔ)篇

Nino / 1263人閱讀

摘要:你需要知道的算法之基礎(chǔ)篇前言很多時(shí)候我們都會(huì)感慨要是當(dāng)時(shí)了多好啊,現(xiàn)在也不至于這樣難堪了。但是我們不可能又沒(méi)必要對(duì)每個(gè)算法進(jìn)行測(cè)試,只需要知道大概的哪個(gè)算法執(zhí)行所花費(fèi)的時(shí)間多,哪個(gè)花費(fèi)的時(shí)間少就行了。

你需要知道的算法之基礎(chǔ)篇 0 - 前言

很多時(shí)候我們都會(huì)感慨:要是當(dāng)時(shí)×××了多好啊,現(xiàn)在也不至于這樣難堪了。

后悔的時(shí)候千千萬(wàn),一覺(jué)醒來(lái)過(guò)眼云煙。

我也和蕓蕓眾生一樣在學(xué)校的時(shí)候沒(méi)有好好的理解思考一些東西,等到了真正需要用的時(shí)候才知道書(shū)到用時(shí)方恨少。有道是知錯(cuò)能改,那為什么有道 == 知錯(cuò)能改呢?下面請(qǐng)?jiān)试S我開(kāi)始真正的內(nèi)容:

本文通篇都是一些概念,但是你需要知道這些更有利于理解時(shí)間復(fù)雜度等一些概念是什么、怎么來(lái)的、為什么需要這個(gè)東西(what、where、why)。
1 - 算法

算法的定義是這樣的:解題方案的準(zhǔn)確而完善的描述,是一系列解決問(wèn)題的清晰指令。巴拉巴拉的,雖然是一小句但還是不想看(題外話:有時(shí)候吧專業(yè)名詞記下來(lái)面試的時(shí)候還是挺有用的),其實(shí)就是解決一個(gè)問(wèn)題的完整性描述。只不過(guò)這個(gè)描述就可能是用不同的方式或者說(shuō)是“語(yǔ)言”了。

2 - 算法的效率

既然算法是解決問(wèn)題的描述,那么就像一千個(gè)人眼中有一千個(gè)阿姆雷特他大姨夫一樣,解決同一個(gè)問(wèn)題的辦法也是多種多樣的,只是在這過(guò)程中我們所使用/消耗的時(shí)間或者時(shí)間以外的代價(jià)(計(jì)算機(jī)消耗的則為內(nèi)存了)不一樣。為了更快、更好、更強(qiáng)的發(fā)揚(yáng)奧利奧..哦不,提高算法的效率。所以很多時(shí)候一個(gè)優(yōu)秀的算法就在于它與其他實(shí)現(xiàn)同一個(gè)問(wèn)題的算法相比,在時(shí)間或空間(內(nèi)存)或者時(shí)間和空間(內(nèi)存)上都得到明顯的降低。

所以呢,算法的效率主要由以下兩個(gè)復(fù)雜度來(lái)評(píng)估:

時(shí)間復(fù)雜度:評(píng)估執(zhí)行程序所需的時(shí)間。可以估算出程序?qū)μ幚砥鞯氖褂贸潭取?/p>

空間復(fù)雜度:評(píng)估執(zhí)行程序所需的存儲(chǔ)空間。可以估算出程序?qū)τ?jì)算機(jī)內(nèi)存的使用程度。

設(shè)計(jì)算法時(shí),時(shí)間復(fù)雜度要比空間復(fù)雜度更容易出問(wèn)題,所以一般情況一下我們只對(duì)時(shí)間復(fù)雜度進(jìn)行研究。一般面試或者工作的時(shí)候沒(méi)有特別說(shuō)明的話,復(fù)雜度就是指時(shí)間復(fù)雜度。

2.0 - 時(shí)間復(fù)雜度

接下來(lái)我們還需要知道另一個(gè)概念:時(shí)間頻度。這個(gè)時(shí)候你可能會(huì)說(shuō):“不是說(shuō)好一起學(xué)算法嗎,這些東東是什么?贈(zèng)品嗎?”。非也非也,這是非賣(mài)品。

因?yàn)橐粋€(gè)算法執(zhí)行所消耗的時(shí)間理論上是不能算出來(lái)的,沒(méi)錯(cuò)正是理論上,so我們?nèi)稳豢梢栽诔绦蛑袦y(cè)試獲得。但是我們不可能又沒(méi)必要對(duì)每個(gè)算法進(jìn)行測(cè)試,只需要知道大概的哪個(gè)算法執(zhí)行所花費(fèi)的時(shí)間多,哪個(gè)花費(fèi)的時(shí)間少就行了。如果一個(gè)算法所花費(fèi)的時(shí)間與算法中代碼語(yǔ)句執(zhí)行次數(shù)成正比,那么那個(gè)算法執(zhí)行語(yǔ)句越多,它的花費(fèi)時(shí)間也就越多。我們把一個(gè)算法中的語(yǔ)句執(zhí)行次數(shù)稱為時(shí)間頻度。通常(ps:很想知道通常是誰(shuí))用T(n)表示。

在時(shí)間頻度T(n)中,n又代表著問(wèn)題的規(guī)模,當(dāng)n不斷變化時(shí),T(n)也會(huì)不斷地隨之變化。為了了解這個(gè)變化的規(guī)律,時(shí)間復(fù)雜度這一概念就被引入了。一般情況下算法基礎(chǔ)本操作的重復(fù)執(zhí)行次數(shù)為問(wèn)題規(guī)模n的某個(gè)函數(shù),用也就是時(shí)間頻度T(n)。如果有某個(gè)輔助函數(shù)f(n),當(dāng)趨于無(wú)窮大的時(shí)候,T(n)/f(n)的極限值是不為零的某個(gè)常數(shù),那么f(n)T(n)的同數(shù)量級(jí)函數(shù),記作T(n)=O(f(n)),被稱為算法的漸進(jìn)時(shí)間復(fù)雜度,又簡(jiǎn)稱為時(shí)間復(fù)雜度

2.1 - 大O表示法

用O(n)來(lái)體現(xiàn)算法時(shí)間復(fù)雜度的記法被稱作大O表示法

一般我們我們?cè)u(píng)估一個(gè)算法都是直接評(píng)估它的最壞的復(fù)雜度。

大O表示法O(f(n))中的f(n)的值可以為1、n、logn、n^2 等,所以我們將O(1)、O(n)、O(logn)、O( n^2 )分別稱為常數(shù)階、線性階、對(duì)數(shù)階和平方階。下面我們來(lái)看看推導(dǎo)大O階的方法:

推導(dǎo)大O階

推導(dǎo)大O階有一下三種規(guī)則:

用常數(shù)1取代運(yùn)行時(shí)間中的所有加法常數(shù)

只保留最高階項(xiàng)

去除最高階的常數(shù)

舉好多栗子

常數(shù)階

let sum = 0, n = 10; // 語(yǔ)句執(zhí)行一次
let sum = (1+n)*n/2; // 語(yǔ)句執(zhí)行一次
console.log(`The sum is : ${sum}`) //語(yǔ)句執(zhí)行一次

這樣的一段代碼它的執(zhí)行次數(shù)為 3 ,然后我們套用規(guī)則1,則這個(gè)算法的時(shí)間復(fù)雜度為O(1),也就是常數(shù)階。

線性階

let i =0; // 語(yǔ)句執(zhí)行一次
while (i < n) { // 語(yǔ)句執(zhí)行n次
  console.log(`Current i is ${i}`); //語(yǔ)句執(zhí)行n次
  i++; // 語(yǔ)句執(zhí)行n次
}

這個(gè)算法中代碼總共執(zhí)行了 3n + 1次,根據(jù)規(guī)則 2->3,因此該算法的時(shí)間復(fù)雜度是O(n)。

對(duì)數(shù)階

let number = 1; // 語(yǔ)句執(zhí)行一次
while (number < n) { // 語(yǔ)句執(zhí)行l(wèi)ogn次
  number *= 2; // 語(yǔ)句執(zhí)行l(wèi)ogn次
}

上面的算法中,number每次都放大兩倍,我們假設(shè)這個(gè)循環(huán)體執(zhí)行了m次,那么2^m = nm = logn,所以整段代碼執(zhí)行次數(shù)為1 + 2*logn,則f(n) = logn,時(shí)間復(fù)雜度為O(logn)。

平方階

for (let i = 0; i < n; i++) { // 語(yǔ)句執(zhí)行n次
  for (let j = 0; j < n; j++) { // 語(yǔ)句執(zhí)行n^2次
    console.log("I am here!"); // 語(yǔ)句執(zhí)行n^2
  }
}

上面的嵌套循環(huán)中,代碼共執(zhí)行 2*n^2 + n,則f(n) = n^2。所以該算法的時(shí)間復(fù)雜度為O(n^2 )

常見(jiàn)時(shí)間復(fù)雜度的比較

常見(jiàn)的時(shí)間復(fù)雜度函數(shù)相信大家在大學(xué)中都已經(jīng)見(jiàn)過(guò)了,這里也不多做解釋了:

O(1) 3 - 結(jié)語(yǔ)

曾經(jīng)有一份能夠在學(xué)校好好學(xué)算法的機(jī)會(huì),我沒(méi)有好好珍惜,直到失去的時(shí)候我才追悔莫及。

從今天開(kāi)始,我會(huì)好好的把之前很多自己沒(méi)有去理解的各種基礎(chǔ)、底層知識(shí)好好的嚼幾遍。與諸君共勉!

原文地址:點(diǎn)擊此處

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/92192.html

相關(guān)文章

  • 阿里路+Java面經(jīng)考點(diǎn)

    摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄业哪繕?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開(kāi)始了螞蟻金...

    姘擱『 評(píng)論0 收藏0
  • 自學(xué)人工智能數(shù)學(xué),數(shù)學(xué)入門(mén)并不難

    摘要:寫(xiě)本文的目的,希望結(jié)合眾家之長(zhǎng),試圖解決數(shù)學(xué)對(duì)機(jī)器學(xué)習(xí)入門(mén)的困擾。這里假設(shè)你上過(guò)大學(xué)的數(shù)學(xué)課,你就具備了機(jī)器學(xué)習(xí)的數(shù)學(xué)入門(mén)門(mén)檻了,之后的數(shù)學(xué)啃一啃是可以下來(lái)的。 寫(xiě)這篇文章很久想了很久,到底該怎么寫(xiě)? 關(guān)于數(shù)學(xué)與機(jī)器學(xué)習(xí)的關(guān)系,觀點(diǎn)很多。 寫(xiě)本文的目的,希望結(jié)合眾家之長(zhǎng),試圖解決數(shù)學(xué)對(duì)機(jī)器學(xué)習(xí)入門(mén)的困擾。 現(xiàn)在數(shù)學(xué)困擾大家主要有這幾個(gè)方面: 1、 機(jī)器學(xué)習(xí)需要的數(shù)學(xué)知識(shí)是不是很難,網(wǎng)上...

    fox_soyoung 評(píng)論0 收藏0
  • 自學(xué)人工智能數(shù)學(xué),數(shù)學(xué)入門(mén)并不難

    摘要:寫(xiě)本文的目的,希望結(jié)合眾家之長(zhǎng),試圖解決數(shù)學(xué)對(duì)機(jī)器學(xué)習(xí)入門(mén)的困擾。這里假設(shè)你上過(guò)大學(xué)的數(shù)學(xué)課,你就具備了機(jī)器學(xué)習(xí)的數(shù)學(xué)入門(mén)門(mén)檻了,之后的數(shù)學(xué)啃一啃是可以下來(lái)的。 寫(xiě)這篇文章很久想了很久,到底該怎么寫(xiě)? 關(guān)于數(shù)學(xué)與機(jī)器學(xué)習(xí)的關(guān)系,觀點(diǎn)很多。 寫(xiě)本文的目的,希望結(jié)合眾家之長(zhǎng),試圖解決數(shù)學(xué)對(duì)機(jī)器學(xué)習(xí)入門(mén)的困擾。 現(xiàn)在數(shù)學(xué)困擾大家主要有這幾個(gè)方面: 1、 機(jī)器學(xué)習(xí)需要的數(shù)學(xué)知識(shí)是不是很難,網(wǎng)上...

    txgcwm 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<