1. 算法复杂度
时间复杂度, O(1), O(N), O(logN), O(N * logN), O(N^2) 等
确定算法流程的总操作数量与样本数量之间的表达式关系只看表达式最高阶项的部分
常见的常数时间的操作
- 常见的算术运算(+、-、*、/、%等)
- 常见的位运算(>>、>>>、<<、|、&、^ 等)·赋值、比较、自增、自减操作等
- 数组寻址操作
- 总之,执行时间固定的操作都是常数时间的操作。
- 反之,执行时间不固定的操作,都不是常数时间的操作
额外空间复杂度,O(1), O(N), O(N^2) 等
除了 入参和返回值之外,为了完成某个功能需要的额外空间。自主空间
最优解只要看 时间复杂度和空间复杂度
2. 对数器
对数器 是通过用大量测试数据来验证算法是否正确的一种方式。
分成三步
- 生成测试样本方法
- 写常规方法
- 对比自己的算法和常规算法的结果是否一致
public static void main(String[] args) {
int maxSize = 10, maxVal = 100;
for (int i = 0; i < 50_0000; i++) {
// 1. 生成测试样本方法
int[] arr = SelectionSort.generateRandomArray(maxSize, maxVal);
int[] arr1 = Utils.copyArray(arr);
int[] arr2 = Utils.copyArray(arr);
insertionSort(arr1);
// 2. 常规方法结果
SelectionSort.sort(arr2);
// 3. 对比结果是否一样
if (!Utils.compare(arr1, arr2)) {
Utils.print(arr);
Utils.print(arr1);
Utils.print(arr2);
break;
}
}
}