Это не кажется мне нишевой проблемой, но я удивительно не могу найти что-либо об этом в Интернете.Предположим, у вас есть набор алфавита (для меня первые m букв обычного алфавита), и вы хотите эффективно перебрать все слова алфавита (например, для того, чтобы провести их анализ).Это легко сделать в Python;просто сделайте что-то вроде
import itertools
alphabet = 'abcdefghijklmnopqrstuvwxyz'[0:m]
for l in range(0, 200):
for word in itertools.product(alphabet, repeat=l):
#foo
Однако для моей конкретной проблемы, когда я делаю анализ строки, легко предсказать, как изменится ответ, когда я применю к строке перестановку алфавита.Скорость имеет решающее значение в моей программе, поэтому нет смысла перебирать все слов;если бы я мог перебирать слова с точностью до перестановок алфавита , то я мог бы уменьшить пространство поиска и, следовательно, скорость с коэффициентом фактора len (алфавит) (в моем случае это также означало бы, что у меня меньше данных вобъем памяти).Я посмотрел, и в itertools, похоже, нет команды для итерации таким образом
Было бы легко собрать воедино некоторый код, который в начале каждой новой длины слова хранит всеслова такой длины в списке, сокращают список по отношению к перестановкам алфавита, а затем превращают этот список в итеративный для повторения.Проблема заключается в том, что, поскольку длина слов становится большой, этот список не умещается в памяти.Благодаря.