久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

談一談|對小白學(xué)習(xí)算法的建議

 算法與編程之美 2020-08-08

前言

數(shù)據(jù)結(jié)構(gòu)與算法是一門很重要的科目,,在目前數(shù)據(jù)化時代也起著至關(guān)重要的作用,,在以后面試以及工作中起著至關(guān)重要的作用。今天我們就來談一談數(shù)據(jù)結(jié)構(gòu)與算法中的算法,,在百度詞條中,,算法是指解題方案的準(zhǔn)確而完整的描述,是一系列解決問題的清晰指令,,算法代表著用系統(tǒng)的方法描述解決問題的策略機(jī)制,。通俗的來講,,算法就是解決某一實(shí)際問題的,如果一個小白想要開始學(xué)習(xí)算法,,怎么做才能最高效呢,?

必備基礎(chǔ)

算法的特征:

有窮性(算法的有窮性是指算法必須能在執(zhí)行有限個步驟之后終止)
確切性(算法的每一步驟必須有確切的定義)
輸入項(xiàng)(一個算法有0個或多個輸入,以刻畫運(yùn)算對象的初始情況

輸出項(xiàng)(一個算法有一個或多個輸出,,以反映對輸入數(shù)據(jù)加工后的結(jié)果

可行性(也稱之為有效性),。

影響算法優(yōu)劣的因素:時間復(fù)雜度,空間復(fù)雜度,,正確性,,可讀性,健壯性(也稱容錯性)

這些基礎(chǔ)知識掌握后,,就繼續(xù)看筆者學(xué)習(xí)算法的經(jīng)驗(yàn)吧,。

經(jīng)驗(yàn)分享

筆者初學(xué)算法的時候是大一想要參加程序競賽,讓自己的大學(xué)生活不是那么頹廢,,然后就突然覺得學(xué)習(xí)算法挺有意思的,,就學(xué)上了,所以興趣是最好的老師,,接下來進(jìn)入正題,。

我們要明確算法是有很多種,多到這一輩子都學(xué)不完,,我們重點(diǎn)是掌握一些常用的算法,,這些學(xué)會了以后小伙伴們可以根據(jù)自己的方向去鉆研。以下這些就是算法學(xué)習(xí)之路必須攻克的關(guān)卡:排序類算法,,動態(tài)規(guī)劃,,貪心算法,遞歸,,回溯類算法,。學(xué)好這些其實(shí)就兩步,練習(xí)過后理解,,理解過后再練習(xí),,如果覺得沒掌握,就再來一次,,反復(fù)著來,,怎么都可以掌握,這是總體學(xué)習(xí)的方針,。下面針對不同算法來做一下講解吧。

排序類算法

筆者認(rèn)為排序類算法是眾多算法中最簡單的一類算法,,排序本質(zhì)其實(shí)就是比較大小,,不同的排序方法只是比較大小的方式有所差異,大家多理解其中的差異就可以很輕松地掌握不同的排序方法,面對眾多的排序算法,,就一下幾種常用:冒泡排序,,選擇排序,插入排序,,快速排序,,堆排序。這些排序看理論很好懂,,代碼也好懂,,大家稍微用一點(diǎn)心就可以看懂的。

動態(tài)規(guī)劃

重點(diǎn),!在一類問題中,,可能會有許多可行解。動態(tài)規(guī)劃算法可以幫助我們在這些可行解里面找出最優(yōu)解,。其基本思想也是將待求解問題分解成若干個子問題,,先求解子問題,然后從這些子問題的解得到原問題的解,。我們可以用一個表來記錄所有已解的子問題的答案,。不管該子問題以后是否被用到,只要它被計(jì)算過,,就將其結(jié)果填入表中,,最后通過這個表來得到最優(yōu)答案。我們一起來看一道力扣平臺上比較簡單的動態(tài)規(guī)劃題目:

輸入一個整型數(shù)組,,數(shù)組里有正數(shù)也有負(fù)數(shù),。數(shù)組中的一個或連續(xù)多個整數(shù)組成一個子數(shù)組,求所有子數(shù)組的和的最大值,。

示例1:

輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]

輸出: 6

解釋: 連續(xù)子數(shù)組  [4,-1,2,1] 的和最大,,為 6。

在這道題里,,目標(biāo)是找連續(xù)子集的最大和,,這道題我們創(chuàng)建數(shù)組dp吧,用dp[i]代表以元素 nums[i] 為結(jié)尾的連續(xù)子數(shù)組最大和,。所以dp[0]為-2,,dp[1]為max[dp[0],dp[0]+nums[1]], dp[2]為max[dp[1],dp[1]+nums[2]],一次類推,最后我們在dp里就找到了和題目相符合的解了,,是不是很簡單呀,。解決了第一道此類型的題目后,以后的就會感覺輕松很多,,練習(xí)再理解,,理解再練習(xí),,反復(fù)著來,很快就會了,。

貪心算法

貪心算法(又稱貪婪算法)是指,,在對問題求解時,總是做出在當(dāng)前看來是最好的選擇,。也就是說,,不從整體最優(yōu)上加以考慮,算法得到的是在某種意義上的局部最優(yōu)解,。都是最優(yōu)解,,那貪心和上面的動態(tài)規(guī)劃有什么區(qū)別呢?動態(tài)規(guī)劃最后得到的結(jié)果是從整體出發(fā)的,,而貪心就是從局部,,比如平時購物找零錢時,為使找回的零錢的硬幣數(shù)最少,,不要求找零錢的所有方案,,而是從最大面值的幣種開始,按遞減的順序考慮各面額,,先盡量用大面值的面額,,當(dāng)不足大面值時才去考慮下一個較小面值,這就是貪心算法,。動態(tài)規(guī)劃則會求出所有方案,。如需找零9元時,我們有1元,,3元和5元的硬幣,,用貪心算法只會得到(5,3,,1)一種結(jié)果,,動態(tài)規(guī)劃還可以得到(3,3,,3)這第二種結(jié)果,。

下面給大家一道經(jīng)典的背包問題,大家自己研究怎么貪吧:

有一個背包,,背包容量是M=150,。有7個物品,物品不可以分割成任意大小,。

要求盡可能讓裝入背包中的物品總價值最大,,但不能超過總?cè)萘俊?/span>

物品 A B C D E F  G

重量 35 30 60 50  40 10 25

價值 10 40 30 50  35 40 30

回溯類算法

這類算法其實(shí)就是指深度優(yōu)先搜索和廣度優(yōu)先搜索。這兩種道理很簡單,,但是實(shí)際運(yùn)用起來會很困難,,先用下面的圖來說明一下吧

我們要從A開始然后找到目標(biāo)點(diǎn)D,,我們可以沿著一種特定點(diǎn)進(jìn)行移動,無法移動時再按照某種方式進(jìn)行回溯,。

如果是深度優(yōu)先搜索,我們就按著一條線一直往下走,,無路可走時再回溯到起點(diǎn),,此時就是A-C-F,再是(A)-(C)-E-G,最后是(A)-B-D,連起來就是A-C-F-E-G-B-D,。(括號里是走過的點(diǎn))
廣度優(yōu)先搜索就是先走當(dāng)前點(diǎn)可以走的所有點(diǎn),,再走下一個點(diǎn)可到的所有點(diǎn),此時就是A-B-C,再(C)-E-F,再(B)-D最后(E)-G,連起來就是A-B-C-E-F-D-G
這就是回溯類算法最基本的思想,,想深入學(xué)習(xí),,大家就去力扣平臺上練題吧。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多