Я пишу приложение поиска, которое символизирует большой текстовый корпус.String.Split Efficiency Question
текст синтаксический анализатор должен удалить любую чепуху из текста (т.е. [^ A-Za-Z0-9])
У меня было 2 идеи в моей голове, как сделать это:
1) Поместите текст в строку, преобразуйте его в charArray, используя String.tocharArray, а затем запустите char с помощью char с помощью цикла -> while (позиция < string.length) Выполнение этого действия я могу сделать токенизацию всего массива строк за один проход по текст.
2) Сбросьте все non digit/alpha, используя string.replace, а затем string.split с некоторыми разделителями, это означает, что я должен дважды запускать всю строку. Однажды, чтобы удалить плохие символы, а затем снова разбить его.
Я предполагал, что, поскольку # 1 делает то же самое, что и # 2, но в O (n), это будет быстрее, но после тестирования обоих, # 2 - путь (путь!) Быстрее.
Я пошел еще дальше и просмотрел код, стоящий за String.Strip, используя рефлектор red-gate .net. Он запускает неуправляемый символ char, как и # 1, но все еще намного быстрее.
У меня нет подсказки, почему №2 намного быстрее, чем # 1.
Любые идеи?
Как описано, я думаю, что оба метода 1 и метода 2 - O (n) – Greg
Бессмысленно догадываться о перфекте, пока вы не опубликуете код, который каждый может попробовать. Насколько нам известно, вы действительно набрали № 1. String.Replace() сильно оптимизирован, потому что это алгоритм O (nm), но вам все равно нужно запустить его k раз. Ваше нахождение не имеет большого смысла. –