【问题标题】:Unique word count唯一字数
【发布时间】:2011-04-19 22:05:41
【问题描述】:

这是一个适用于(可能)任何高级编程语言的通用问题。 情况如下:

假设我有一个字符串数组。比如说,我设法将一个短篇小说中的 500 000 个字符串放入一个数组中(假设您没有输入格式的选项)。因此,很可能会有任意数量的重复项。

我想获取这个字符串数组并创建另一个数组,其中包含该数组的唯一子集(?)(即:没有重复项)。在这种情况下,输入和输出都必须是数组,这可能会限制您使用各种选项。

就性能而言,最快的方法是什么?我目前正在使用线性搜索来检查一个单词是否已经存在,但由于它是一个线性搜索,我觉得可能有更快的方法,特别是如果我有不合理数量的字符串可以使用。就像一部更大的小说!

【问题讨论】:

    标签: programming-languages word-count


    【解决方案1】:

    使用哈希集可能是最明智的做法 - 复杂度应该是 O(N)。

    注意:大多数高级编程语言都包含一个从数组中删除重复项的函数的实现,例如PHP.

    【讨论】:

    • 或者基于散列的集合,映射意味着你有一个键和一个值,但是你可以使用这个值来存储一个计数。
    • 是的,对不起,我的意思是一个哈希集。已编辑。
    【解决方案2】:

    如果您要在其中输入大量单词,directed acyclic word graph 是我所知道的最有效的数据结构。

    然而它在概念上是一个非常简单的数据结构。

    【讨论】:

    • minimal 有向无环词图的生成速度非常非常慢,所以这不是一个真正的选择。也许你的意思是trie,它是“最小化”的词图;这生成起来要快得多,但取决于字典可能会占用大量内存。我仍然会为 OP 尝试做的事情推荐一个哈希集。 (尽管如果 OP 要做很多文字摆弄,那么了解 DAWG 和尝试本身可能会很有趣。)
    • @Timwi 也许我确实的意思是特里 - 我一直认为“DAWG”指的是这个概念系列而不是一个特定的概念。
    • 从技术上讲,我认为 DAWG 是更通用的术语,而 trie DAWG 的特例。但在实践中,DAWG 一词似乎通常指的是 minimal DAWG...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    相关资源
    最近更新 更多