Прежде всего хочу пояснить, что характер этого вопроса отличается от других вопросов, которые уже опубликованы в соответствии с моими знаниями. Пожалуйста, дайте мне знать, если это не так.Найти общие имена в двух файлах на Java
Учитывая
- У меня есть список имен ~ 3000.
- Есть ~ 2500 файлов, которые состоят из имен одной в строке (взято из списка имен)
- Каждый файл содержит ~ 3000 имен (и, следовательно, ~ 3000 строк, хотя в среднем составляет 400)
Задача
В данный момент мне предложат 2 файла. Я должен создать список имен, которые являются общими в обоих файлах.
Pre Processing
Для уменьшения времени сложности я делал предварительную обработку и отсортированный имена во всех файлах.
Моего подход
- Отсортированных имена в данном списке и индексируются их от 0 до 2999
- В каждом файле для каждого имени
- Рассчитана группа номер (имя_индекс/30)
- Расчетное значение группы (для каждого имени в той же группе Статистика (2^(name_index% 30)) и добавить)
- Создать новый файл с таким же именем в формате «groupNumber blankSpace groupValue»
Результат
Вместо ~ 3000 (хотя в среднем составляет 400) имена в каждом файле теперь будет иметь максимум 100 строк в каждом файле. Теперь мне нужно будет проверить общий номер группы, а затем с помощью манипуляции с битами я могу узнать общие имена.
Expectation
Может кто-нибудь пожалуйста, предложить более короткий и лучшее решение проблемы. Я могу делать предварительную обработку и хранить новые файлы в своем приложении, чтобы минимальная обработка требовалась во время поиска общих имен.
Пожалуйста, дайте мне знать, если я пойду в неправильном направлении, чтобы решить проблему. Заранее спасибо.
Очки
В моем подходе размер общих файлов 258KB (как я использовал имена групп и групповые ценности), и если она хранится имен в каждой строке его размер составляет 573KB. Эти файлы должны храниться на мобильном устройстве. Поэтому мне нужно уменьшить размер, насколько это возможно. Также я с нетерпением жду сжатия данных, и я не знаю, как это сделать. Пожалуйста, обратите внимание также на это.
Каковы ваши требования к производительности? –
Что не так: 1. прочитать файл по строкам, добавить каждую строку в HashSet; 2. прочитайте второй файл за строкой, проверьте, содержит ли HashSet указанную строку или нет. Если да, добавьте его в результаты, если нет, продолжайте. –
Сколько у вас уникальных имен? Если вы хотите завершить 100 строк на файл (еще 2500 файлов?), Это будет 250 000 слов = строки? Я тоже не понимаю: 'Каждый файл содержит ~ 3000 имен, хотя avg - 400'. Если каждый файл содержит 3000 имен, avg будет 3000, не так ли? –