Реализация счетчика слов - PullRequest
1 голос
/ 12 марта 2010

Есть ли лучший способ, чем следующая грубая реализация класса подсчета слов c #?

ОБНОВЛЕННЫЙ КОД: Извините!

/// <summary>
/// A word counting class.
/// </summary>
public class WordCounter
{
    Dictionary<string, int> dictTest = new Dictionary<string, int> ();

    /// <summary>
    /// Enters a word and returns the current number of times that word was found.
    /// </summary>
    /// <param name="word">The word or string found.</param>
    /// <returns>Count of times Found() was called with provided word.</returns>
    public int Found ( string word )
    {
        int count = 1;
        return dictTest.TryGetValue ( word, out count ) ? ++dictTest[word] : dictTest[word] = 1;
    }
}

Ответы [ 3 ]

1 голос
/ 12 марта 2010

В ответ на matt Dictionary - это, в основном, HashTable с универсальными шаблонами, поэтому поиск выполняется с постоянным временем (ну, не совсем, но в значительной степени).

0 голосов
/ 12 марта 2010

Вы можете построить дерево, и тогда поиск займет постоянное время по длине строки, которую вы ищете. Дерево в этом случае экономит больше места, чем хеш.

0 голосов
/ 12 марта 2010

хорошо, если бы у вас было много воспоминаний, вы можете хранить все буквы по отдельности в древовидной структуре.

так что у вас есть массив из 26 объектов, первая буква - это индекс в этом массиве, массив - это массив указателей на большее количество массивов из 26 объектов (но, конечно, только если эта буква встречалась). и так далее, вторая буква - указатель на второй уровень массивов ...

использует ли словарь шаблон бинарного поиска? Кроме того, он ищет по строке? или он хеширует строки, если нет, хэширование строк до целых чисел может повысить производительность. также теоретически, если бы вы сделали это вручную, не было бы лишних затрат для сохранения списка «отсортированным», потому что первоначальный двоичный поиск дал бы примерно то место, где он должен быть вставлен в список, если он не существует?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...