成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:說說你對貪心算法、回溯算法的理解?應用場景?

開發 前端 算法
貪心算法,又稱貪婪算法,是算法設計中的一種思想,其期待每一個階段都是局部最優的選擇,從而達到全局最優,但是結果并不一定是最優的

[[429460]]

本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯系JS每日一題公眾號。

一、貪心算法

貪心算法,又稱貪婪算法,是算法設計中的一種思想

其期待每一個階段都是局部最優的選擇,從而達到全局最優,但是結果并不一定是最優的

舉個零錢兌換的例子,如果你有1元、2元、5元的錢幣數張,用于兌換一定的金額,但是要求兌換的錢幣張數最少

如果現在你要兌換11元,按照貪心算法的思想,先選擇面額最大的5元錢幣進行兌換,那么就得到11 = 5 + 5 + 1 的選擇,這種情況是最優的

但是如果你手上錢幣的面額為1、3、4,想要兌換6元,按照貪心算法的思路,我們會 6 = 4 + 1 + 1這樣選擇,這種情況結果就不是最優的選擇

從上面例子可以看到,貪心算法存在一些弊端,使用到貪心算法的場景,都會存在一個特性:

一旦一個問題可以通過貪心法來解決,那么貪心法一般是解決這個問題的最好辦法

至于是否選擇貪心算法,主要看是否有如下兩大特性:

  • 貪心選擇:當某一個問題的整體最優解可通過一系列局部的最優解的選擇達到,并且每次做出的選擇可以依賴以前做出的選擇,但不需要依賴后面需要做出的選擇
  • 最優子結構:如果一個問題的最優解包含其子問題的最優解,則此問題具備最優子結構的性質。問題的最優子結構性質是該問題是否可以用貪心算法求解的關鍵所在

二、回溯算法

回溯算法,也是算法設計中的一種思想,是一種漸進式尋找并構建問題解決方式的策略

回溯算法會先從一個可能的工作開始解決問題,如果不行,就回溯并選擇另一個動作,知道將問題解決

使用回溯算法的問題,有如下特性:

  • 有很多路,例如一個矩陣的方向或者樹的路徑
  • 在這些的路里面,有死路也有生路,思路即不符合題目要求的路,生路則符合
  • 通常使用遞歸來模擬所有的路

常見的偽代碼如下:

  1. result = [] 
  2. function backtrack(路徑, 選擇列表): 
  3.   if 滿足結束條件: 
  4.     result.add(路徑) 
  5.   return 
  6.  
  7.   for 選擇 of 選擇列表: 
  8.     做選擇 
  9.     backtrack(路徑, 選擇列表) 
  10.     撤銷選擇 

重點解決三個問題:

  • 路徑:也就是已經做出的選擇
  • 選擇列表
  • 結束條件

例如經典使用回溯算法為解決全排列的問題,如下:

一個不含重復數字的數組 nums ,我們要返回其所有可能的全排列,解決這個問題的思路是:

  • 用遞歸模擬所有的情況
  • 遇到包含重復元素的情況則回溯
  • 收集到所有到達遞歸終點的情況,并返回、

用代碼表示則如下:

  1. var permute = function(nums) { 
  2.     const res = [], path = []; 
  3.     backtracking(nums, nums.length, []); 
  4.     return res; 
  5.      
  6.     function backtracking(n, k, used) { 
  7.         if(path.length === k) { 
  8.             res.push(Array.from(path)); 
  9.             return
  10.         } 
  11.         for (let i = 0; i < k; i++ ) { 
  12.             if(used[i]) continue
  13.             path.push(n[i]); 
  14.             used[i] = true; // 同支 
  15.             backtracking(n, k, used); 
  16.             path.pop(); 
  17.             used[i] = false
  18.         } 
  19.     } 
  20. }; 

三、總結

前面也初步了解到分而治之、動態規劃,現在再了解到貪心算法、回溯算法

其中關于分而治之、動態規劃、貪心策略三者的求解思路如下:

其中三者對應的經典問題如下圖:

 

參考文獻

https://zh.wikipedia.org/wiki/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95

https://leetcode-cn.com/problems/permutations/solution/dai-ma-sui-xiang-lu-dai-ni-xue-tou-hui-s-mfrp/

https://cloud.tencent.com/developer/article/1767046

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2021-09-16 07:52:18

算法應用場景

2021-11-10 07:47:49

組合模式場景

2021-08-16 08:33:26

git

2021-11-03 14:10:28

工廠模式場景

2021-11-05 07:47:56

代理模式對象

2021-11-09 08:51:13

模式命令面試

2021-09-06 10:51:27

TypeScriptJavaScript

2021-09-28 07:12:09

測試路徑

2021-11-22 23:50:59

責任鏈模式場景

2021-11-11 16:37:05

模板模式方法

2021-09-29 07:24:20

場景數據

2021-09-10 06:50:03

TypeScript裝飾器應用

2021-10-08 09:59:32

冒泡排序場景

2021-10-13 18:01:33

快速排序場景

2021-10-09 10:25:41

排序應用場景

2021-09-08 07:49:34

TypeScript 泛型場景

2021-11-04 06:58:32

策略模式面試

2021-05-31 10:35:34

TCPWebSocket協議

2021-06-01 08:25:06

Node.jsJavaScript運行

2021-10-11 09:38:41

開源
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品嫩草影院精东 | 国产欧美日韩一区 | 久久国产香蕉 | 欧美精品一区二区三区蜜桃视频 | 亚洲福利视频一区二区 | 亚洲一二三区在线观看 | 久久99国产精品 | 婷婷综合在线 | 精品少妇一区二区三区日产乱码 | 亚洲日本一区二区 | 欧美日韩一二区 | 国产精品成人一区二区三区 | 五月婷六月丁香 | 日韩av在线一区二区 | 成人在线 | 国产精品视频入口 | 日本中文字幕在线观看 | 夜夜爆操 | 国产农村一级国产农村 | 四虎永久免费影院 | 精国产品一区二区三区四季综 | 在线播放国产一区二区三区 | 亚洲一区二区精品视频 | 免费国产一区 | 一区二区三区久久 | 精品欧美乱码久久久久久 | 欧美网站一区二区 | 国产成人免费视频网站高清观看视频 | 成人免费视频久久 | 成人二区| 精品国产乱码久久久久久牛牛 | 视频1区| 国产一二三区在线 | 国产精品高潮呻吟久久久久 | 五月婷婷婷 | caoporn免费 | 综合一区 | 男人的天堂久久 | 国产二区视频 | 天天影视网天天综合色在线播放 | 伊人久久精品 |