自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:說(shuō)說(shuō)你對(duì)算法的理解?應(yīng)用場(chǎng)景?

開(kāi)發(fā) 前端 算法
算法(Algorithm)是指解題方案的準(zhǔn)確而完整的描述,是一系列解決問(wèn)題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問(wèn)題的策略機(jī)制。

[[424227]]

一、是什么

算法(Algorithm)是指解題方案的準(zhǔn)確而完整的描述,是一系列解決問(wèn)題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問(wèn)題的策略機(jī)制

也就是說(shuō),能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時(shí)間內(nèi)獲得所要求的輸出

如果一個(gè)算法有缺陷,或不適合于某個(gè)問(wèn)題,執(zhí)行這個(gè)算法將不會(huì)解決這個(gè)問(wèn)題

一個(gè)程序=算法+數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)是算法實(shí)現(xiàn)的基礎(chǔ),算法總是要依賴于某種數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)的,兩者不可分割

因此,算法的設(shè)計(jì)和選擇要同時(shí)結(jié)合數(shù)據(jù)結(jié)構(gòu),簡(jiǎn)單地說(shuō)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)就是選擇存儲(chǔ)方式,如確定問(wèn)題中的信息是用數(shù)組存儲(chǔ)還是用普通的變量存儲(chǔ)或其他更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu)

針對(duì)上述,可以得出一個(gè)總結(jié):不同的算法可能用不同的時(shí)間、空間或效率來(lái)完成同樣的任務(wù)

二、特性

關(guān)于算法的五大特性,有如下:

  • 有限性(Finiteness):一個(gè)算法必須保證執(zhí)行有限步之后結(jié)束
  • 確切性(Definiteness):一個(gè)算法的每一步驟必須有確切的定義
  • 輸入(Input):一個(gè)算法有零個(gè)或多個(gè)輸入,以刻畫(huà)運(yùn)算對(duì)象的初始情況,所謂零個(gè)輸入是指算法本身給定了初始條件
  • 輸出(Output):一個(gè)算法有一個(gè)或多個(gè)輸出。沒(méi)有輸出的算法毫無(wú)意義
  • 可行性(Effectiveness):算法中執(zhí)行的任何計(jì)算步驟都是可以被分解為基本的可執(zhí)行的操作步驟,即每個(gè)計(jì)算步驟都可以在有限時(shí)間內(nèi)完成(也稱之為有效性)

三、應(yīng)用場(chǎng)景

在前端領(lǐng)域中,數(shù)據(jù)結(jié)構(gòu)與算法無(wú)法不在,例如現(xiàn)在的vue或者react項(xiàng)目,實(shí)現(xiàn)虛擬DOM或者Fiber結(jié)構(gòu),本質(zhì)就是一種數(shù)據(jù)結(jié)構(gòu),如下一個(gè)簡(jiǎn)單的虛擬DOM:

  1.   type: 'div'
  2.     props: { 
  3.       name'lucifer' 
  4.     }, 
  5.       children: [{ 
  6.         type: 'span'
  7.         props: {}, 
  8.         children: [] 
  9.       }] 

vue與react都能基于基于對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)diff算法,提高了整個(gè)框架的性能以及拓展性

包括在前端javascript編譯的時(shí)候,都會(huì)生成對(duì)應(yīng)的抽象語(yǔ)法樹(shù)AST,其本身不涉及到任何語(yǔ)法,因此你只要編寫相應(yīng)的轉(zhuǎn)義規(guī)則,就可以將任何語(yǔ)法轉(zhuǎn)義到任何語(yǔ)法,也是babel, PostCSS, prettier, typescript

除了這些框架或者工具底層用到算法與數(shù)據(jù)結(jié)構(gòu)之外,日常業(yè)務(wù)也無(wú)處不在,例如實(shí)現(xiàn)一個(gè)輸入框攜帶聯(lián)想功能,如下:

如果我們要實(shí)現(xiàn)這個(gè)功能, 則可以使用前綴樹(shù),如下:

包括前端可能會(huì)做一些對(duì)字符串進(jìn)行相似度檢測(cè),例如"每日一題"和"js每日一題"兩個(gè)字符串進(jìn)行相似度對(duì)比,這種情況可以通過(guò)“最小編輯距離”算法,如果a和b的編輯距離越小,我們認(rèn)為越相似

日常在編寫任何代碼的都需要一個(gè)良好的算法思維,選擇好的算法或者數(shù)據(jù)結(jié)構(gòu),能讓整個(gè)程序效率更高

參考文獻(xiàn)

https://baike.baidu.com/item/%E7%AE%97%E6%B3%95/209025

 

https://lucifer.ren/blog/2019/09/18/algorthimn-fe-1/

 

責(zé)任編輯:武曉燕 來(lái)源: JS每日一題
相關(guān)推薦

2021-11-09 08:51:13

模式命令面試

2021-11-05 07:47:56

代理模式對(duì)象

2021-10-18 07:51:39

回溯算法面試

2021-08-16 08:33:26

git

2021-11-03 14:10:28

工廠模式場(chǎng)景

2021-11-10 07:47:49

組合模式場(chǎng)景

2021-09-06 10:51:27

TypeScriptJavaScript

2021-11-11 16:37:05

模板模式方法

2021-11-22 23:50:59

責(zé)任鏈模式場(chǎng)景

2021-09-28 07:12:09

測(cè)試路徑

2021-09-29 07:24:20

場(chǎng)景數(shù)據(jù)

2021-09-10 06:50:03

TypeScript裝飾器應(yīng)用

2021-10-08 09:59:32

冒泡排序場(chǎng)景

2021-10-13 18:01:33

快速排序場(chǎng)景

2021-09-08 07:49:34

TypeScript 泛型場(chǎng)景

2021-10-09 10:25:41

排序應(yīng)用場(chǎng)景

2021-11-04 06:58:32

策略模式面試

2021-05-31 10:35:34

TCPWebSocket協(xié)議

2021-06-01 08:25:06

Node.jsJavaScript運(yùn)行

2021-10-11 09:38:41

開(kāi)源
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)