微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

生成长度为 NN 为素数的所有单词,不包括同构单词

如何解决生成长度为 NN 为素数的所有单词,不包括同构单词

我想有效地生成所有单词长度 N(N 是素数),不包括同构的。

A同构到词B,如果有N元素转换词A 到词 B

Let V - 是 K 个元素的字母表。

例如 V = {a,b}

N 为 7

那么,例如单词 A = {a,a,b,a} 与单词 B = {a,b} 和单词同构C= {a,a} 因为有限循环群 S= {0,1,2,3,4,5,6} 有自同构 {0,6,3} 和 {0,2}

最简单的算法是

  • 找出所有可能的单词
  • 找到具有 N 个元素(N 个素数)的有限循环群的所有自同构
  • 排除同构词

不幸的是,这种方式在算法上效率不高。

解决方法

如果您反对需要存储所有唯一词的简单算法,那没有必要。对于 K^N 个单词中的每一个,测试它在字典序上是否小于或等于其所有同构(规范),如果是,则返回它。

我们可以做得更好

  • 生成所有规范的 (N−1) 字母后缀并附加所有可能的第一个字母。

  • 在测试规范性之前,通过遍历可能的字母的第二个位置并生成其他字母不小于第二个位置的后缀来生成 (N−1) 个字母后缀。

我们可以走得更远,但我怀疑增加的复杂性是否会带来回报。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。