演算法 常用經典動態規劃應用場景總結

2021-08-18 05:56:04 字數 1645 閱讀 7861

1 給定乙個矩陣m,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有數字累加起來就是路徑和,返回所有路徑中最小路徑和,如果給定的m如大家看到的樣子,路徑1,3,1,0,6,1,0就是路徑中和最小的,所以返回12。

//矩陣m13

5981

3450

6188

40

解題思路:

生成大小和m一樣的矩陣dp,dp[i][j]的值表示從左上角,也就是(0,0)位置,走到(i,j)位置的最小路徑和。

dp第一行的值就是m第一行的值不斷累加的結果。

dp第一列的值就是m第一列的餓值不斷累加的結果。

dp[i][j]=m[i][j]+min(dp[i-1][j],dp[i][j-1])

2.給定陣列arr,返回arr最長遞增子串行長度。比如arr=[2,1,5,3,6,4,8,9,7],最長遞增子串行為[1,3,4,8,9],所以返回5。

思路:生成與arr長度相等的dp,dp[i]表示在必須以arr[i]這個數結尾的情況下,arr[0..i]中的最大遞增子串行長度。

arr: 2 1 5 3 6 4 8 9 7

dp: 1 1 2 2 3 3 4 5 4

判斷方法:求解以i為結尾的最大遞增子串行的長度,那麼在arr[0]-arr[i-1]中,所有比arr小的數,都有可能成為該最大遞增子串行的倒數第二個數,那麼在這麼多選擇中,以哪個數結尾的最大遞增子串行最大,那麼就選擇那個數作為倒數第二個數。

4 乙個揹包有一定承重w,有n件物品,每件都有自己的價值,記錄在陣列v中,也都有自己的重量,記錄在陣列w中,每件物品只能選擇要裝入揹包還是不裝入揹包,要求在不超過揹包承重的前提下,選擇物品中價值最大。

思路:

假設dp[x][y]表示前x件物品,不超過重量y的時候的最大價值。列舉以下第x件物品的情況:

情況一.如果選擇第x件物品,則前x-1件物品得到的重量不能超過y-w[x]。

情況二如果不選第x件物品,則前x件物品得到的重量不能超過y

所以dp[x][y]可能等於dp[x-1][y],也就是不取第x件物品時,價值和之前一樣。

也可能是dp[x-1][y-w[x]]+v[x],也就是決定拿第x件物品的情況,當然會獲得x物品的價值。

兩種可能性中,選擇價值最大的。dp[x][y]=max(dp[x-1][y],dp[x-1][y-w[x]]+v[x])

對於dp矩陣,行數是物品的數量n,列數的揹包的重量w,從左到右,再從上到下依次計算dp值即可。

常用限流演算法與應用場景

限流是在微服務介面時,面對高併發場景必須考慮的問題。現在限流演算法主要有以下幾種 其中令牌桶演算法變種還可以分為 單速率三色標記演算法 雙速率三色標記演算法 計數器法是限流演算法裡最簡單也是最容易實現的一種演算法。一般是限制一段時間能夠通過的請求數,比如某個介面規定5秒鐘的訪問次數不能超過10次,那...

Hash演算法應用場景

一.雜湊演算法的定義 1.雜湊演算法又叫雜湊演算法,是將任意長度的二進位制值對映為較短的固定長度的二進位制值,這個小的二進位制值稱為雜湊值。它的原理其實很簡單,就是把一段交易資訊轉換成乙個固定長度的字串。2.雜湊表是基於快速訪問的角度設計的,是一種典型的空間換時間的做法,二.從set map談到ha...

大話常用限流演算法與應用場景

公司產品老大讓做乙個搶金幣的活動,規定乙個使用者5秒內最多搶10個金幣 初級工程師小j junior 同學拿到這個需求後立馬就開幹,直接用userid為key在redis中儲存,來乙個請求就讓計數器自增一下再拿到自增後的結果,判斷結果值是否超過了規定的閥值,再來個將key設為5秒過期 小a然後快速寫...