0 0

求一查找区间的算法25

给定一组区间(有重叠),如A0=[1-3000],A1=[10-20],A2=[30-100],A3=[50-150]……An-2=[1500-1700],An-1=[1800-1850],An=[1900-2000],An+1=[2800-3000]……求一种快速查找某个数所在的区间的算法,如查找2500的结果为A0,求特各路大神不吝赐,小弟感激不尽...

问题补充:哦,忘了说了,如果是有多个区间的话取区间间隔最小的,如15的话,输出A1
2013年5月28日 11:08

5个答案 按时间排序 按投票排序

0 0

思路  将结束区间的值作为一个key,value为该区间的的范围,排好序之后,根据传进来的数据大小,使用二分查找可以找得到其中的区间,但因你这个值可能在多个区间内,所以要做些自己的改动。

2013年5月29日 16:28
0 0

如果这些区间不是经常变化的话,可以按照中值排序,用二分搜索算法找出最接近的若干个区间,然后一一比较找出目标区间。

2013年5月28日 21:36
0 0

public class Reign {

	
	Map<Integer,LinkedList<A>> reign = new HashMap<Integer, LinkedList<A>>();
	
	class A{
		public A(int min,int max){
			this.max=max;
			this.min=min;
			this.len=max-min;
		}
		int max;
		int min;
		int len;
		@Override
		public String toString() {
			return "A [max=" + max + ", min=" + min + ", len=" + len + "]";
		}
	}
	
	public void init(List<A> aList){
		for(A a:aList){
			for(int i=a.min;i<=a.max;i++){
				Integer index = Integer.valueOf(i);
				LinkedList<A> ll = reign.get(index);
				if(ll==null){
					ll= new LinkedList<A>();
					ll.add(a);
				}else{
					//遍历list,保证list按照len从小到达排序
					for(int j=0;j<ll.size();j++){
						A aa = ll.get(j);
						if(a.len<=aa.len){
							ll.add(j, a);
							break;
						}else if(j==ll.size()-1){
							ll.addLast(a);
						}
					}
				}
				reign.put(index, ll);
			}
		}
	}
	
	public static void main(String[] args) {
		Reign r = new Reign();
		List<A> a = new ArrayList<A>();
		a.add(r.new A(1, 100));
		a.add(r.new A(20, 30));
		a.add(r.new A(11, 30));
		a.add(r.new A(50, 150));
		a.add(r.new A(1, 1000));
		a.add(r.new A(200, 500));
		a.add(r.new A(300, 350));
		a.add(r.new A(500, 1000));
		a.add(r.new A(900, 1000));
		r.init(a);
		
		System.out.println(r.reign.get(Integer.valueOf(100)).get(0));
	}
	
	
}

2013年5月28日 18:01
0 0

顺路告诉你个最快的方法...
数组 左面是下标位.右面是所属的范围名称..没一个下标位肯定在最小范围是唯一所以
0 A0
1 A0
....
10 A1
11 A1
....
3000

然后来了数字直接返回结果了...

2013年5月28日 16:36
0 0

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class RunTest implements Comparable<RunTest> {
	/**
	 * 区间下限
	 */
	private int floor;
	
	/**
	 * 区间上限
	 */
	private int ceil;
	
	/**
	 * 区间跨度
	 */
	private int span;

	public int getFloor() {
		return floor;
	}

	public void setFloor(int floor) {
		this.floor = floor;
	}

	public int getCeil() {
		return ceil;
	}

	public void setCeil(int ceil) {
		this.ceil = ceil;
	}

	public int getSpan() {
		return span;
	}

	public void setSpan(int span) {
		this.span = span;
	}

	public int compareTo(RunTest o) {
		if(this.span>o.getSpan()){
			return 1;
		}
		else if(this.span<o.getSpan()){
			return -1;
		}
		else{
		return 0;
		}
	}
	public String toString(){
		return "["+this.getFloor()+","+this.getCeil()+"]";
	}
	public static void main(String[] args) {
		List<RunTest> regions= new ArrayList<RunTest>();
		
		RunTest A0= new RunTest();
		A0.setFloor(1);
		A0.setCeil(3000);
		A0.setSpan(A0.getCeil()-A0.getFloor());
		
		RunTest A1= new RunTest();
		A1.setFloor(10);
		A1.setCeil(20);
		A1.setSpan(A1.getCeil()-A1.getFloor());
		
		RunTest A2= new RunTest();
		A2.setFloor(30);
		A2.setCeil(100);
		A2.setSpan(A2.getCeil()-A2.getFloor());
		regions.add(A0);
		regions.add(A1);
		regions.add(A2);
		
		int test=70;
		List<RunTest> result= new ArrayList<RunTest>();
		for(RunTest region:regions){
			if(region.getFloor()<=test&&region.getCeil()>=test){
				result.add(region);
			}
		}
		Collections.sort(result);
		System.out.println(result.get(0));
	}
}

转化为面向对象编程

2013年5月28日 13:55

相关推荐

    区间树的重叠区间查找算法

    算法导论,在红黑树的基础上扩张出区间树的数据结构,并且构造区间树的重叠区间查找算法。

    区间树查找区间算法的实现

    区间树是一种数据结构,主要用于高效地处理一系列区间查询和操作,比如查找与特定点相交的区间、查找覆盖某一区间的最小区间等。在计算机科学中,它在图形学、数据库、调度算法等多个领域有广泛应用。这个压缩包文件...

    区间树查找算法

    区间树上的重叠区间查找算法:构造1000个节点的区间树,查找具有最小低端点的重叠区间。亲测VS可运行,VC不能运行是因为不支持操作符重载。

    重叠区间查找算法实现(C++)

    重叠区间查找算法是一种在计算机科学中用于处理和查找数据集中的重叠时间段的问题。这种算法在各种领域都有应用,例如日程管理、资源调度、生物信息学等。在这个C++实现的课程设计中,我们将深入探讨重叠区间查找...

    区间表的快速查找算法

    ### 区间表的快速查找算法 #### 一、引言 在许多应用领域中,尤其是在涉及大量数据处理的行业中,比如电信业,高效的查找算法是确保系统性能的关键因素之一。传统的查找方法如折半查找虽然简单易实现,但在面对大...

    区间树上的重叠区间查找算法源代码和实验报告

    本文将深入探讨区间树上的重叠区间查找算法的原理、源代码实现及性能评估,并通过实验报告的形式展示其在实际应用中的效果。 ### 区间树的数据结构及算法原理 区间树的核心思想是利用平衡二叉搜索树来管理区间数据...

    折半查找算法在顺序表中插入一个元素讲解.pdf

    折半查找算法的基本思想是将整个查找区间分为两半,然后通过比较中间元素与要查找的元素的大小关系来确定下一步的查找方向。如果要查找的元素小于中间元素,则继续在左半区间查找,否则继续在右半区间查找。重复这个...

    折半查找算法的改进和程序实现

    在查找过程中,通过比较目标值与各段边界的值,不断调整查找区间,直至找到目标值或区间缩减至最小单元。 值得注意的是,三段查找算法的C语言实现不仅包括查找过程本身,还预留了优化空间以提高实际运行效率。在...

    折半查找的递归算法

    递归版本的折半查找算法与非递归版本的主要区别在于使用了函数调用自身的方式来实现查找区间对半分割的过程。递归版本通常更简洁,但可能会增加程序的调用栈开销。 #### 四、C语言实现 以下是一个使用C语言实现...

    一种改进的二分查找算法

    low-step是基于目标元素和当前查找区间的最小值计算得到的,如果目标元素小于当前区间的最小值,则将low-step设置为0,表示当前区间已经不可能包含目标元素。类似的,high-step用于判断目标元素是否大于当前区间的...

    数据结构之查找算法分析

    它通过不断将查找区间减半,从而减少比较次数,平均查找长度ASL显著降低。对于一个大小为n的有序表,二分查找的平均查找长度为O(logn),这比顺序查找的平均查找长度O(n)要优秀得多。顺序查找是最基础的查找方法,从...

    C++查找算法大集锦

    斐波那契查找首先在斐波那契数列的合适位置进行查找,然后根据查找结果调整搜索区间,从而减少平均查找次数。 3. **哈希查找法**:哈希表是一种数据结构,能够实现快速查找。哈希查找通常分为两种方式: - **哈希...

    综合查找算法(顺序查找、折半查找、二叉排序树、哈希表)-数据结构课程设计

    它通过不断将查找区间减半来缩小搜索范围,平均时间复杂度为O(log n)。折半查找的优势在于效率高,但前提是数据必须事先排序,且不支持动态插入和删除操作。 **二叉排序树**是一种自平衡的二叉搜索树,其中每个节点...

    用c语言设计查找算法

    二分查找通常应用于有序数组,通过不断将查找区间减半来快速定位目标元素。首先,找到中间元素,如果目标值等于中间元素,查找结束;如果目标值小于中间元素,继续在左半部分查找;否则,在右半部分查找。每次比较...

    静态查找表。实现有序表的折半查找算法

    折半查找算法的核心思想是在有序数组中通过不断将查找区间对半分割来缩小查找范围。在给出的代码中,`BinarySearch`函数实现了这一算法: ```c int BinarySearch(SSTable *t, int key) { int low = 0, high = t-&gt;...

    C 语言几种常见的查找算法

    其思想是每次将查找区间减半,通过比较查找元素与中间元素的大小,决定是继续在左半区还是右半区进行查找。这种算法将查找次数从线性减少到对数级,时间复杂度为O(logn)。折半查找在效率上比顺序查找有了显著的提升...

    数据结-构查找算法二分查找二叉顺序数哈希查找

    算法的基本思路是将查找区间不断减半,每次比较中间元素与目标值,如果目标值等于中间元素则查找成功,否则根据目标值与中间元素的大小关系缩小查找区间。二分查找的时间复杂度为O(logn),在大规模数据查找时效率较...

    数据结构查找、排序、二分查找、折半查找算法

    二分查找适用于已排序的数组或列表,通过不断将查找区间减半,直到找到目标元素或者确定不存在为止。它的优点在于时间复杂度为O(log n),远优于线性查找的O(n)。 接下来,我们转向排序算法。排序是将一组数据按照...

    区间树上重叠区间查找算法.doc

    区间树上重叠区间查找算法.doc

    查找 算法——数据结构

    2. 初始化查找范围,设置两个指针`low`和`high`,分别表示查找区间的开始和结束位置。 3. 在循环中,计算中间位置`mid`,即`(low + high) / 2`。然后将目标值与中间位置的元素进行比较: - 如果中间元素等于目标值...

Global site tag (gtag.js) - Google Analytics