Наш сервер создает файлы типа {c521c143-2a23-42ef-89d1-557915e2323a}-sign.xml в папке журнала. Первая часть - GUID; вторая часть - это шаблон имени.
Я хочу подсчитать количество файлов с одинаковым шаблоном имен. Например, мы имеем
{c521c143-2a23-42ef-89d1-557915e2323a}-sign.xml
{aa3718d1-98e2-4559-bab0-1c69f04eb7ec}-hero.xml
{0c7a50dc-972e-4062-a60c-062a51c7b32c}-sign.xml
Результат должен быть
sign.xml,2
hero.xml,1
Общие типы возможных шаблонов имен неизвестны, возможно, превышает int.MaxValue.
Общее количество файлов на сервере неизвестно, возможно, превышает int.MaxValue.
Требования
Конечный результат должен быть отсортирован по шаблону имени.
Сервер, на котором запускается этот инструмент, является суперкритическим. Мы должны иметь возможность указать использование памяти (МБ) и количество созданных временных файлов, если они есть, перед запуском инструмента и без знания каких-либо признаков папки журнала.
Мы используем язык С#.
Моя идея:
- Для первых 5000 файлов, подсчитайте вхождения, напишите результат на
Group1.txt. - Для вторых 5000 файлов, подсчитайте вхождения, напишите результат на
Group2.txt. - Повторяйте до тех пор, пока все файлы не будут обработаны. Теперь у нас есть группа групповых файлов.
Затем я объединю все эти групповые файлы.
Group1.txt Group2.txt Group3.txt Group4.txt
\ / \ /
Group1-2.txt Group3-4.txt
\ /
Group1-4.txt
Group1-4.txt - конечный результат.
Разногласия между мной и моим другом - это то, как мы посчитаем события.
Я предлагаю использовать словарь. Шаблон имени файла является ключевым. Пусть m - размер раздела. (В этом примере это 5000.) Тогда временная сложность O (m), пространственная сложность O (m).
Мой друг предлагает отсортировать шаблон имени, а затем подсчитать вхождение за один проход, так как все одинаковые шаблоны имен теперь объединены. временная сложность O (m log m), пространственная сложность O (m).
Мы не можем убеждать друг друга. Вы, ребята, видите какие-либо проблемы двух методов?