2010-03-12 2 views
1

Есть ли лучший способ, чем следующая реализация переборки слов класса 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; 
    } 
} 
+0

Я что-то упустил или вы не используете слово в своем теле? –

+1

@shakedown: '' tt '' должно быть 'word'. – SLaks

+0

Да «tt» должно быть словом. спасибо, я исправил это. – kenny

ответ

0

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

+0

Var ist Al Gore? ;) – kenny

+0

Я нашел эту статью на основе вашего предложения, которое, кажется, предполагает использование SortedDictionary, а не Dictionary, поскольку оно хранит элементы в красном/черном дереве. http://blog.bodurov.com/Performance-SortedList-SortedDictionary-Dictionary-Hashtable – kenny

0

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

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

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

+0

О, у меня есть воспоминания, но они не имеют ничего общего с компьютерами. ;) – kenny

1

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

Смежные вопросы