首先,我想明确这个问题的性质与我所知道的其他问题不同。如果不是这样,请告诉我。
给出:
1. 我有一个名字列表 ~3000。 2. 有 ~2500 个文件,其中每个文件都包含一行名称(从名称列表中获取)。 3. 每个文件包含 ~3000 个名称(因此有 ~3000 行,尽管平均值为 400)。
问题:
在给定的时间内,我将提供 2 个文件。我必须创建一个在这两个文件中共同存在的名称列表。
预处理:
为了减少时间复杂度,我进行了预处理,并对所有文件中的名称进行了排序。
我的方法:
1. 对给定列表中的名称进行排序,并将它们从 0 到 2999 进行了索引。 2. 对于每个名称的每个文件:
- 计算组号(名称索引/30) - 计算组值(对于同一组中的每个名称,计算 (2^(name_index%30)) 并相加) - 使用“groupNumber blankSpace groupValue”格式创建一个具有相同名称的新文件。
结果:
现在,每个文件中最多只有 100 行名称(尽管平均值为 400)。现在,我将检查共同的组号,然后通过位操作找到共同的名称。
期望:
请问是否有更短、更好的解决方案?我可以在应用程序中进行预处理并存储新文件,以便在查找共同名称时需要最少的处理。如果我解决问题的方向有误,请告诉我。谢谢您的帮助。
注意事项:
在我的方法中,总文件大小为 258KB(因为我使用了组名和组值)��如果按每行一个名称保存,则大小为 573KB。这些文件必须存储在移动设备上。因此,我需要尽可能地减小文件大小。此外,我正在寻求数据压缩,并且对如何进行数据压缩一无所知。请您讲解一下。
给出:
1. 我有一个名字列表 ~3000。 2. 有 ~2500 个文件,其中每个文件都包含一行名称(从名称列表中获取)。 3. 每个文件包含 ~3000 个名称(因此有 ~3000 行,尽管平均值为 400)。
问题:
在给定的时间内,我将提供 2 个文件。我必须创建一个在这两个文件中共同存在的名称列表。
预处理:
为了减少时间复杂度,我进行了预处理,并对所有文件中的名称进行了排序。
我的方法:
1. 对给定列表中的名称进行排序,并将它们从 0 到 2999 进行了索引。 2. 对于每个名称的每个文件:
- 计算组号(名称索引/30) - 计算组值(对于同一组中的每个名称,计算 (2^(name_index%30)) 并相加) - 使用“groupNumber blankSpace groupValue”格式创建一个具有相同名称的新文件。
结果:
现在,每个文件中最多只有 100 行名称(尽管平均值为 400)。现在,我将检查共同的组号,然后通过位操作找到共同的名称。
期望:
请问是否有更短、更好的解决方案?我可以在应用程序中进行预处理并存储新文件,以便在查找共同名称时需要最少的处理。如果我解决问题的方向有误,请告诉我。谢谢您的帮助。
注意事项:
在我的方法中,总文件大小为 258KB(因为我使用了组名和组值)��如果按每行一个名称保存,则大小为 573KB。这些文件必须存储在移动设备上。因此,我需要尽可能地减小文件大小。此外,我正在寻求数据压缩,并且对如何进行数据压缩一无所知。请您讲解一下。