gpt4 book ai didi

c# - 哪些算法用于搜索单词中的子词?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:11 25 4
gpt4 key购买 nike

我知道,也许这个问题很愚蠢,但我被困住了,我需要真正的帮助。我需要在我的项目中使用算法来找到所有以另一个开头的单词并返回所有单词的尾部。例如:查找所有以 dad

开头的单词

在字典中我们有:

dada,dadaism,daddled,daddling

结果:

a, aism, dled, dling

我有包含所有单词的字典,所以我只需要算法。有人建议我使用 patricia 算法,但我找不到任何 C# 示例。我的字典很大,所以我需要找到也非常快的算法。


更多信息:

  • 字典排序。
  • 最佳答案

    如何进行这项工作将取决于您的词典是如何排列的。如果它是一个排序的单词列表,那么您可以使用二进制搜索找到以“dad”开头的第一个单词,然后循环使用 StartsWithSubstring .即:

    List<string> Words = LoadWords(); // however you load them
    Words.Sort();

    // Now, search for "dad" (or whatever)
    string prefix = "dad";

    int index = Words.BinarySearch(prefix);

    // If the returned index is negative, the word wasn't found.
    // The index is the one's compliment of the the place where it would be in the list.
    if (index < 0)
    {
    index = ~index;
    }

    for (int i = index; i < Count && Words[i].StartsWith(prefix))
    {
    Console.WriteLine(Words[i].Substring(prefix.Length));
    }

    这应该很快。排序是加载后的一次性成本。如果按排序顺序存储字典,则可以完全消除它。二进制搜索是 O(log n),其中 n 是字典中的单词数。

    如果您的字典是无序的,那么您将不得不遍历所有单词,这会花费很多时间。

    您的词典还有其他组织方式,这将大大减少它占用的空间,而且速度可能会更快。与创建排序列表相比,这些更复杂并且需要更多时间来构建。

    关于c# - 哪些算法用于搜索单词中的子词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8456542/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com