Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题
ML崗位面試:上海某公司算法崗位(偏機(jī)器學(xué)習(xí),互聯(lián)網(wǎng)金融行業(yè))技術(shù)面試考點(diǎn)之?dāng)?shù)據(jù)結(jié)構(gòu)相關(guān)考察點(diǎn)—斐波那契數(shù)列、八皇后問(wèn)題、兩種LCS問(wèn)題
Interview:算法崗位面試—上海某公司算法崗位(偏機(jī)器學(xué)習(xí),互聯(lián)網(wǎng)金融行業(yè))技術(shù)面試考點(diǎn)之?dāng)?shù)據(jù)結(jié)構(gòu)相關(guān)考察點(diǎn)—斐波那契數(shù)列、八皇后問(wèn)題、兩種LCS問(wèn)題
導(dǎo)讀:其實(shí),考察的知識(shí)點(diǎn),博主都做過(guò),但是,emmm,這些知識(shí)點(diǎn),在我寫(xiě)代碼中,幾乎不會(huì)用到,so,會(huì)遺忘。所以,還需要下功夫,去多回憶回憶啦。
? ? ? ? ?整個(gè)過(guò)程很nice。
目錄
數(shù)據(jù)結(jié)構(gòu)相關(guān)問(wèn)題
1、生成斐波那契數(shù)列—yield的應(yīng)用
2、八皇后問(wèn)題
3、兩種LCS問(wèn)題——最長(zhǎng)公共子序列和最長(zhǎng)公共字符串
???????
數(shù)據(jù)結(jié)構(gòu)相關(guān)問(wèn)題
1、生成斐波那契數(shù)列—yield的應(yīng)用
考察點(diǎn): yield
1、yield的特點(diǎn):
(1)、帶有 yield 的函數(shù)是生成器:帶有 yield 的函數(shù)在 Python 中被稱(chēng)之為 generator生成器,當(dāng)使用一個(gè)yield的時(shí)候,對(duì)應(yīng)的函數(shù)就是一個(gè)生成器了。成器對(duì)象可以被for循環(huán)迭代,也可以手動(dòng)執(zhí)行next或者send方法精準(zhǔn)控制這個(gè)生成器的內(nèi)部執(zhí)行,
(2)、yield是一個(gè)類(lèi)似 return 的關(guān)鍵字:迭代一次遇到y(tǒng)ield時(shí),就返回yield后面(右邊)的值。yield就是 return 返回一個(gè)值,并且記住這個(gè)返回的位置,下次迭代就從這個(gè)位置后(下一行)開(kāi)始。
2、yield的兩大函數(shù):
next:next方法就相當(dāng)于“下一步”生成哪個(gè)數(shù),這一次的next開(kāi)始的地方是接著上一次的next停止的地方執(zhí)行的。next方法第一次調(diào)用a.next()無(wú)法輸出參數(shù),以后每次a.next(賦值)都等于函數(shù)體里面yield表達(dá)式的值。
send:send方法會(huì)首先把上一次掛起的yield語(yǔ)句的返回值通過(guò)參數(shù)設(shè)定,從而實(shí)現(xiàn)與生成器方法的交互。
注意:
(1)、當(dāng)send方法的參數(shù)為None時(shí),它與next方法完全等價(jià)。但是注意,雖然這樣的代碼可以接受,但是不規(guī)范。所以,在調(diào)用send方法之前,還是先調(diào)用一次next方法為好。
(2)、其實(shí)next和send在一定意義上作用是相似的,區(qū)別是send可以傳遞yield表達(dá)式的值進(jìn)去,而next不能傳遞特定的值,只能傳遞None進(jìn)去。因此,我們可以看做c.next 和 c.send(None) 作用是一樣的。
3、yield的應(yīng)用:需要節(jié)約內(nèi)存不需要一把全部返回,每次使用的時(shí)候再去算,我們就會(huì)用到生成器。
? ? ? ?在 for 循環(huán)執(zhí)行時(shí),每次循環(huán)都會(huì)執(zhí)行 fab 函數(shù)內(nèi)部的代碼,執(zhí)行到 yield b 時(shí),fab 函數(shù)就返回一個(gè)迭代值,下次迭代時(shí),代碼從 yield b 的下一條語(yǔ)句繼續(xù)執(zhí)行。而函數(shù)的本地變量看起來(lái)和上次中斷執(zhí)行前是完全一樣的,于是函數(shù)繼續(xù)執(zhí)行,直到再次遇到 yield。
2、八皇后問(wèn)題
? ? ?八皇后問(wèn)題,是一個(gè)古老而著名的問(wèn)題,是回溯算法的典型案例。該問(wèn)題是國(guó)際西洋棋棋手馬克斯·貝瑟爾于1848年提出:在8×8格的國(guó)際象棋上擺放八個(gè)皇后,使其不能互相攻擊,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線(xiàn)上,問(wèn)有多少種擺法。 高斯認(rèn)為有76種方案。1854年在柏林的象棋雜志上不同的作者發(fā)表了40種不同的解,后來(lái)有人用圖論的方法解出92種結(jié)果。計(jì)算機(jī)發(fā)明后,有多種計(jì)算機(jī)語(yǔ)言可以解決此問(wèn)題。
考察點(diǎn):考察結(jié)構(gòu)性編程的能力
理解:在8行8列的棋盤(pán)上擺放8個(gè)皇后,使之不能互相攻擊——任意兩個(gè)不在同一行、同一列或同一斜線(xiàn)上。典型的回溯算法。
首先,我們要想到某種方法來(lái)解決沖突檢測(cè)問(wèn)題,即不能令棋子處于能相互吃掉的位置——相鄰、左右、對(duì)角線(xiàn)。
其次,運(yùn)用回溯的方法,求得問(wèn)題的解。此處具體為函數(shù)的遞歸調(diào)用,當(dāng)調(diào)用到棋盤(pán)的最后一行,便跳出,求得解。|
最后,將解打印出來(lái)。難點(diǎn)在于對(duì)遞歸調(diào)用函數(shù)的理解。
1、python八行代碼簡(jiǎn)單實(shí)現(xiàn)的八皇后問(wèn)題
def queen(lists, current=0): #current當(dāng)前狀態(tài)if current == len(lists):print(lists)return 0for col in range(len(lists)): #外for循環(huán)lists[current], flag = col, True #列表內(nèi)賦值,初始化標(biāo)記for row in range(current): #內(nèi)for循環(huán)取出每一行,if判斷,同列或者對(duì)角線(xiàn),標(biāo)記為false,且跳出當(dāng)前層的for循環(huán)if lists[row] == col or abs(col - lists[row]) == current - row: flag = Falsebreakif flag: #if判斷,合法位置才進(jìn)行遞歸調(diào)用queen(lists, current+1) res=queen([None]*8)2、利用yield函數(shù)實(shí)現(xiàn)的八皇后問(wèn)題
?Algorithm:【Algorithm算法進(jìn)階之路】之利用yield函數(shù)解決八皇后問(wèn)題
3、兩種LCS問(wèn)題——最長(zhǎng)公共子序列和最長(zhǎng)公共字符串
Algorithm:C++/python語(yǔ)言實(shí)現(xiàn)之求旋轉(zhuǎn)數(shù)組最小值、求零子數(shù)組、求最長(zhǎng)公共子序列和最長(zhǎng)公共子串、求LCS與字符串編輯距離
總結(jié)
以上是生活随笔為你收集整理的Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Interview:算法岗位面试—10.
- 下一篇: Interview:算法岗位面试—上海某