Механизмы питона расчета последовательности


Я только начал думать о вероятностях. Проблема в том, что придумали, как вычислить всех потенциальных механизмов в заданной последовательности. По договоренности я имею в виду уникальные перестановки.

Я изначально использовал этот метод:

from itertools import permutations

sequence = '11223344'
len(set(permutations(sequence)))
# 2520

Но для длинных последовательностей это может занять много времени! (или запустить из памяти)

Я придумал эту функцию arrangements

from math import factorial
from functools import reduce
from operator import mul

def arrangements(sequence):
    return factorial(len(sequence))/reduce(mul,
           [factorial(sequence.count(i)) for i in set(sequence)])

# arrangements(sequence)
# 2520.0

Я думаю так:

Для данной длины последовательность со всеми уникальными предметами есть factorial(len(sequence)) перестановки.

Для каждого повторяются в этой последовательности будет factorial(#repeats) что приведет к той же перестановке.

Моя функция вычисляет всех перестановок / всех повторяющихся перестановок.

Я уверен, что у меня заново где-то уже существующие стандартные функции Python. Я хотел бы знать, если мои мысли-это звук и реализации смысла.

Не itertools.arrangements быть крутым?



Комментарии
2 ответа

Примечания


  • Я ожидал arrangements для возвращения уникальных перестановок sequenceне только сколько стоят.

  • Если она возвращает число, оно должно быть целым числом.

  • Вы могли бы использовать collections.Counter вместо подсчета числа снова и снова.

  • Вы правы, было бы неплохо иметь itertools.unique_permutations. В то же время, я часто возвращалась к этому так ответил.

Возможно, рефакторинг

from math import factorial
from functools import reduce
from collections import Counter
from operator import mul

def count_unique_permutations(sequence):
count_permutations = factorial(len(sequence))
repetitions = (factorial(v) for v in Counter(sequence).values())
return count_permutations // reduce(mul, repetitions)

4
ответ дан 20 марта 2018 в 01:03 Источник Поделиться

Ключевое слово для поиска "коэффициента полиномиальной". Что возвращает такой ответ: https://stackoverflow.com/questions/46374185/does-python-have-a-function-which-computes-multinomial-coefficients

3
ответ дан 20 марта 2018 в 03:03 Источник Поделиться