При некоторых обстоятельствах возможно улучшить его:
Просто для удовольствия:
вы можете использовать SortedList, если ваш список рассылки является списком рассылки (потому что у вас есть разделитель типа ";"), вы можете сделать следующее:
Первый алгоритм расчета времени работы:
Слова: п. (каждый элемент имеет длину O (1)).
список рассылки: K шт.
каждый элемент в списке рассылки средней длины Z.
средняя длина каждого подпункта в элементе списка рассылки Y, поэтому среднее количество подэлементов в элементах списка рассылки равно m = Z / Y.
Ваш алгоритм принимает O (n * K * Z). // лучший способ с алгоритмом кнута
1. Теперь, если вы сортируете список слов в O (n log n).
2.1- используйте mailingListItem.Split (";". ToCharArray ()) для каждого элемента списка рассылки: O (Z).
2.2 - отсортировать элементы в списке рассылки: O (m * log m)
полная сортировка занимает O (K * Z) в стоимостном случае по отношению к (m logm << Z). </p>
3 - использовать алгоритм слияния для объединения элементов с плохим словом и определенного списка рассылки: O ((m + n) * k)
общее время равно O ((m + n) * K + m * Z + n ^ 2) по отношению к m << n, общее время выполнения алгоритма равно O (n ^ 2 + Z * K) , который меньше, чем O (n * K * Z), если n <K * Z (я так думаю). </p>
Так что, если производительность очень, очень, очень важна, вы можете сделать это.