выбор оптимальной случайной последовательности-перестановки в python - PullRequest
0 голосов
/ 05 января 2012

Я работаю над сценарием Python 2.6 для генерации стихов из небольших фрагментов транскриптов медиафайлов.

Атм Я ломаю голову над выбором случайной комбинации действительных значений слогов для составления полуслучайных строк из пулов известных- (слог) длина строки.Текущая функция основана на функции powerset (), предложенной здесь: http://docs.python.org/release/3.1.3/library/itertools.html

def valid(self, iterable, target):
    s = list(iterable)
    range_floor = target / max(s)
    range_ceil = target / min(s)
    unfiltered = chain.from_iterable(self.combinations_with_replacement(s, r) for r in range(range_floor, range_ceil))
    return random.choice(list(ifilter(lambda x: sum(x) is target, unfiltered)))

Для быстрого примера: если бы у меня было два набора данных, разделенных на 5 и 10 слогов, из которых можно собрать20-слоговая строка, допустимые комбинации будут включать: (5, 5, 5, 5), (10, 10), (5, 10, 5) и (10, 5, 5).

При большом количестве возможных комбинаций (более длинные строки, более двух длин составляющей единицы) время обработки становится значительным - это моя главная задача на данный момент.В конечном итоге я могу просто ограничить свою область применения и установить жесткие ограничения на некоторые переменные, чтобы избежать более интенсивных вариантов.

Когда я пишу это, мне приходит в голову, что это может быть такая ситуация, когда это имеет смыслпросто придерживаться существующего алгоритма и кэшировать / извлекать прошлые результаты, чтобы сэкономить на выполнении работы более одного раза - но у меня действительно нет опыта в CS или математике, поэтому я подозреваю, что могу упустить что-то очевидное для тех, ктоделать.

...