代码之家  ›  专栏  ›  技术社区  ›  kenny Shiraz Bhaiji

字计数器实现

  •  1
  • kenny Shiraz Bhaiji  · 技术社区  · 14 年前

    有没有比下面的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 回复  |  直到 14 年前
        1
  •  0
  •   kenny Shiraz Bhaiji    14 年前

    您可以构建一棵树,然后搜索将花费您正在搜索的字符串长度的恒定时间。在这种情况下,树比使用哈希更节省空间。

        2
  •  1
  •   user292096    14 年前

    作为对matt的回应,dictionary基本上是一个带有泛型的哈希表,因此查找是恒定时间的(嗯,不完全是,但几乎是)。

        3
  •  0
  •   matt    14 年前

    好吧,如果你有很多记忆,你可以把所有的字母单独存储在一个树形结构中。

    例如,有一个26个对象的数组,第一个字母是该数组的索引,数组是指向26个对象的更多数组的指针数组(当然只有在遇到该字母的情况下)。等等,第二个字母是数组第二层的索引…

    字典使用二进制搜索模式吗?还有,它是按字符串搜索的吗?或者它是否将字符串向下散列,如果不是,则将字符串向下散列为int 可以 提高绩效。另外,理论上,如果您手动执行,那么在保持列表“排序”时不会有任何开销,因为初始二进制搜索将在大约应该插入列表的位置放弃,如果它不存在的话?