计算巨大/大数组中的不同元素的数量

 律师苏俊杰 发布于 2023-02-10 14:22

我有一个大数组说..数组[7000].每个索引都有一个介于0和9之间的数字.然后给出两个索引说x = 100,y = 105我需要找到给定范围之间不同元素的数量.假设

array[100]=1;
array[101]=2;
array[102]=1;
array[103]=4;
array[104]=7;
array[105]=2;

现在这里不同元素的数量是4(即数字1,2,1,7}.这可以通过在两个索引之间迭代并跟踪数字来计算.但是我面临的主要问题是程序必须执行的查询数量非常大,即操作必须完成几千个x和y的值(比如10 ^ 6个查询),在这种情况下,这个方法会变得安静低效.什么是更好的算法,我试着在很多地方搜索它.

1 个回答
  • 好的,这个解决方案不是内存效率,但它将用于计算O(1)中的查询.

    形成另一个7000x10的2D数组,其中每一行都是该条目的[0到9s]的计数.

    因此,无论何时获得查询,您只需要减去行的相应索引以获得[0..9]数的计数.

    检查哪些指数具有非零计数差异.

    例如,数组行可能如下所示:

    A[36] = { 5, 4, 2,  1, 4, 3, 7, 8, 2, 1 }
    A[38] = { 6, 4, 2,  1, 4, 3, 7, 8, 2, 2 }
    
    Diff =  { 1, 0, 0,  0, 0, 0, 0, 0, 0, 1 }
    

    所以在36和38之间有两个独特的元素(0和9).

    示例2:
    对于输入数组{1,2,3,2,4},矩阵A应为:

    A[0] = { 0, 1, 0,  0, 0, 0, 0, 0, 0, 0 }
    A[1] = { 0, 1, 1,  0, 0, 0, 0, 0, 0, 0 }
    A[2] = { 0, 1, 1,  1, 0, 0, 0, 0, 0, 0 }
    A[3] = { 0, 1, 2,  1, 0, 0, 0, 0, 0, 0 }
    A[4] = { 0, 1, 2,  1, 1, 0, 0, 0, 0, 0 }
    

    所以对于A [3]到A [4],应该有1个唯一元素(4)

    Diff =  { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0 }
    

    所以对于A [1]到A [4],应该有3个唯一元素(2,3,4)

    Diff =  { 0, 0, 1,  1, 1, 0, 0, 0, 0, 0 }
    

    编辑:我已经考虑过A [1]到A [4]的含义是指数[2到4]中的唯一元素.如果需要,可以将其更改为1到4.在这种情况下,

    Diff =  { 0, 0, 2,  1, 1, 0, 0, 0, 0, 0 }
    

    (再次3个独特的元素)

    2023-02-10 14:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有