蜜桃av色欲a片精品一区,麻豆aⅴ精品无码一区二区,亚洲人成网站在线播放影院在线,亚洲 素人 字幕 在线 最新

微立頂科技

新聞資訊

創(chuàng)新 服務(wù) 價值

  程序員都應(yīng)該精通的六種算法,你會了嗎?

發(fā)布日期:2022/6/6 10:16:36      瀏覽量:

對于一名優(yōu)秀的程序員來說,面對一個項目的需求的時候,一定會在腦海里浮現(xiàn)出最適合解決這個問題的方法是什么,選對了算法,就會起到事半功倍的效果,反之,則可能會使程序運行效率低下,還容易出bug。因此,熟悉掌握常用的算法,是對于一個優(yōu)秀程序員最基本的要求。

那么,常用的算法都有哪些呢?一般來講,在我們?nèi)粘9ぷ髦猩婕暗降乃惴?,通常分為以下幾個類型:分治、貪心、迭代、枚舉、回溯、動態(tài)規(guī)劃。下面我們來一一介紹這幾種算法。

一、分治算法

分治算法,顧名思義,是將一個難以直接解決的大問題,分割成一些規(guī)模較小的相同問題,以便各個擊破,分而治之。

分治算法一般分為三個部分:分解問題、解決問題、合并解。

分治算法適用于那些問題的規(guī)??s小到一定程度就可以解決、并且各子問題之間相互獨立,求出來的解可以合并為該問題的解的情況。

典型例子比如求解一個無序數(shù)組中的最大值,即可以采用分治算法,示例如下:

def dividAndConquer(arr,leftIndex,rightIndex):

if(rightIndex==leftIndex+1 || rightIndex==leftIndex){

return Math.max(arr[leftIndex],arr[rightIndex]);

int mid=(leftIndex+rightIndex)/2;

int leftMax=dividAndConquer(arr,leftIndex,mid);

int rightMax=dividAndConquer(arr,mid,rightIndex);

return Math.max(leftMax,rightMax);

二、貪心算法

貪心算法是指在對問題求解時,總是做出在當(dāng)前看來是最好的選擇。也就是說,不從整體最優(yōu)上加以考慮,他所做出的僅是在某種意義上的局部最優(yōu)解。

貪心算法的基本思路是把問題分成若干個子問題,然后對每個子問題求解,得到子問題的局部最優(yōu)解,最后再把子問題的最優(yōu)解合并成原問題的一個解。這里要注意一點就是貪心算法得到的不一定是全局最優(yōu)解。這一缺陷導(dǎo)致了貪心算法的適用范圍較少,更大的用途在于平衡算法效率和最終結(jié)果應(yīng)用,類似于:反正就走這么多步,肯定給你一個值,至于是不是最優(yōu)的,那我就管不了了。就好像去菜市場買幾樣菜,可以經(jīng)過反復(fù)比價之后再買,或者是看到有賣的不管三七二十一先買了,總之最終結(jié)果是菜能買回來,但搞不好多花了幾塊錢。

典型例子比如部分背包問題:有n個物體,第i個物體的重量為Wi,價值為Vi,在總重量不超過C的情況下讓總價值盡量高。每一個物體可以只取走一部分,價值和重量按比例計算。

貪心策略就是,每次都先拿性價比高的,判斷不超過C。

三、迭代算法

迭代法也稱輾轉(zhuǎn)法,是一種不斷用變量的舊值遞推新值的過程。迭代算法是用計算機解決問題的一種基本方法,它利用計算機運算速度快、適合做重復(fù)性操作的特點,讓計算機對一組指令(或一定步驟)進(jìn)行重復(fù)執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時,都從變量的原值推出它的一個新值。最終得到問題的結(jié)果。

迭代算法適用于那些每步輸入?yún)?shù)變量一定,前值可以作為下一步輸入?yún)?shù)的問題。

典型例子比如說,用迭代算法計算斐波那契數(shù)列。

四、枚舉算法

枚舉算法是我們在日常中使用到的最多的一個算法,它的核心思想就是:枚舉所有的可能。枚舉法的本質(zhì)就是從所有候選答案中去搜索正確地解。

枚舉算法適用于候選答案數(shù)量一定的情況。

典型例子包括雞錢問題,有公雞5,母雞3,三小雞1,求m錢n雞的所有可能解??梢圆捎靡粋€三重循環(huán)將所有情況枚舉出來。代碼如下:


五、回溯算法

回溯算法是一個類似枚舉的搜索嘗試過程,主要是在搜索嘗試過程中尋找問題的解,當(dāng)發(fā)現(xiàn)已不滿足求解條件時,就“回溯”返回,嘗試別的路徑。

許多復(fù)雜的,規(guī)模較大的問題都可以使用回溯法,有“通用解題方法”的美稱。

典型例子是8皇后算法。在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問一共有多少種擺法。

回溯法是求解皇后問題最經(jīng)典的方法。算法的思想在于如果一個皇后選定了位置,那么下一個皇后的位置便被限制住了,下一個皇后需要一直找直到找到安全位置,如果沒有找到,那么便要回溯到上一個皇后,那么上一個皇后的位置就要改變,這樣一直遞歸直到所有的情況都被舉出。

六、動態(tài)規(guī)劃算法

動態(tài)規(guī)劃過程是:每次決策依賴于當(dāng)前狀態(tài),又隨即引起狀態(tài)的轉(zhuǎn)移。一個決策序列就是在變化的狀態(tài)中產(chǎn)生出來的,所以,這種多階段最優(yōu)化決策解決問題的過程就稱為動態(tài)規(guī)劃。

動態(tài)規(guī)劃算法適用于當(dāng)某階段狀態(tài)給定以后,在這階段以后的過程的發(fā)展不受這段以前各段狀態(tài)的影響,即無后效性的問題。

典型例子比如說背包問題,給定背包容量及物品重量和價值,要求背包裝的物品價值最大。








  業(yè)務(wù)實施流程

需求調(diào)研 →

團(tuán)隊組建和動員 →

數(shù)據(jù)初始化 →

調(diào)試完善 →

解決方案和選型 →

硬件網(wǎng)絡(luò)部署 →

系統(tǒng)部署試運行 →

系統(tǒng)正式上線 →

合作協(xié)議

系統(tǒng)開發(fā)/整合

制作文檔和員工培訓(xùn)

售后服務(wù)

馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     聯(lián)系人:石先生/雷先生