给定字母表中的所有可能字符串

时间:2018-02-28 18:13:31

标签: python combinations

我正在尝试从给定的字母表中生成特定长度的所有可能字符串(以列表的形式)。

我尝试使用iterools方法(主要是itertools.product),但即使它适用于较小的长度,正如预期的那样,它非常昂贵,假设n = 100。我想我让它运行了大约1个小时仍然没有完成。

在合理的时间范围内实现这一目标的最快方法是什么?

1 个答案:

答案 0 :(得分:0)

如果要从字母集大小n生成大小为m的字符串,则不能比Theta(m**n)运行时更好(每个n字母都可以是使用顺序编程模型的m字母之一。

以下递归程序是一个实现(原则上由于递归深度需要O(n)空间;从技术上讲,我们需要使用str_so_far的字符串列表,因为虽然字符串在Python中是不可变的,但是是可变的):

def gen_strings(alpha_set, n):
    def gen_strings_helper(str_so_far, n_remaining):
        if n_remaining == 0:
            all_strings.append(str_so_far)
            return
        for c in alpha_set:
            gen_strings_helper(str_so_far + c, n_remaining - 1)

    all_strings = []
    gen_strings_helper('', n)
    return all_strings

>>> gen_strings(['a', 'b'], 3)
['aaa', 'aab', 'aba', 'abb', 'baa', 'bab', 'bba', 'bbb']

为了加快速度,你应该研究并行编程模型。

但是,如果n=100m=26(一组小写的英文字母),您的输出将为26**100字符串长!