首先,我想明确指出,这个问题的性质与据我所知已经发布的其他问题不同。如果不是这样,请告诉我。
给定
- 我有一个名字列表~3000。
- 有约 2500 个文件,其中包含一行中的名称(取自名称列表)
- 每个文件包含约 3000 个名称(因此约 3000 行,尽管 avg 为 400)
问题
在给定时间,我将获得 2 个文件。我必须创建两个文件中通用的名称列表。
预处理
为了降低时间复杂度,我已经完成了预处理并对所有文件中的名称进行了排序。
我的方法
- 对给定列表中的名称进行排序,并将它们从 0 到 2999 编入索引
- 在每个文件中为每个名称
- 计算组号(name_index / 30)
- 计算组值(对于同一组中的每个名称计算 (2^(name_index%30)) 并添加)
- 以“groupNumber blankSpace groupValue”格式创建一个具有相同名称的新文件
结果
现在我将在每个文件中最多包含 100 行,而不是在每个文件中包含 ~3000(虽然平均为 400)名称。现在我必须检查公共组号,然后通过位操作,我可以找出常用名称。
期待
任何人都可以建议一个更短更好的问题解决方案。我可以在我的应用程序中进行预处理和存储新文件,以便在查找常用名称时需要最少的处理。
如果我在错误的方向上解决问题,请告诉我。提前致谢。
积分
在我的方法中,总文件的大小为 258KB(因为我使用了组名和组值),如果它在每行中按名称保存,它的大小为 573KB。这些文件必须存储在移动设备上。所以我需要尽可能减小尺寸。我也期待数据压缩,但我不知道如何做到这一点。请注意解释。