我正在开发一个包含大型数组的应用程序,其中包含数字行,

transNum[20000][200]//this is the 2d array containing the numbers and always keep track of the line numbers


我正在使用嵌套循环来查找最频繁的项目。这是

for(int i=0/*,lineitems=0*/;i<lineCounter;i++)
  {
      for(int j=0,shows=1;j<lineitem1[i];j++)
      {
          for(int t=i+1;t<lineCounter;t++)
          {
              for(int s=0;s<lineitem1[t];s++)
              {
                  if(transNum[i][j]==transNum[t][s])
                      shows++;
              }
          }

          if(shows/lineCounter>=0.2)
          {

              freItem[i][lineitem2[i]]=transNum[i][j];
              lineitem2[i]++;
          }
      }

  }


当我使用像test [200] [200]这样的小型输入数组进行测试时,此循环工作正常并且计算时间可以接受,但是当我尝试处理包含12000行的数组时,计算时间过长,所以我我在想是否还有其他方法可以计算频繁项目而不是使用此循环。我仅对10688行进行了测试,而获得所有频繁项目的时间为825805ms,这很昂贵。

最佳答案

取决于您的输入。如果您还在同一代码中插入数据,则可以在插入频繁项目时对其进行计数。



这是伪C解决方案:

int counts[1000000];

while(each number as n)
{
    counts[n]++;
    // then insert number into array
}


编辑#2:确保将数组中的所有项目初始化为零,以确保不会出现意外结果。

关于java - 如何获得最频繁的物品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3847079/

10-08 21:58