矩阵第二节

二分查找

思想

在一个含有X个有序的元素序列中,查找一个元素n。第一步,判断中n跟X/2的元素比较。如果小了,则继续跟X/4比较。如果大了,则跟3/4X比较。直到找到元素n。时间复杂度为log2X。

public class BinarySearch{

    int low;
    int hight;
    int length;

    public int GetIndexWithBinarySearch(int num,List<Integer> list) {
        length=list.size();
        low=0;
        hight=list.size();
        int  index=Find(low,hight,num,list);
        return index;
    }


     int Find(int low,int heiht,int num,List<Integer> list) {
        int index=(low+hight)/2;
        if(num==list.get(index))
            return index;
        if(hight-low<=1&&num!=list.get(index))
            return -1;
        if(num>list.get(index))
        {
            low=index;
        }
        else {
            hight=index;
        }
        return Find(low,hight,num,list);
    }
时间复杂度O

大O表示法指出了算法有多快.
假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间为O(n)

经常会遇到的5种大O运行时间。

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

旅行商问题

有一位旅行商。 他需要前往5个城市。这位旅行商要前往这5个城市,同时要确保旅程最短。为此,可考虑 前往这些城市的各种可能顺序。对于每种顺序,他都计算总旅程,再挑选出旅程最短的路线。5个城市有120种不同的排列方 式。因此,在涉及5个城市时,解决这个问题需要执行120次操作。涉及6个城市时,需要执行720 次操作(有720种不同的排列方式)。涉及7个城市时,需要执行5040次操作!推而广之,涉及n个城市时,需要执行n!(n的阶乘)次操作才能计算出结果。因此运行时间 为O(n!),即阶乘时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值