算法图解笔记第一章

二分查找法

        

public static void main(String[] args) {
        int[] nums = new int[100];
        for (int i = 1; i < 100; i++) {
            nums[i] = i;
        }
        System.out.println(binarySearch(nums,5));
    }
    public static int binarySearch(int[] nums,int target){
        int low = 0,high = nums.length-1; //首先先有序数组的两个端点
        while (low <= high){              //如果找到最后low==high了表示数组没有这个元素
            int mid = (low+high)/2;       //找到中间的那个元素进行比较
            if (nums[mid] == target){     //如果相同就返回
                return mid;
            }else if(nums[mid] > target){ //此时找到的数如果比target大,那就把mid-1重新赋值给high
                high = mid - 1;
            }else if(nums[mid] < target){
                low = mid + 1;
            }
        }
        return -1;
    }

练习,假设有一个128个名字的有序列表,使用二分查找法查找其中一个,最多需要几步才能找到?

答案: logn次(以2为底),最多需要7次。

运行时间

       

最多需要猜测的次数与列表长度相同,这被称为线性时间(linear time)——O(n)

二分查找的运行时间为对数时间(或log时间)——O(logn)        

大O表示法

        是一种特殊的表示法,指出了算法的速度有多快,但通常表示的是最糟糕的运行时间。

        算法的运行时间以不同的速度增加

        随着元素的增加,简单查找的线性时间会被大大拉长,而二分查找法则不会

一些常见的大O运行时间(又快到慢)

  •  O(log n),也叫对数时间,这样的算法包括二分查找。
  •  O(n),也叫线性时间,这样的算法包括简单查找。
  •  O(n  * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
  •  O(n 2 ),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
  •  O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。


PS:算法的速度指的并非时间,而是操作数的增速。

谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。

算法的运行时间用大O表示法表示。

O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快得越多。

练习

       1.O(logN) 2.O(N) 3.O(N) 4.O(N)

旅行商问题

小结:

        二分查找的速度比简单查找的速度快很多

        O(logN)比O(N)快。需要搜索的元素越多,前者比后者就快的越多。

        算法运行时间不以秒为单位

        算法运行时间是从其增速的角度度量的

        算法运行时间用大O表示       

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值