查找所有可能的固定大小字符串Python
问题:查找所有可能的固定大小字符串Python,python,Python,问题: 我想从36个字符中生成所有可能的组合,这些字符由固定长度字符串中的字母和数字组成。假设术语“固定长度”是字符串长度的上限下面列出了其中一些组合: a b c . . z 0 1 . . 9 . . . aaaaaa aaaaab . . 99999999999999999998 99999999999999999999 // end of the list 我不想将它们存储在内存或磁盘中,因为我对它们进行了计算,如果它们不能达到目标结果,那么,我就不再需要它了。 方法: 1.在第一次尝
我想从36个字符中生成所有可能的组合,这些字符由固定长度字符串中的字母和数字组成。假设术语“固定长度”是字符串长度的上限
下面列出了其中一些组合:
a
b
c
.
.
z
0
1
.
.
9
.
.
.
aaaaaa
aaaaab
.
.
99999999999999999998
99999999999999999999 // end of the list
我不想将它们存储在内存或磁盘中,因为我对它们进行了计算,如果它们不能达到目标结果,那么,我就不再需要它了。
方法:
1.在第一次尝试中,我选择递归来创建字符串。但是使用记忆太可怕了
2.在第二次尝试中,我使用DFS算法,因为它在使用内存方面几乎是最优的,因为它大约是O(bm)。但从时间角度看,这非常耗时。
有没有其他更优化的方法?
更新
这里是长度为2和3个字符的可能输出:
a
b
c
aa
ab
ac
ba
bb
bc
ca
cb
cc
不管算法如何,使用递归可能是最简单的方法。不幸的是,你是对的,它可能需要大量的内存来打开每一帧,因为它递归下来。您甚至可能达到递归限制 我会检查继续传球的风格。这是一种优化,允许在执行类似这样的大型递归工作时使用更少的帧。它不会达到递归限制,可能会加快速度。我非常确定Python支持这种优化。这是一个高级主题,所以可能需要一些时间才能完成 您可以使用它。它返回一个固定长度序列的生成器 当您先按长度排序字符串,然后按字典顺序排序时,您可以使用如下内容
import itertools
for l in range(1, 5):
for seq in itertools.product("abc", repeat=l):
print("".join(seq))
看看
itertools.compositions\u with\u replacement()。如果我的解释或问题有问题,请告诉我,不要只是点击“无用”箭头!这个工具没有像我预期的那样工作,下面是上面代码的结果:a b c aa ab ac bb bc cc aab aac abb abb acc bbb bbc bbc bbc aab aab aac aab aac aab aac aab aac aabb abc abc abc abc acc bbc bbc bcc ccc
它缺少“ba”或“aaba”已修复,由于订单关系重大,我们需要使用itertools.product
。感谢您的帮助,它工作完美,满足了我的需要。顺便问一下,有没有可能缩短执行时间?因为正如我在问题中提到的,我必须检查一些情况,以确定是否接受输出。我能为你做些什么?谢谢,我会查一下的。