Если абстрагироваться от фишки передвигающейсмя по вершинам то
py.user.next абсолютно прав
py.user.next
В каждой точке вероятность шага влево и вправо одинаковая. Это всё равно что монетку подбрасывать и ждать, когда выпадут орлы больше раз, чем решки.
Соответвенно тут задача чисто на теорвер, и пайтон так, сбоку.
А вот дальше он делает неверные выводы:
py.user.next
Это может быть конечно, а может быть бесконечно.
бесконечно оно быть не может, так как вероятность что фишка обойдет все вершины отлична от 0.
По условиям задачи нужно найти “среднее значение”.
Нарисуйте на бумажке, например, треугольник, и подбрасывайте монетку чтобы определить куда двинеться фишка. Попробовав несколько раз вы поймете что для это нужно чтобы орел впал на два раза больше\меньше чем решка, и на это нужно в среднем 4 хода.
Соотвевенно если у нас n-многоугольник, то чтобы фишка обошла все вершины нужно чтобы “орел” выпал на n-1 раз больше или меньше чем “решка”(не обязательно подряд, просто больше или меньше). Тогда и только тогда фишка обойдет все вершины.
Соответвенно нужно сначала посчитать веротяность того “орел” выпадет на n-1 раз больше или меньше чем “решка”. А потом найти математическое ожидание числа бросков монетки. Это собственно и будет среднее количество шагов.
Ну это если в теории, поскольку теорвер я учил лет эдак 20 назад, то уже конкретно с формулами намного тяжелее.
допустим что вероятность того что в результате некоего эксперимента “орел” выпадет на n-1 раз больше-меньше “решки” равна 1/2**(n-1). Еще раз повторюсь, я теорвер учил более 20 лет назад, и после этого ни разу не использовал, поэтому могу ошибаться. Если тут есть гуру теорвера, прошу поправить как правильно считать. Матожидание количества испытаний до первого успеха равно 1/1/2**(n-1) тоесть 2**(n-1). формула взята отсюдова
http://www.cyberforum.ru/statistics/thread885646.htmlСоответвенно для теугольника фишка обойдет все вершины в среднем за 2**(3-1)=4 шагов, для пятиугольника 2**(5-1)=16, а 11 угольник за 2*(11-1)=1024…
хмм проверяем накидав нехитрый ход:
import random
def experiment(n):
#функция "подбрасывает" монетку пока разница выпадений одной из сторон не будет равна n
variants = (0, 1)
avers, revers = 0, 0
count = 0
while abs(avers - revers) < n:
if random.choice(variants) == 0: avers += 1
else: revers += 1
count+=1
return count
def average_count(n, m):
# функция проводит m испытаний и выводит среднее знанчение результатов
res_list =[]
for i in range(m):
res_list.append(experiment(n))
return sum(res_list)/m
m = 100000
for n in range(12):
print('вершин:', n, 'ходов в среднем:' , average_count(n-1, m))
А вот с проверкой выходит жопппа.
Если при трех вершинах среднее к-во ходов выходит поряка 4-х , при 5-ти - 16,то при 11 - 100
тоесть гдето при определении вычисления веростяности того что в результате некоего эксперимента “орел” выпадет на n-1 раз больше-меньше “решки” я ошибся и там таки все сложнее.
ЗЫ я таки почитал вики, освежил знания, мое предоложения что вероятность равна 1/2**(n-1) таки неверно, вероятность того что в результате некоего эксперимента “орел” выпадет на n-1 раз больше-меньше “решки” равна 1/(n-1)**2
В итоге получаем что среднее количество шагов, за которые фишка обойдет все вершины n-угольника равно (n-1)**2 что собчтвенно и подтверждает вышеприведенный код. А пайтон тут вообще не при делах, все вычисляется математически,