给定单词成为词典单词的最少删除次数

Minimum number of deletions for a given word to become a dictionary word

Given a dictionary as a hashtable. Find the minimum # of deletions needed for a given word in order to make it match any word in the dictionary.

是否有一些聪明的技巧可以在小于指数复杂度的情况下解决这个问题(尝试所有可能的组合)?

首先,假设您在散列 table 中有一个单词 w,而您的单词是 x。当且仅当 w 是 x 的子序列时,您可以从 x 中删除字母以形成 w,在这种情况下,您需要从 x 中删除以形成 w 的字母数由 |x - w| 给出。因此,当然,一种选择是只遍历散列 table 并且对于每个单词,查看 x 是否是该单词的子序列,并在 table.[= 中找到最佳匹配项。 10=]

为了分析这个操作的运行时间,假设你的散列中总共有n个词table并且它们的总长度是L。那么这个操作的运行时间是O(L),因为您将最多处理所有单词中的每个字符一次。初始方法的复杂度是 O(|x| · 2|x|) 因为有 2|x| 个可能的词你可以通过删除 x 中的字母,您将花费 O(|x|) 时间来处理每个字母。根据字典的大小和单词的大小,一种算法可能比另一种更好,但我们可以说运行时间为 O(min{L, |x|·2|x| ) 如果您采用两种方法中更好的方法。

您可以构建一个 trie,然后查看您给定的单词在其中的位置。你的词和最接近的现有父词的深度差异是所需的删除次数。