矩阵第二节

来源:互联网 发布:本地pubmed数据库 编辑:程序博客网 时间:2024/06/15 05:11

二分查找

思想

在一个含有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!),即阶乘时间。

原创粉丝点击