java - 在 Java 中查找两个文件中的通用名称

标签 java algorithm

首先,我想澄清一下,这个问题的性质不同于据我所知已经发布的其他问题。如果不是这样,请告诉我。

给定

  1. 我有一个大约 3000 人的名单。
  2. 大约有 2500 个文件,每行一个名字(取自名字列表)
  3. 每个文件包含约 3000 个名称(因此约 3000 行,尽管平均为 400)

问题

在给定的时间,我将获得 2 个文件。我必须创建一个在两个文件中通用的名称列表。

预处理

为了降低时间复杂度,我对所有文件中的名称进行了预处理和排序。

我的方法

  1. 对给定列表中的名称进行排序,并将它们从 0 到 2999 进行索引
  2. 在每个文件中的每个名称

  • 计算组数(name_index/30)
  • 计算组值(对于同一组中的每个名称计算 (2^(name_index%30)) 并相加)
  • 以“groupNumber blankSpace groupValue”格式创建一个同名的新文件

结果

现在我将在每个文件中最多包含 100 行,而不是在每个文件中包含 ~3000(尽管平均为 400)个名称。现在我必须检查公共(public)组号,然后借助位操作我可以找出公共(public)名称。

期待

任何人都可以提出一个更短更好的问题解决方案吗?我可以在我的应用程序中进行预处理和存储新文件,以便在查找通用名称时需要最少的处理。

如果我在错误的方向上解决问题,请告诉我。提前致谢。

积分

在我的方法中,总文件的大小为 258KB(因为我使用了组名和组值),如果它在每一行中按名称保存,则它的大小为 573KB。这些文件必须存储在移动设备上。所以我需要尽可能地减小尺寸。我也很期待数据压缩,但我不知道该怎么做。也请注意解释。

最佳答案

您尝试过以下方法吗?

  1. 一次从 list1 中读取 1 个名称,并将它们添加到哈希集中。
  2. 一次从列表 2 中读取名称,在从列表 1 创建的哈希集中查找它们。如果它们在哈希集中,则意味着该名称对两个文件都是通用的。

如果您想要预处理以提高速度,请在每个列表中存储名称的数量,然后选择较短的列表作为 list1。

关于java - 在 Java 中查找两个文件中的通用名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10523598/

相关文章:

java - 以有限的执行次数高效地线程安全地实现业务服务操作

java.lang.IndexOutOfBoundsException : Index: 0, 大小 : 0 at java. util.ArrayList.rangeCheck

C++,非常意外-1#INF

algorithm - MapReduce 矩阵乘法复杂度

algorithm - 滑动窗口上的最小值

javascript - 求解代数方程的思维过程?

java - 如何在selenium中定位无序列表中的元素

java - 获取我刚刚单击以使用 java 应用程序打开的文件的路径(jar 可执行文件)

PHP - 这个 Levenshtein 距离递归算法太慢了还是我错了?

java - 找不到类,尝试使用 Play 商店制作多人游戏时解码错误