Наш сервер создает файлы типа {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).
Мы не можем убеждать друг друга. Вы, ребята, видите какие-либо проблемы двух методов?