Необходимо написать программу на Питоне которая из листа с цифрами от 0 до 3(в принципе цифры тут не важны) создает цепь Маркова N-го порядка. Нужно использовать простые функции и defaultdict.
Программа ниже вроде создает цепи 2 порядка? но дальше не знаю как.
Пожалуйста помогите
def build_markov_chain_numbers(data, n):
counts = defaultdict(Counter)
for i in range(1, len(data)):
counts[data[max(0, i - n)]][data] += 1
print(counts)
counts[data[max(0, len(data) - n)]][data] += 1
# Convert counts to probabilities.
probabilities = defaultdict(lambda: defaultdict(float))
for state, successors in counts.items():
total = sum(successors.values())
probabilities[state] = {s: c / total for s, c in successors.items()}
return probabilities
print(build_markov_chain_numbers([0, 2, 1, 0, 3, 3, 1, 2, 2, 1, 2, 1, 2, 0, 2, 2, 2, 1, 2, 0], 3))
Программа ниже вроде создает цепи 2 порядка? но дальше не знаю как.
Пожалуйста помогите
def build_markov_chain_numbers(data, n):
counts = defaultdict(Counter)
for i in range(1, len(data)):
counts[data[max(0, i - n)]][data] += 1
print(counts)
counts[data[max(0, len(data) - n)]][data] += 1
# Convert counts to probabilities.
probabilities = defaultdict(lambda: defaultdict(float))
for state, successors in counts.items():
total = sum(successors.values())
probabilities[state] = {s: c / total for s, c in successors.items()}
return probabilities
print(build_markov_chain_numbers([0, 2, 1, 0, 3, 3, 1, 2, 2, 1, 2, 1, 2, 0, 2, 2, 2, 1, 2, 0], 3))