• 如何衡量算法的优劣??


    程序=算法(解决问题的步骤)+数据结构(合理的持有数据
     
     * 如何衡量算法的优劣?
     1、计算时间
              long start=System.currentTimeInMills();
           处理步骤;
           long end=System.currentTimeInMills();
           System.out.println("该算法用时"+(end-start)+"ms");
      
      2、时间复杂度
      是一个用于度量一个算法的运算时间的一个描述,本质是一个函数,根据
      这个函数能在不用具体的测试数据来测试的情况下,粗略地估计算法的执
      行效率
      
      查找一个算法中执行次数最多的部分和算法规模的相互关系--函数
      
      常用大O来表述,这个函数描述了算法执行所要时间的增长速度
      
      
      常量阶    O(1)
      对数阶    O(logn)
      线性阶    O(n)
      线性对数阶    O(nlogn)
      n方阶    O(nⁿ)
      指数阶    O(2ⁿ)
      阶乘阶    O(n!)

    示例

    1. public class Test1 {
    2. public static void main(String[] args) {
    3. int[] arr = new int[] { 1, 6, 2, 4, 3, 7, 9, 8 };
    4. for (int i = 1; i < arr.length; i++) { // 7
    5. for (int k = 0; k < arr.length - i; k++) { // 7 6 5 ... (n-1)*n/2
    6. if (arr[k] > arr[k + 1]) {
    7. int tmp = arr[k];
    8. arr[k] = arr[k + 1];
    9. arr[k + 1] = tmp;
    10. }
    11. }
    12. }
    13. System.out.println(Arrays.toString(arr));
    14. // 时间复杂度为 n^2/2-n/2 时间和问题规模n成正相关关系
    15. // 使用大O计法时,只保留最高次幂,去掉所有常量O(n^2)
    16. // 折半查找
    17. int target = 6;
    18. int min = 0;
    19. int max = arr.length - 1;
    20. int pos = (min + max) / 2;
    21. while (min <= max) {
    22. pos=(min + max) / 2;
    23. if (arr[pos] > target) {
    24. max = pos - 1;
    25. } else if (arr[pos] < target) {
    26. min = pos + 1;
    27. } else if (arr[pos] == target)
    28. break;
    29. }
    30. System.out.println("位置为:" + pos);
    31. //2^k=n k以2为底n的对数 时间复杂度为O(logN)
    32. }
    33. }

  • 相关阅读:
    XML语法、约束
    Dubbo使用invoke指令来调用dubbo接口
    【JUC】七、读写锁
    win7下从ruby源代码编译安装的方法
    亚马逊商品详情API接口-(item_get-获得AMAZON商品详情接口),亚马逊详情API接口
    Maya 2024:3D艺术的巅 峰之作 mac/win版
    RabbitMQ_概述
    【Linux】权限不足的情况下在指定环境运行command
    换挡周期下,谁将成为厨电品牌的进取者?
    springboot游戏道具在线交易平台毕业设计源码171956
  • 原文地址:https://blog.csdn.net/zjh0101/article/details/126474109