Уведомления

Группа в Telegram: @pythonsu

#1 Май 21, 2019 10:27:08

maybelll
Зарегистрирован: 2019-05-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Легкая задача

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


Помогите решить пожалуйста очень срочно надо буду очень благодарен :с больше некуда обращаться

Офлайн

#2 Май 22, 2019 20:52:31

vl
Зарегистрирован: 2017-08-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Легкая задача

Бред)
Задача не верно сформированна.
Ну ответ 3.
А если честно то хрен его знает. Задача не полная.

Офлайн

#3 Май 23, 2019 02:59:04

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Легкая задача

maybelll
В одной из вершин правильного п-угольника располагается фишка. На каждом шаге фишку перемещают в одну из соседних вершин с одина- ковыми вероятностями. Найдите среднее количество шагов, за которые фишка обойдет все вершины п-угольника.
Она может бесконечно топтаться на месте и никогда не обойти его.



Офлайн

#4 Май 23, 2019 07:50:24

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Легкая задача

py.user.next
Она может бесконечно топтаться на месте и
Ну в том смысле что шагнула на соседа потом назад? С каждым шагом вероятность такого исхода падает. Надо проверять сходимость такого ряда.
Но потенциально это не мешает найти среднее по ансамблю попыток обойти все вершины.

Задача к питону не имеет прямого отношения. Сначала надо ее решить, получить формулу и потом уже идти на форум по питону.

Подскажу чуток. Это классическая задача на марковские цепи. Состояния тут помеченность K вершин из N.



Отредактировано doza_and (Май 23, 2019 07:56:46)

Офлайн

#5 Май 23, 2019 13:44:45

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Легкая задача

doza_and
Ну в том смысле что шагнула на соседа потом назад? С каждым шагом вероятность такого исхода падает.
В каждой точке вероятность шага влево и вправо одинаковая. Это всё равно что монетку подбрасывать и ждать, когда выпадут орлы больше раз, чем решки. Это может быть конечно, а может быть бесконечно.



Отредактировано py.user.next (Май 23, 2019 13:45:09)

Офлайн

#6 Май 24, 2019 19:53:15

Vladimirv
Зарегистрирован: 2013-03-22
Сообщения: 108
Репутация: +  7  -
Профиль   Отправить e-mail  

Легкая задача

vl
Бред)
Задача не верно сформированна.
Потише, бред у нас обычно несет py.user.next. А задачи придумывают умные люди)
Кстати, doza_and тут как раз прав, нужен спец по теории вероятности и формулы.

py.user.next
Она может бесконечно топтаться на месте
Да, в первый же шаг фишка, сходит с места.

py.user.next
В каждой точке вероятность шага влево и вправо одинаковая. Это всё равно что монетку подбрасывать и ждать, когда выпадут орлы больше раз, чем решки. Это может быть конечно, а может быть бесконечно.
Тут просто бред, не имеющий отношения к делу. Для того чтобы, фишка не отклонялась от своего угла, должен быть постоянный баланс шагов, число шагов влево должно быть равно числу шагов вправо. Если в процессе выбора шагов теряется баланс, то фишка обходит все вершины.
Простой случай комбинации баланса шагов:
  ['left', 'right'] * n

И чем больше n, тем меньше вероятность выпадения такой комбинации, а значит фишка может обойти все вершины, при не большом числе вершин и большом числе шагов.

Дальше нужен спец по теории вероятности и формулы, для вычисления вероятности обхода от числа шагов и числа углов.

py.user.next
никогда не обойти его
Проверим:

 #
from random import randint
  
def choices(attempt, steps=100):
    lst = []
    max_left = 0
    max_right = 0
    center = 0
    for _ in range(steps):
        x = randint(0, 1)
        lst.append(x)
        if x == 1:
            center += 1
        else:
            center -= 1
        if center > max_right:
            max_right = center
        if center < max_left:
            max_left = center
    x1 = sum(lst)
    x0 = len(lst)-x1
    diff = x0-x1
    # max_shift - показывает max отклонение фишки от своего угла.
    max_shift = abs(max_left) if abs(max_left) > max_right else max_right
    return attempt, x0, x1, diff, max_left, max_right, max_shift
   
attempt = 100
fmt = '{:<5} | {:>5} | {:>5} | {:>5} | {:>5} | {:>5} | {:>5}'
print(fmt.format(*'# x0 x1 x0-x1 left right shift'.split()))
for i in range(1, attempt+1):
    t = choices(i)
    print(fmt.format(*t))

У меня минимальный shift был 3, максимальный 31 при 100 шагах.

maybelll берете for переделываете в while.
Считаете число шагов необходимое для того, чтобы max_left или max_right было больше n-углов. Упаковываете число шагов в список. Повторяете это нужное число раз.
Определяете среднее число шагов(sum/len).

Отредактировано Vladimirv (Май 24, 2019 19:56:09)

Офлайн

#7 Май 25, 2019 02:14:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Легкая задача

Vladimirv
Да, в первый же шаг фишка, сходит с места.
А на второй шаг возвращается обратно. На третий шаг снова сходит с места, а на чётвертый шаг возвращается обратно.

Vladimirv
Для того чтобы, фишка не отклонялась от своего угла, должен быть постоянный баланс шагов, число шагов влево должно быть равно числу шагов вправо.
Она может дойти и до конца, но вернуться обратно в исходное положение тем же путём.

Vladimirv
У меня минимальный shift был 3, максимальный 31 при 100 шагах.
А почему у тебя шагов только 100? Сделай бесконечный цикл.

Vladimirv
А задачи придумывают умные люди)
Задачу-то можешь придумать и ты Таких онлайн школ куча, где с умным видом не учат ничему.
Если вообще вспомнить реальную историю про Перельмана, то куча умников утверждала, что он пургу гонит. Только вот впоследствии оказалось, что он сделал прорыв в математике, а они так и остались бессмысленными участниками, не достигшими ничего.



Офлайн

#8 Май 25, 2019 20:28:50

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Легкая задача

Если абстрагироваться от фишки передвигающейсмя по вершинам то 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 что собчтвенно и подтверждает вышеприведенный код. А пайтон тут вообще не при делах, все вычисляется математически,




==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 26, 2019 09:21:12)

Офлайн

#9 Май 26, 2019 02:30:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Легкая задача

PEHDOM
бесконечно оно быть не может, так как вероятность что фишка обойдет все вершины отлична от 0.
Ну то есть либо обойдёт, либо нет. Или скорее всего обойдёт, но иногда, может быть, и не обойдёт. Какова вероятность, что не обойдёт?

Доказывать вероятность обхода для любого случая при достаточном количестве шагов можно, опираясь на связанность вершин. В задаче у нас фигурирует вероятность выбора стороны относительно текущей вершины, но есть ещё и вероятности попадания фишки на каждую из вершин. То есть у каждой вершины есть определённая вероятность попадания фишки на неё. И так как вершины сцеплены, вероятность попадания на вершину увеличивается по мере приближения фишки к ней. А что такое “приближение” фишки? Это произошедшие события попадания на соседнюю с ней вершину и на вершину через соседнюю и так далее.

https://studfiles.net/preview/5566393/
3. Условная вероятность события. Теорема умножения вероятностей зависимых событий.

Событие В называют зависимым от события А, если появление события А изменяет вероятность появления события В.

Вероятность события В, найденная при условии, что событие А произошло, называется условной вероятностью события В и обозначается РА (В).

Теорема: Вероятность совместного появления двух зависимых событий А и В равна произведению вероятности одного из них на ус­ловную вероятность другого, найденную в предположении, что первое событие уже наступило, т.е.

Р(АВ) = Р(А) * РА (В) или Р(АВ) = Р(В) * РВ(А)

PEHDOM
я таки почитал вики, освежил знания
Блин, я ещё не дошёл до такой степени заинтересованности.
У нас препод по теории вероятностей прогуливал свои пары (он был завкафедрой). Придёшь на пару, а препода нет, где-то набухался и типа заболел. Естественно, сдавали ему потом так же - и так сойдёт.



Отредактировано py.user.next (Май 26, 2019 02:45:25)

Офлайн

#10 Май 26, 2019 09:20:52

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Легкая задача

py.user.next
Ну то есть либо обойдёт, либо нет. Или скорее всего обойдёт, но иногда, может быть, и не обойдёт. Какова вероятность, что не обойдёт?

она не может не обойти, поскольку у нас колличество ходов фишки стремиться к беконечности, то вероятность что рано или поздно таки обойдет стремиться к единице.Соотвевенно вероятность того что не обойдет стремится к нулю. Вот если бы у нас было ограниченое количество ходов…
Млин я таки неслабо лоханулся, всеже 20 лет прошло, да и писал вечером несколько подуставший.А когда уже спать ложился то понял что мое утверждение про 1/(n-1)**2 тоже неверно, оно было бы верно если бы нужно было вычислить за сколько ходов в среднем фишка сделает полный круг по\против часовой стрелки. А она, допустим в трехугольнике, может сделать один ход влево и два вправо, или два хода влево, или два вправо и все вершины будуд обойдены. а разница между количеством орлов и решек равна 1 или 2, тоесть такой подход не подходит
Накидал новый код чтоб проверить там вообще еще веселее выходит.
 import random
def experiment(n):
    #функция двигает фишку в слкчайном направлении по n угольнику пока не пройдет все вершины
    variants = (-1, 1)
    n_angle = [0 for x in range(n)]
    n_angle[0]=1
    count = 0
    pos = 0
    while 0 in  n_angle:
        pos += random.choice(variants)
        if pos < 0: pos = n-1
        if pos == n: pos = 0
        n_angle[pos]= 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(1, 13):
   print('вершин:', n, 'ходов в среднем:' , average_count(n, m))
>>>
вершин: 1 ходов в среднем: 0.0
вершин: 2 ходов в среднем: 1.0
вершин: 3 ходов в среднем: 2.99767
вершин: 4 ходов в среднем: 5.99524
вершин: 5 ходов в среднем: 9.99776
вершин: 6 ходов в среднем: 15.00188
вершин: 7 ходов в среднем: 20.99545
вершин: 8 ходов в среднем: 28.02448
вершин: 9 ходов в среднем: 35.97836
вершин: 10 ходов в среднем: 44.96916
вершин: 11 ходов в среднем: 55.04097
вершин: 12 ходов в среднем: 66.09011
>>>
математиеку пока под это дело не подвел еще…времени нет, может вечером чтото прийдет в голову. НО чисто емпирически выходит что для n-угольника среднее колличество шагов равно сумме всех натуральных чисел от 1 до (n-1)



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 26, 2019 09:47:11)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version