Java 我可以使用什么样的模式来存储单词组合?

Java 我可以使用什么样的模式来存储单词组合?,java,sql,math,combinations,Java,Sql,Math,Combinations,我正在用Java编写一个简单的程序。给定一组字母,它将列出与字母组合匹配的超过2个字母的所有单词。 例如: 是给定的单词是ward。 结果应该是:病房。原始的,原始的,原始的,战争的,原始的 我在一个sqlite数据库中有一个巨大的英文单词列表,它是原始形式的,并按字母排序,这使得选择速度更快 数据库架构如下所示: 字典:{id,单词,长度} 字谜:{id,字谜,长度} 字谜字典:{id,单词,字谜} 以同样的例子: 插入单词raw时 它搜索arw,结果返回原始的、战争的信息 我的问题在于,每次

我正在用Java编写一个简单的程序。给定一组字母,它将列出与字母组合匹配的超过2个字母的所有单词。 例如: 是给定的单词是ward。 结果应该是:病房。原始的,原始的,原始的,战争的,原始的 我在一个sqlite数据库中有一个巨大的英文单词列表,它是原始形式的,并按字母排序,这使得选择速度更快

数据库架构如下所示: 字典:{id,单词,长度} 字谜:{id,字谜,长度} 字谜字典:{id,单词,字谜}

以同样的例子: 插入单词raw时 它搜索arw,结果返回原始的、战争的信息

我的问题在于,每次我搜索时,它都会对我给出的字母进行数学运算

例如,它使这个数学: 4!/4!*1! + 4!/3!*1! = 五,

我的问题是给定的字母长度是16。所以我必须在16+16+16+15+16中组合16合1的组合

我需要改进这个方法,因为给出一个简单的结果需要很多时间,但我现在不知道该怎么做?所以我尝试存储在数据库中,但不知道如何存储


提前感谢

在您的字典中,存储每个字母的频率。然后,只需构建select以仅返回字母频率匹配或更低的单词,如果您希望能够返回部分字谜,那么最有效的方法似乎是使用您已经拥有的字母顺序键存储单词:

adn->and,dna celrstu->cluster 等等

接受你的输入,按字母顺序排列,查找,匹配。完成了


如果这不是你问题的答案,你可能想稍微调整一下你问题的措辞…

我不完全确定你的限制和资源,这将有助于我调整我的答案,但这里是

在输入词典时,执行一些预处理。按照CurtainDog的建议计算频率

现在,根据您的示例,您似乎希望找到给定单词的子集。你可以搜索它的组合,也可以排除那些不适合该子集的组合

因此

去拿字典 从这里,你的单词有一个A,所以跳过这个字母 由此可知,给定的单词没有B,因此返回所有没有B的单词。 由此可知,给定的单词没有C,因此返回所有没有C的单词。 由此可知,您给定的单词有一个D,改进了格式,因此跳过此字母 等等

似乎您关心的是,随着给定单词中字母的增多,运行时间也在增长。 有了这个解决方案,运行时变得更好,字数更大,情况更糟
字典中有26-2*个单词

我已经以某种方式保存了频率,但我仍然需要获得所有可能的字母组合以匹配频率。我该如何改进呢?为什么你需要所有的组合来匹配频率?但是你需要一个多重映射或类似映射的东西,因为不同的单词可以有相同的字母顺序,例如read和dear.nice approach+1-不需要其他映射,你只需要一个过程来排序当前字符串