BangJinM BangJinM 游戏开发 菜鸡游戏开发,邮箱mabangjin@outlook.com

二分查找

» 算法

二分查找

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