Информация об изменениях

Сообщение Re[7]: Зaдачи от компании АBBYY от 11.04.2016 15:21

Изменено 11.04.2016 15:39 Кодт

Здравствуйте, watchmaker, Вы писали:

W>Меня в этом коде смущает две вещи:

W>При N=7, K=5 и 105 итераций значение 6 выпадает в 3.7 раза чаще чем значение 0.

Упс!

Забыл вычитать делящуюся нацело часть
import random

def randKgen(K):
  assert K > 0
  while True:
    yield random.randint(0,K-1)

def randNKgen(N, K, gen = None):
  assert N > 0
  assert K > 0
  if gen is None:
    gen = randgen(K)
  r, m = 0, 1
  for q in gen:
    while m >= N:
      s = m//N*N
      if r < s:
        yield r%N
        r, m = r//N, m//N
      else:
        r, m = r-s, m-s  # вот это забыл сделать
    r, m = r*K + q, m*K


В таком исполнении — получилось равномерно.
Re[7]: Зaдачи от компании АBBYY
Здравствуйте, watchmaker, Вы писали:

W>Меня в этом коде смущает две вещи:

W>При N=7, K=5 и 105 итераций значение 6 выпадает в 3.7 раза чаще чем значение 0.

Упс!

Забыл вычитать делящуюся нацело часть
import random

def randKgen(K):
  assert K > 0
  while True:
    yield random.randint(0,K-1)

def randNKgen(N, K, gen = None):
  assert N > 0
  assert K > 0
  if gen is None:
    gen = randKgen(K)
  r, m = 0, 1
  for q in gen:
    while m >= N:
      s = m//N*N
      if r < s:
        yield r%N
        r, m = r//N, m//N
      else:
        r, m = r-s, m-s  # вот это забыл сделать
    r, m = r*K + q, m*K


В таком исполнении — получилось равномерно.