數據結構與算法相關
1. 快速排序算法
請實現快速排序算法,自行設計測試用例來說明算法的準確性,算法的時間和空間複雜度是多少?最壞的時間複雜度是多少?
快排是每次從當前考慮的數組中選擇一個元素,以這個元素爲基點,之後把這個元素放在它排好序後應該處的位置上。
比如對數組:[4,6,2,3,1,5,7,8]排序,首先先要把4這個元素放在已經排序好的位置上,此時該元素就都具有了一個性質:即4之前的所有元素都是小於4的,4之後的所有元素都是大於4的。
接下來所做的事情,就是對當前排好序的元 素4之前和之後的部分,繼續遞歸的進行上述過程,直至每個元素都排好序。
那麼問題就是兩個方面:
1. 如何將遍歷的元素放在已經排序好的位置上;
2. 如何定義元素已經排好序;
通常選擇第一個元素v作爲基準點,索引記作i,之後遍歷未訪問的元素,在遍歷的過程中,逐漸的移動位置,把當前訪問的元素記爲i, 小於v和大於v的分界點的索引位置叫做j。
當i指的元素比v還要大時,讓i++,將其放在大於v的區間中;
當i指的元素比v小時,則將j所指的後一個元素與i指的元素進行交換,再讓j++,i ++,進而考察下一個;
2. 歸併排序算法
請實現歸併排序,自行設計測試用例來說明算法的準確性,算法的時間和空間複雜度是多少?最壞的時間複雜度是多少?
3. 面對一個具體的問題,傾向於使用歸併還是快排,爲什麼?
數學基礎
1. 給定兩個矩陣,怎麼計算它們之間的相乘?怎麼計算一個矩陣的inverse?
。
兩個矩陣的相乘,就是各個位置元素的相乘。
2*2的矩陣求逆,假設A=[[a,b],[c,d]]:
- 調換a和d的位置;
- 把負號放在b和c前面;
- 用各個元素除以A矩陣的行列式 (ad-bc);
2. 怎麼計算一個向量的 norm? a = (3,1,5,1), |a| = ?
一範式是向量的絕對值之和:3+1+5+1 = 10;
二範式是向量元素的絕對值的平方和再開方:sqrt(9+1+25+1)=6
3. 什麼是 Frobenius norm? 給定 A = [[1,3],[2,5]], 請計算;
F-範數:矩陣A各項元素的絕對值平方和開方