复杂度分析:
算法复杂度的分析 目的就是为了 表示 算法的性能
在处理同一个问题的时候可以有不一样的算法进行处理 那处理的时间是否相同呢?
算法复杂度通常是看 最差的情况 。因为并不能每次都是最优条件下执行成功。
算法执行的时间 我们是看运算数据的规模 通常是用 n 来表示
常见算法复杂度:
注意: 看算法的复杂度 不是简单的 数循环个数
测试查找算法的性能:
新创建类 ArrayGenerator ==> 也采用静态方法
package src;
/**
* @author xxz
* @version 1.0
* @Created on: 2024-01-14 22:21
* @Description: 数组生成器类模拟大量数据
*/
public class ArrayGenerator {
private ArrayGenerator() {
}
// generateOrderedArray 方法名为这个 目的是数组中元素是顺序的
public static Integer[] generateOrderedArray(int n) {
Integer[] arr = new Integer[n];
for (int i = 0; i < n; i++)
arr[i] = i;
return arr;
}
// 然后去 LinearSearch 内函数中使用这个 generateOrderedArray
}
package src;
public class LinearSearch {
private LinearSearch(){}
// 这里采用 泛型方法
public static<T> int search(T [] data, T target ){
for (int i = 0; i < data.length; i++) {
if(data[i].equals(target))
return i;
}
return -1;
}
// 测试 线性查找算法的性能
public static void main(String[] args){
// 为了避免 100000 重复 这里定义一下 n = 1000000
int n = 1000000;
Integer [] data = ArrayGenerator.generateOrderedArray(n);
// 记录用时 java中定义的方法为 nanoTime() 返回一个时间戳
long startTime = System.nanoTime(); // 开始的时间
LinearSearch.search(data,n); // 调用算法进行查找
long endTime = System.nanoTime(); // 结束的时间
// 两者相减的单位是纳秒 要转化为 秒 1千纳秒是1微秒 1千微秒是1毫秒 1千毫秒是1秒 加 .0 为的是要结果为浮点数
double spendTime = (endTime - startTime) / 1000000000.0;
System.out.println(spendTime + " 秒");
}