数据结构与算法相关
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各项元素的绝对值平方和开方