С помощью двойной петли вы понимаете, что создаете алгоритм с эффективностью O 2 .Например, если оба файла содержат по 100 строк в каждом файле, вы будете повторять свой внутренний цикл 10000.Если оба файла содержат 1000 элементов, вы будете не в 10 раз дольше, а в 1000 раз дольше.Если эти файлы настолько большие, насколько вы утверждаете, вы будете долго ждать завершения вашей программы.
Лучше всего поместить ваши данные в базу данных SQL (что-то, что сделанодля работы с большими источниками данных).
В противном случае вам придется сохранить первый файл в формате, в котором вы сможете быстро найти нужный диапазон, например, в двоичном дереве.
Сохраните ваш первый файл в виде двоичного дерева, основываясь на нижнем диапазоне, но сохраняя для сравнения нижний и верхний диапазоны в узлах двоичного дерева.
Для каждой строки во втором файле вы будете искать черезваше двоичное дерево для правильного нижнего диапазона, сравните верхний диапазон, и, если это совпадение, вы нашли свой узел.
Это слишком сложно для меня, чтобы написать быстрый алгоритм.Однако в CPAN есть несколько модулей двоичного дерева, которые должны значительно упростить хранение и поиск вашего дерева.К сожалению, я никогда не использовал один, поэтому я не могу дать рекомендации.Однако вам, вероятно, следует найти алгоритм сбалансированного дерева, такой как Tree :: AVL .
Использование такой структуры, безусловно, сложнее, чем ваш двойной цикл, но гораздо, намного быстрее.При этом эффективность будет немного больше, чем размер двух файлов вместе взятых.
Другая возможность состоит в том, чтобы отсортировать два файла в два отдельных массива.Алгоритм сортировки Perl где-то рядом с OlogO, который намного эффективнее, чем двойной цикл, но не так эффективен, как построение двоичного дерева.Однако, если два файла более или менее уже в порядке, он будет ближе к бинарному дереву по эффективности и намного быстрее для реализации.
Если вы сортируете оба массива, вы можете последовательно отключаться вфайл № 2, и найдите строку в файле № 1.Поскольку оба файла в порядке, вам не нужно начинать с начала файла # 1 при поиске следующей подходящей строки в файле № 2.
Надеюсь, это поможет.Извините за отсутствие примеров кодирования.