java - 如何获取最频繁的项目

标签 java arrays frequency

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

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,这太昂贵了。

最佳答案

请记住,这最多是一个 O(n^2) 算法,而且可能会更糟。这意味着操作数量与项目数量的平方成正比。经过一定数量的行后,性能会迅速下降,除了改进算法之外,您无能为力。

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

相关文章:

java - 从 vector 或数组创建动态形式

java - 无法使按键监听器工作

c# - 对象数组未按预期交付

java - 构建一个java程序,查找给定数组中数字的频率

java - Spring & Java Generics - 在抽象 Controller 中获取一项服务的实例

java - Java中如何返回数组中的位置

javascript - 如何在 javascript 中使用两个数组列表提高比较和选取对象的性能

r - 创建一个按组捕获最频繁出现的变量

java - elasticsearch 禁用词频评分

java - 无法绘制到 Canvas : "cannot be applied to given types"