Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 10, 2019 11:18:28

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

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

> типа если 2 в 10 будет 1024 то в среднем нужно 1024 хода чтобы обойти 10-тиугольник.

Где я такое говорил?

> если ты счтитаешь что оно неверно, покажи конкретно где в коде ошибка

Читай внимательно.
http://python.su/forum/topic/37247/?page=5#post-202063

> Абстракция - это результат процесса абстрагирования. А процесс абстрагирования - это что?

https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D1%8F



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#2 Июнь 10, 2019 14:05:18

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

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

Rodegast
Где я такое говорил?
ну вот же твой код:
Rodegast
Вот решение этой простенькой задачки.

  def shagomer(n):
	"""
	Возвращает среднее количество шагов за которое можно обойти n-угольник
	"""
	res = 1
	for x in range(n):
		res *= 2
	return res
проверяем:
 print (shagomer(10))
>>> 
1024
>>> 

Rodegast
Читай внимательно.
http://python.su/forum/topic/37247/?page=5#post-202063
прочитал и я уже говорил что третий ход делать ненужно, так как фишка изначально стоит на одной вершине, и эту не нужно обходить.

Накой ей делать третий ход?
Но даже если мы предположим что вершина на которой фишка стоит изначально не считается обойденой, то это добавляет ровно 1 ход к всем элементам ряда

 import random
def experiment(n):
    #функция двигает фишку в случайном направлении по n угольнику пока не пройдет все вершины
    variants = (-1, 1)
    n_angle = [0 for x in range(n)]
    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 ходов в среднем: 1.0
вершин: 2 ходов в среднем: 2.0
вершин: 3 ходов в среднем: 4.00415
вершин: 4 ходов в среднем: 6.99142
вершин: 5 ходов в среднем: 10.9834
вершин: 6 ходов в среднем: 16.01947
вершин: 7 ходов в среднем: 22.00067
вершин: 8 ходов в среднем: 28.97977
вершин: 9 ходов в среднем: 36.93102
вершин: 10 ходов в среднем: 45.92654
вершин: 11 ходов в среднем: 55.9826
вершин: 12 ходов в среднем: 66.77129
>>> 
как видишь при 10-угольнике, всего 46 ходов против 1024 у тебя, это даже не в разы, а на несколько порядков меньше.



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

Отредактировано PEHDOM (Июнь 10, 2019 14:06:54)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version