Jump to content

Проблема Джозефа

(Перенаправлено из перестановки Иосифа Флавия )
Интерпретация Клодом Гаспаром Баше де Мезириаком задачи Иосифа Флавия с 41 солдатом и размером шага 3, показывающая, что места 16 и 31 убивают последними - время движется внутрь по спирали, зеленые точки обозначают живых солдат, серые мертвые солдаты и крестит убийства

В информатике и математике проблема Джозефуса (или перестановка Джозефуса ) — теоретическая задача, связанная с определённой игрой со счётом . Такие игры используются для выделения человека из группы, например, eeny, meeny, miny, moe .

Рисунок последовательности задач Иосифа Флавия для 500 человек и пропускаемого значения 6. Горизонтальная ось — номер человека. Вертикальная ось (сверху вниз) — время (номер цикла). Живой человек рисуется зеленым, мертвый – черным. [1]

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

Проблема (с учетом количества людей, начальной точки, направления и числа, которое нужно пропустить) состоит в том, чтобы выбрать позицию в начальном круге, чтобы избежать выполнения.

Проблема названа в честь Иосифа Флавия , еврейского историка, жившего в I веке. Согласно рассказу Иосифа Флавия об осаде Йодфата , он и его 40 солдат оказались в ловушке в пещере римскими солдатами . Они предпочли самоубийство пленению и остановились на серийном методе самоубийства путем жеребьевки. Иосиф Флавий утверждает, что по счастливой случайности или, возможно, по воле Бога он и еще один человек остались до конца и сдались римлянам, вместо того чтобы покончить с собой. Это история, приведенная в книге 3, главе 8, части 7 книги Иосифа Флавия « Иудейская война» ( о себе он пишет от третьего лица ):

Однако в этом крайнем бедствии он не лишился своей обычной проницательности; но, вверившись промыслу Божию, он подверг свою жизнь опасности [следующим образом]: «А теперь, — сказал он, — раз уж у вас решено, что вы умрете, давайте совершим наши взаимные смерть определяется по жребию. Тот, кому жребий выпал первым, пусть будет убит тем, у кого второй жребий, и таким образом судьба будет распространяться через всех нас, и никто из нас не погибнет от своей правой руки; было бы несправедливо, если бы, когда остальные уйдут, кто-то раскаялся и спасся». Это предложение показалось им очень справедливым; и когда он убедил их решить это дело посредством жребия, он вытянул один из жребиев и для себя. Тот, у кого был первый жребий, обнажил шею тому, у кого был следующий жребий, как предполагая, что генерал немедленно умрет среди них; ибо они думали, что смерть, если бы Иосиф мог умереть вместе с ними, была бы слаще жизни; все же он был с другим, оставленным до последнего, надо ли сказать, что это произошло случайно, или же по промыслу Божию. А так как он очень не желал ни быть осужденным по жребию, ни, если бы его оставили до последнего, испачкать свою правую руку кровью своих соотечественников, он убедил его довериться ему в своей верности и жить как и он сам.

- Иосиф Флавий , с. 579, Войны евреев, Книга III, Гл. 8, пункт 7

Детали механизма, использованного в этом подвиге, довольно расплывчаты. По словам Джеймса Дауди и Майкла Мэйса, [2] в 1612 году Клод Гаспар Баше де Мезириак предложил особый механизм расположения мужчин по кругу и счета по три для определения порядка исключения. [3] Эта история часто повторялась, и конкретные детали значительно различаются от источника к источнику. Например, в Исраэле Натане Херштейне и Ирвинге Каплански (1974) Иосиф Флавий и 39 его товарищей стоят в кругу, при этом каждый седьмой человек выбывает. [4] Историю проблемы можно найти в письме С. Л. Забелла редактору Ежеквартального журнала Фибоначчи . [5]

Что касается намеренности, Иосиф Флавий спросил: «Следуем ли мы приписать это божественному провидению или просто удаче?» [6] Но сохранившаяся славянская рукопись Иосифа рассказывает другую историю: что он «хитро пересчитал числа и так сумел обмануть всех остальных». [6] [7] У Иосифа Флавия был сообщник; тогда проблема заключалась в том, чтобы найти места двух последних оставшихся в живых (чей заговор обеспечил бы их выживание). Утверждается, что он поставил себя и другого мужчину на 31-е и 16-е места соответственно (для k = 3 ниже). [8]

Варианты и обобщения

[ редактировать ]
Вариант задачи Иосифа Флавия с 30 людьми и размером шага 9 – время движется внутрь по спирали, зеленые точки обозначают живых солдат, серые мертвые солдаты и убийства крестами.

Средневековая версия проблемы Иосифа Флавия включает в себя 15 турок и 15 христиан на борту корабля во время шторма, который затонет, если половина пассажиров не будет выброшена за борт. Все 30 встают в круг, и каждого девятого человека нужно бросить в море. Христианам необходимо определиться, где стоять, чтобы гарантировать, что будут отброшены только турки. [9] В других версиях роли турок и христиан меняются местами.

Грэм, Кнут и Паташник 1989 , с. 8 опишите и изучите «стандартный» вариант: определите, где находится последний выживший, если есть n человек, которые начинают, и каждый второй человек ( k = 2 ниже) выбывает.

Обобщение этой проблемы состоит в следующем. Предполагается, что будет казнен каждый m из группы размером n -й человек , в котором p выжившим является добавлено x -й человек. Если в круг человек, то выживший находится в p + mx -й позиции, если она меньше или равна n + x . Если x — наименьшее значение, для которого p + mx > n + x , то выживший находится в позиции ( p + mx ) − ( n + x ) . [10]

Предпоследнее (розовое) и последнее (ультрамариновое) места в задаче Джозефуса для различного размера группы n и размера шага k . В файле SVG наведите указатель мыши на значения, чтобы отобразить полный порядок уничтожения.

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

Задача явно решается, когда будет убит каждый второй человек (каждый человек убивает человека слева или справа от себя), т.е. . (Для более общего случая , решение описано ниже.) Решение выражается рекурсивно . Позволять обозначаем положение выжившего, когда первоначально имеется n человек (и ). При первом прохождении круга все четные люди умирают. Во второй раз по кругу умирает новый 2-й человек, затем новый 4-й и т. д.; как будто в первый раз по кругу не было.

Если исходное количество людей было четным, то человек в позиции х во время второго обхода круга изначально находился в позиции (для каждого выбора x ). Позволять . Человек в кто теперь выживет был изначально в положении . Это приводит к повторению

Если первоначальное количество людей было нечетным , то человека 1 можно считать умирающим в конце первого круга. Опять же, во время второго круга умирает новый 2-й человек, затем новый 4-й и т. д. В этом случае человек в позиции x изначально находился в позиции . Это приводит к повторению

Когда значения сведены в таблицу и появляется шаблон ( OEIS : A006257 , также крайний левый столбец синих чисел на рисунке выше):

н 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 1 3 1 3 5 7 1 3 5 7 9 11 13 15 1

Это говорит о том, что представляет собой возрастающую нечетную последовательность, которая начинается заново с всякий раз, когда индекс n является степенью 2 . Следовательно, если m и l выбраны так, что и , затем . Понятно, что значения в таблице удовлетворяют этому уравнению. Или можно подумать, что после смерти l людей остаются только люди, и это идет в й человек. Этот человек должен быть выжившим. Так . Ниже доказательство проводится по индукции .

Теорема: Если и , затем .

Доказательство: сильная индукция применяется по n . Базовый случай это правда. Отдельно рассматриваются случаи, когда n четное и когда n нечетное.

Если n четное, то выберите и такой, что и . Обратите внимание, что . имеет место там, где второе равенство следует из предположения индукции.

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

l можно решить, чтобы получить явное выражение для :

Самая элегантная форма ответа предполагает двоичное представление размера n : может быть получен однобитовым циклическим сдвигом влево самого n . Если n представлено в двоичном виде как , то решение имеет вид . Доказательство этого следует из представления n в виде или из приведенного выше выражения для .

Реализация: Если n обозначает количество людей, безопасное положение задается функцией , где и .

Теперь, если число представлено в двоичном формате, первый бит обозначает а оставшиеся биты будут обозначать l . Например, когда его двоичное представление:

n    = 1   0   1   0   0   1
2m   = 1   0   0   0   0   0
l    =     0   1   0   0   1
/**
 * @param n the number of people standing in the circle
 * @return the safe position who will survive the execution 
 *   f(N) = 2L + 1 where N =2^M + L and 0 <= L < 2^M
 */
public int getSafePosition(int n) {
	// find value of L for the equation
	int valueOfL = n - Integer.highestOneBit(n);
	return 2 * valueOfL  + 1;
}

Побитовый

[ редактировать ]

Самый простой способ найти безопасную позицию — использовать побитовые операторы . В этом подходе сдвиг старшего установленного бита n на наименее значащий бит вернет безопасную позицию. [11] Входные данные должны быть положительным целым числом .

n    = 1   0   1   0   0   1
n    = 0   1   0   0   1   1
/**
 * @param n (41) the number of people standing in the circle
 * @return the safe position who will survive the execution 
 */
public int getSafePosition(int n) {
    return ~Integer.highestOneBit(n*2) & ((n<<1) | 1);
    //     ---------------------- ---  | ------------
    //     Get the first set bit   |   | Left Shift n and flipping the last bit
    //    and take its complement  |   |
    //                             |   |
    //                Multiply n by 2  |
    //                         Bitwise And to copy bits exists in both operands.
}

В 1997 году Лоренц Хальбайзен и Норберт Хунгербюлер обнаружили закрытую форму этого дела. . Они показали, что существует определенная константа

которые можно вычислить с произвольной точностью. Учитывая эту константу, выберите m как наибольшее целое число такое, что (это будет либо или ). Тогда последний выживший

если округлено в большую сторону, иначе

для всех .

В качестве примера расчета Хальбайзен и Хунгербюлер приводят (что на самом деле является оригинальной формулировкой проблемы Иосифа Флавия). Они вычисляют:

и поэтому
(обратите внимание, что это значение округлено в меньшую сторону)

В этом можно убедиться, просматривая каждый последующий проход чисел от 1 до 41 :

1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41
2, 4, 7, 8, 11, 13, 16, 17, 20, 22, 25, 26, 29, 31, 34, 35, 38, 40
2, 4, 8, 11, 16, 17, 22, 25, 29, 31, 35, 38
2, 4, 11, 16, 22, 25, 31, 35
2, 4, 16, 22, 31, 35
4, 16, 31, 35
16, 31
31

Общий случай

[ редактировать ]

Для решения этой задачи в общем случае используется динамическое программирование , выполняя первый шаг и затем используя решение оставшейся задачи. Когда индекс начинается с единицы, то человек с номером сдвигается от первого лица находится на позиции , где n — общее количество человек. Позволять обозначают положение выжившего. После -й человек убит, круг остается, и следующий отсчет начинается с человека, номер которого в исходной задаче был . Положение выжившего в оставшемся круге будет если отсчет начинается в ; смещая это, чтобы учесть тот факт, что отправной точкой является дает повторение [12]

который принимает более простую форму

если позиции нумеруются от к вместо.

Этот подход имеет время выполнения , но для маленьких и большой есть другой подход. Второй подход также использует динамическое программирование, но требует времени выполнения. . Он основан на рассмотрении убийства k -го, 2 k -го, ..., -й народ как один шаг, потом меняем нумерацию. [ нужна ссылка ]

Этот улучшенный подход принимает форму

  1. ^ Р.Угальде, Лоуренс. «Задача Иосифа в языке программирования Fōrmulæ» . Формулы . Проверено 26 июля 2021 г.
  2. ^ Дауди и Мэйс 1989 , с. 125.
  3. ^ Баше 1612 , с. 174.
  4. ^ Херштейн и Каплански 1974 , стр. 121–126.
  5. ^ Забелл 1976 , стр. 48, 51.
  6. ^ Jump up to: Перейти обратно: а б Коэн, Ричард. Делая историю: рассказчики, формировавшие прошлое , с. 54 (Саймон и Шустер, 2022).
  7. ^ https://gustavus.edu/mcs/max/concrete-abstractions-pdfs/chapter3.pdf
  8. ^ Роуз Болл 1905 , с. 19.
  9. ^ Ньюман 1988 , стр. 2403–2405.
  10. ^ Робинсон 1960 , стр. 47–52.
  11. ^ «Задача Иосифа с использованием побитовых операций (Java)» . Гитхаб . 7 января 2018 года . Проверено 7 января 2018 г.
  12. ^ Пак и Тейшейра, 2018 , стр. 1–7.

Источники

[ редактировать ]

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 409a080ff20ebbf5ad3c9b4ff1d56056__1718156100
URL1:https://arc.ask3.ru/arc/aa/40/56/409a080ff20ebbf5ad3c9b4ff1d56056.html
Заголовок, (Title) документа по адресу, URL1:
Josephus problem - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)