AI筆試面試題庫-Python題目解析4
為方便大家及時檢視和學習AI相關課程的筆試和麵試題目,小七會在公眾號上陸續釋出七月線上官網的題庫試題帶解析,歡迎大家及時溝通學習,有紕漏的地方也請大家及時指正,我們會逐漸完善題庫資訊,給大家提供更多更好的試題資源。
官網連結:
https://www.julyedu.com/question/big/kp_id/28/ques_id/928
1、請用Python手寫實現插入排序。
解析:
插入排序(Insertion Sort)的工作原理是通過構建有序序列,對於未排序資料,
在已排序序列中從後向前掃描,找到相應位置並插入。
演算法執行步驟:
(1)從第一個元素開始,該元素可以認為已經被排序;
(2)取出下一個元素,在已經排序的元素序列中從後向前掃描;
(3)如果被掃描的元素(已排序)大於新元素,則將被掃描元素後移一位;
(4)重複步驟(3),直到找到已排序的元素小於或者等於新元素的位置;
(5)將新元素插入到該位置後;
(6)重複步驟(2)-(5)。
Python實現
def insert_sort(ary):
n = len(ary)
for i in range(1,n):
if ary[i] < ary[i-1]:
temp = ary[i]
#待插入的下標
index = i
#從i-1 迴圈到 0 (包括0)
for j in range(i-1,-1,-1):
if ary[j] > temp :
ary[j+1] = ary[j]
#記錄待插入下標
index = j
else :
break
ary[index] = temp
return ary
2、請用Python手寫實現快速排序。
解析:
步驟:
(1)從數列中挑出一個元素,稱為 “基準”(pivot);
(2)重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值
大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基
準就處於數列的中間位置。這個稱為分割槽(partition)操作;
(3)遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
換言之
快速排序時基於分治模式處理的,
對一個典型子陣列A[p...r]排序的分治過程為三個步驟:
(1)分解:
A[p..r]被劃分為倆個(可能空)的子陣列A[p ..q-1]和A[q+1 ..r],使得
A[p ..q-1] <= A[q] <= A[q+1 ..r];
(2)解決:通過遞迴呼叫快速排序,對子陣列A[p ..q-1]和A[q+1 ..r]排序;
(3)合併。
QUICKSORT(A, p, r)
1 if p < r
2 then q ← PARTITION(A, p, r) //關鍵
3 QUICKSORT(A, p, q - 1)
4 QUICKSORT(A, q + 1, r)
陣列劃分
快速排序演算法的關鍵是PARTITION過程,它對A[p..r]進行就地重排:
PARTITION(A, p, r)
1 x ← A[r]
2 i ← p - 1
3 for j ← p to r - 1
4 do if A[j] ≤ x
5 then i ← i + 1
6 exchange A[i] <-> A[j]
7 exchange A[i + 1] <-> A[r]
8 return i + 1
下圖是一個例子
這是另外一個視覺化圖
Python實現
def quick_sort(ary):
return qsort(ary,0,len(ary)-1)
def qsort(ary,left,right):
#快排函式,ary為待排序陣列,left為待排序的左邊界,right為右邊界
if left >= right : return ary
key = ary[left] #取最左邊的為基準數
lp = left #左指標
rp = right #右指標
while lp < rp :
while ary[rp] >= key and lp < rp :
rp -= 1
while ary[lp] <= key and lp < rp :
lp += 1
ary[lp],ary[rp] = ary[rp],ary[lp]
ary[left],ary[lp] = ary[lp],ary[left]
qsort(ary,left,lp-1)
qsort(ary,rp+1,right)
return ary
3、請用Python手寫實現堆排序。
解析:
堆排序在 top K 問題中使用比較頻繁。堆排序是採用二叉堆的資料結構來
實現的,雖然實質上還是一維陣列。二叉堆是一個近似完全二叉樹 。
二叉堆具有以下性質:
父節點的鍵值總是大於或等於(小於或等於)任何一個子節點的鍵值。
每個節點的左右子樹都是一個二叉堆(都是最大堆或最小堆)。
步驟:
(1)構造最大堆(Build_Max_Heap):若陣列下標範圍為0~n,考慮到單獨一個
元素是大根堆,則從下標n/2開始的元素均為大根堆。於是只要從n/2-1開
始,向前依次構造大根堆,這樣就能保證,構造到某個節點時,它的左右
子樹都已經是大根堆。
(2)堆排序(HeapSort):由於堆是用陣列模擬的。得到一個大根堆後,陣列
內部並不是有序的。因此需要將堆化陣列有序化。思想是移除根節點,並
做最大堆調整的遞迴運算。第一次將heap[0]與heap[n-1]交換,再對
heap[0...n-2]做最大堆調整。第二次將heap[0]與heap[n-2]交換,
再對heap[0...n-3]做最大堆調整。重複該操作直至heap[0]和heap[1]
交換。由於每次都是將最大的數併入到後面的有序區間,故操作完後
整個陣列就是有序的了。
(3)最大堆調整(Max_Heapify):該方法是提供給上述兩個過程呼叫的。
目的是將堆的末端子節點作調整,使得子節點永遠小於父節點。
Python實現
def heap_sort(ary) :
n = len(ary)
#最後一個非葉子節點
first = int(n/2-1)
#構造大根堆
for start in range(first,-1,-1) :
max_heapify(ary,start,n-1)
#堆排,將大根堆轉換成有序陣列
for end in range(n-1,0,-1):
ary[end],ary[0] = ary[0],ary[end]
max_heapify(ary,0,end-1)
return ary
#最大堆調整:將堆的末端子節點作調整,使得子節點永遠小於父節點
#start為當前需要調整最大堆的位置,end為調整邊界
def max_heapify(ary,start,end):
root = start
while True :
#調整節點的子節點
child = root*2 +1
if child > end : break
if child+1 <= end and ary[child] < ary[child+1] :
#取較大的子節點
child = child+1
#較大的子節點成為父節點
if ary[root] < ary[child] :
#交換
ary[root],ary[child] = ary[child],ary[root]
root = child
else :
break
4、請用Python手寫實現歸併排序。
解析:
歸併排序是採用分治法的一個非常典型的應用。歸併排序的思想就是先遞迴
分解陣列,再合併陣列。
先考慮合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就
先取誰,取了後相應的指標就往後移一位。然後再比較,直至一個陣列為空,
最後把另一個陣列的剩餘部分複製過來即可。
再考慮遞迴分解,基本思路是將陣列分解成left和right,如果這兩個陣列
內部資料是有序的,那麼就可以用上面合併陣列的方法將這兩個陣列合並排
序。如何讓這兩個陣列內部是有序的?可以再二分,直至分解出的小組只含
有一個元素時為止,此時認為該小組內部已有序。然後合併排序相鄰二個小
組即可。
Python實現
def merge_sort(ary):
if len(ary) <= 1 : return ary
num = int(len(ary)/2) #二分分解
left = merge_sort(ary[:num])
right = merge_sort(ary[num:])
return merge(left,right) #合併陣列
def merge(left,right):
'''合併操作,
將兩個有序陣列left[]和right[]合併成一個大的有序陣列'''
#left與right陣列的下標指標
l,r = 0,0
result = []
while l
5、請建立一個函式檢查一個詞是否具有迴文結構,使用 Python 進行編寫。
解析:
def huiwen(str): if len(str)==1: return True else: return str[0]==str[-1] and huiwen(str[1:-1])
為了讓大家順利轉行AI相關崗位,七月線上特意推出機器學習集訓營課程,迄今為止,「機器學習集訓營」已經舉辦了四期,每一期都湧現出了不少優秀offer,特別是上一期很多同學從Java、Android、iOS等傳統IT行業成功轉崗AI拿到年薪三四十萬,部分甚至超過四十萬拿到五十萬。
本第五期,在第四期的基礎上,除了繼續維持“入學測評、直播答疑、佈置作業、階段考試、畢業考核、一對一批改、線上線下結合、CPU&GPU雙雲平臺、面試輔導、就業推薦”十位一體的教學模式,本期特地推出機器學習工程師的聯合認證。且線下在北京、上海、深圳、廣州、杭州、瀋陽、濟南、鄭州、成都的基礎上,新增武漢、西安兩個線下點,十一城同步開營。
現推出特惠價格,2人及2人以上組團報名,可各減500元。想組團者請加微信客服:julyedukefu_02。課程詳情可點選 閱讀原文。
掃碼加客服微信
相關文章
- AI筆試面試題庫-Python題目解析3AI筆試面試題Python
- AI筆試面試題庫-Python題目解析1AI筆試面試題Python
- Python 筆試 面試題Python筆試面試題
- 【轉】C++ 筆試面試題目C++筆試面試題
- AI筆試面試題庫-什麼是區塊鏈?AI筆試面試題區塊鏈
- 騰訊PHP實習生筆試題目及答案解析PHP筆試
- python面試題目Python面試題
- HTML最新面試題(筆試面試題)HTML面試題筆試
- 筆試題目——研發工程師筆試題筆試工程師
- 筆試題目——程式設計題筆試程式設計
- 資料庫筆試面試題庫(Oracle、MySQL等)資料庫筆試面試題OracleMySql
- 『Python題庫 – 填空題』151道Python筆試填空題Python筆試
- Unity 筆試題目(一)Unity筆試
- 測試面試題目求解答面試題
- 前端筆試題面試題記錄前端筆試面試題
- 蛇皮的Python面試題目Python面試題
- EMC校招筆試題目筆試
- (轉載)DBA筆試題目筆試
- 新書出版 |《資料庫程式設計師面試筆試真題與解析》新書資料庫程式設計師面試筆試
- Python面試題庫Python面試題
- 前端筆試題面試題記錄(下)前端筆試面試題
- 面試題目面試題
- 影像處理筆試面試題筆試面試題
- 面試、筆試提問問題面試筆試
- mybatis常見面試/筆試題MyBatis面試筆試
- Oracle面試、筆試常見題Oracle面試筆試
- 7.反轉整數。面試,筆試題目總結練習面試筆試
- PAT甲級考試題庫題目分類
- TX 面試題目面試題
- JavaScript面試題目,JavaScript面試題
- 面試題目收集面試題
- DBA 面試題目面試題
- 面試題目(zt)面試題
- ABAP面試題目面試題
- 記一次面試筆試題面試筆試
- 作業系統筆試、面試題作業系統筆試面試題
- java面試筆試題大彙總Java面試筆試
- 研發類C++筆試題目C++筆試