Задача Йосипа Флавія

Задача Йосипа Флавія — задача в комбінаториці, пов'язана з грою в лічилку.
У загальному вигляді задача виглядає наступним чином: на колі було розміщено задану кількість об'єктів, а потім рухаючись по колу в одному напрямку, пропускаючи фіксоване число об'єктів, вилучали по об'єкту поки не залишився лише один. Потрібно знайти об'єкт, який залишився.
Історія

Задача названа на честь Йосипа Флавія, римського історика єврейського походження, який жив у I ст. н. е. Згідно з безпосередніми свідченнями Йосипа про Шаблон:Нп, він, бувши командиром, разом зі своїми 40 воїнами були заблоковані в печері римськими солдатами. Більшість з них не хотіли здаватися, тому вони домовились, що будуть убивати один одного шляхом жеребкування, а той хто залишиться в живих останнім мусить сам себе вбити. І як потім писав сам Йосип Флавій, що завдяки везінню, а можливо, і Божому промислу, він і ще один чоловік залишилися до кінця і, замість того, щоб вбити себе здалися римлянам. Ця історія описана в його книзі «Юдейська війна» (автор пише від третьої особи):
Залишається неясним порядок, в якому вони один одного вбивали. У 1612 році Шаблон:Нп запропонував конкретний алгоритм, який полягав у тому, щоб поставити солдат у коло і рахувати по три, щоб визначити порядок вбивства.[1][2] Конкретні деталі цієї історії суттєво відрізняються в різних джерелах. Наприклад, у Шаблон:Нп та Шаблон:Нп (1974) Йосип і його 39 побратимів стоять у колі, а кожного сьомого вбивають.[3]
Хоч Йосип у своїй книзі стверджував, що це трапилося випадково, але збережений його слов'янський рукопис розповідає іншу історію: він хитро вирахував, де йому потрібно стати, і обдурив інших.[4][5] Також стверджується, що другий вцілілий воїн був його спільником; тож задача полягала в тому, щоб знайти такі місця для двох, щоб вони залишилися останніми в живих. Він розмістив себе і другого чоловіка на 31-му і 16-му місці відповідно.[6]
У середньовіччі була придумана інша версія цієї задачі, у якій 15 турків і 15 християн знаходяться на борту корабля під час шторму. Корабель потоне, якщо половина пасажирів не буде викинута за борт. Всі 30 стають у коло, і кожну дев'яту людину кидають у море. Потрібно визначити, де потрібно стояти християнам, щоб тільки турки були викинуті. В інших версіях ролі турків і християн міняються місцями.[6][7]
Розв'язок
Нехай Шаблон:Mvar — початкова кількість об'єктів у колі, а Шаблон:Mvar — розмір кроку вибування, тобто Шаблон:Math об'єктів пропускається, а Шаблон:Mvar-тий вибуває. Об'єкти в колі пронумеровані від Шаблон:Mvar до Шаблон:Mvar, лічба починається з Шаблон:Mvar-ї позиції. — позиція об'єкта, який залишиться останнім, в початковому колі.
Випадок q = 2
У цьому випадку задачу можна розв'язати явно.[8]
Розглянемо ситуацію, коли в початковому колі знаходиться об'єктів. Після першого проходження по колу зникнуть об'єкти з парними номерами, об'єкти, які залишаться, перемістяться з Шаблон:Mvar-ої позиції на . В тому числі переміститься на позицію і оскільки розмір нового кола дорівнює Шаблон:Mvar, то номер цієї позиції також дорівнює Звідси
- при
Якщо в початковому колі знаходиться об'єктів, то після першого проходження по колу до першого об'єкта включно для того, щоб розмір нового кола став дорівнювавати Шаблон:Mvar, зникнуть об'єкти з парними номерами та перший об'єкт, номери тих об'єктів, які залишаться, перемістяться з Шаблон:Mvar-ої позиції на . Аналогічно до попередньої ситуації буде справедлива рівність
- при
Отримані формули можна звести до однієї:[9]
Для зрозуміло, що останнім залишиться об'єкт, з якого складається коло, тобто
Якщо представити у формі де — найбільший степінь двійки, що не перевищує та то за допомогою математичної індукції можна показати, що[8]
Цю формулу можна переписати так, щоб вона залежала лише від Шаблон:Mvar:[10]
Також можна довести, що відповідає циклічному зсуву у бінарному вигляді на один розряд вліво. Тобто, якщо
то
Випадок q = 3
Аналогічно до попереднього випадку можна вивести наступну рекурентну формулу:[12]
де
Для цього випадку також можна вивести явну формулу:[13]
де Шаблон:Math
Загальний випадок
У 1899 математик Пітер Тейт запропонував рекурсивний алгоритм, який пов'язує номер об'єкта, який залишиться останнім, на певному кроці з його номером на наступному кроці:[14][15]
- при
Більш швидший алгоритм розробив Дональд Кнут:[16]
; поки виконувати
Також для розв'язання цієї задачі існують алгоритми, які використовують масиви, кільцеві списки або бінарні дерева.[17][18][19]
Перестановка Йосипа
Перестановка перших Шаблон:Mvar натуральних чисел Шаблон:Math, утворена шляхом застосування процедури вилучення із задачі Йосипа Флавія з довжиною кроку Шаблон:Mvar, називається перестановкою Йосипа.[20][21] Наприклад, Шаблон:Center
За допомогою китайської теореми про остачі можна показати, що кількість всіх перестановок Йосипа на множині перших Шаблон:Mvar натуральних чисел дорівнює Шаблон:Math[1]
Для двох перестановок Йосипа та виконується рівність для всіх де Шаблон:Mvar — фіксоване натуральне число, не більше за Шаблон:Mvar, тоді й лише тоді, коли де Шаблон:Math[22]
При Шаблон:Math перестановки Йосипа утворюють симетричну групу Шаблон:Math, при Шаблон:Math — знакозмінну групу Шаблон:Math, а при Шаблон:Math ці перестановки групу не утворюють.[23]
Варіації та узагальнення
Можна розглянути обернену задачу Йосипа Флавія, коли відомі Шаблон:Mvar та Шаблон:Mvar такі, що та Шаблон:Math потрібно знайти розмір кроку Шаблон:Mvar. Розв'язок цієї задачі завжди існує.[20][23]
Задача, у якій об'єкти додатково мають по Шаблон:Mvar «життів», тобто об'єкт вибуває тоді, коли його виберуть Шаблон:Mvar разів, називається котячою задачею Йосипа Флавія. При фіксованих Шаблон:Mvar та Шаблон:Mvar об'єкт, який залишиться останнім, буде незмінним при всіх Шаблон:Mvar, не менших за Шаблон:Math-ге число Фібоначчі.[24] Також можна розглянути задачу, де об'єкти мають по різній кількості «життів».[19]
Крім цього, початкову задачу можна узагальнити так, щоб на кожному кроці вилучали по Шаблон:Mvar об'єктів.[25][26]
Застосування
Для шифрування зображень були запропоновані методи на основі хаотичних систем, які для процесу плутанини використовують перестановки Йосипа.[27][28][29]
Див. також
Примітки
Література
Посилання
- Josephus Flavius game (Java Applet) at cut-the-knot allowing selection of every nth out of 50 (maximum).
- Шаблон:MathWorld
- ↑ 1,0 1,1 Шаблон:Cite journal
- ↑ Шаблон:Cite book
- ↑ Шаблон:Sfn0
- ↑ Шаблон:Cite book
- ↑ Шаблон:Sfn0
- ↑ 6,0 6,1 Шаблон:Cite book
- ↑ Шаблон:Sfn0
- ↑ 8,0 8,1 Шаблон:Sfn0
- ↑ Шаблон:Sfn0
- ↑ Шаблон:Sfn0
- ↑ Шаблон:Sfn0
- ↑ Шаблон:Sfn0
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Sfn0
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ 19,0 19,1 Шаблон:Cite journal
- ↑ 20,0 20,1 Шаблон:Cite journal
- ↑ Шаблон:Sfn0
- ↑ Шаблон:Cite journal
- ↑ 23,0 23,1 Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite journal