Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 高效查找高密度区间的最佳数据结构_Algorithm_Search_Optimization_Data Structures - Fatal编程技术网

Algorithm 高效查找高密度区间的最佳数据结构

Algorithm 高效查找高密度区间的最佳数据结构,algorithm,search,optimization,data-structures,Algorithm,Search,Optimization,Data Structures,我有一组未排序的整数和一个区间长度。我需要找到给定区间中包含的元素的最大子集 例1: Set: [11, 1, 2, 100, 12, 14, 99] Interval: 4 Result: [11, 12, 14] 例2: Set: [1, 100, 55, 2, 88, 3] Interval: 10 Result: [1, 2, 3] 实际上,集合中还有更多的元素 解决这个问题的有效数据结构和算法是什么 将整数集排序为数组A,并将w设为间隔的宽度 初始化i=j=best\u

我有一组未排序的整数和一个区间长度。我需要找到给定区间中包含的元素的最大子集

例1:

Set: [11, 1, 2, 100, 12, 14, 99]

Interval: 4

Result: [11, 12, 14]
例2:

Set: [1, 100, 55, 2, 88, 3]

Interval: 10

Result: [1, 2, 3]
实际上,集合中还有更多的元素

解决这个问题的有效数据结构和算法是什么

  • 将整数集排序为数组
    A
    ,并将
    w
    设为间隔的宽度

  • 初始化
    i=j=best\u start=best\u n=0

  • 只要
    A[j]
    (或
    best\u n
    设置
    best\u start=i
    best\u n=j-i
    ,则增量
    j

  • 增量
    i=i+1
    如果
    i,j
    返回到2


  • 总复杂度由初始排序复杂度O(n logn)决定。排序后,请注意复杂度必须是线性的,因为
    j
    只能增加,并且我们在每一步都会进行常量排序。

    您应该首先对数组进行排序(O(n)*log(n)),然后从开始遍历数组并保持间隔。如果当前数超过间隔,则存储该数组。如果发现较大的子集,则可以更新存储


    该算法的时间复杂度为O(N)*log(N)+O(N),大约为2*O(N)。空间复杂度为O(N)。

    通过最大子集,您指的是子集的长度或子集的元素之和…?@YashShah集合的大小几乎总是指其基数。在示例中,您也可以排除元素之和,因为
    [1,2,3]
    是一个结果,而
    [100]
    则会更好。我指的是元素数量最多的集合