Гостей обозначим числами 0, 1, 2, ... 11 Карточки с номерами считаем последовательно размещёнными по кругу по часовой стрлеке- 0, 1, 2, ...11
Место(обозначенное карточкой) на которое сел i-ый гость обозначим А(i)
Решение.
предположим, что утверждение задачи неверно - есть такое расположение А, что нельзя повернуть стол так, чтобы 2 человека оказались на своих местах.
Это означает, что для всех i числа А(i)-i различны (в самом деле, это число показывает, насколько надо повернуть стол по часовой стрелке, что бы i-ый гость оказался на месте изначально для него предназначенным). Эта разность очевидно может принимать значения от нуля до 11. Т к всего гостей 12 - все значения встречаются по одному разу.
Теперь рассмотрим сумму (А(0) - 0) + (А(1) - 1) + (А(2) - 2) + ... + (А(11) -11)
В силу предыдущего замечания она равна 0 + 1 + 2 + ... + 11 = 66 = 6(напоминаню, мы рассматриваем числа по модулю 12)
как-будто в выкладках сферху будет дыра, Григорий: лишь сумма модулей (поскольку может А(i)-i < 0) |А(0) - 0| + |А(1) - 1| + |А(2) - 2| + ... + |А(11) -11| будет (модули упорядочены) 0 + 1 + 2 + ... + 11 = 66 при поворотах по часовой стрелке, но сравнение с суммой (А(0) - 0) + (А(1) - 1) + (А(2) - 2) + ... + (А(11) -11) = 0 НЕ будет приводить к противоречию и значит выводов нельзя выводить.
различные А(i)-i ограничивают посадки гостей (один из них должен сесть на своё место), что видимо противорчит возможности произвольной посадки, но пока не нашёл убедительного и ясного рассуждения
Вы невнимательно изучили творчество гениального Теэтета, дорогой друг. Но это неважно. Как учит нас не менее гениальный Руми
Благословенна глупость, коль она на благо от Аллаха мне дана.
Так что Ваше впутывание ни к селу ни к городу модулей - безусловно послано Аллахом Вам на благо.
Всё-таки поясню. Если А(i) меньше i, то надо не брать модуль, а прибавить 12 - и тогда получится число, показывающее на сколько надо повернуть стол чтобы i-ый товарищ оказался на своём месте. По модулю 12 это тоже самое число.
The topic has been locked.
Математика для чайников №3
29 Нояб 2018 04:30 #1358
дело в том, Григорий, что разница А(i)-i < 0 означает поворот в другую сторону, ПРОТИВ часовой стрелки; такие -разницы могут (в зависимости от того как пьяные гости обрушились на стулья) обнулить равные им +разницы (для других i) ПО стрелке и останется отличная от 0 разница +/-6 лишь благодаря тому, что число 11 нечётное; трюк не пройдёт, однако, с нечётным числом гостей
The topic has been locked.
Математика для чайников №3
29 Нояб 2018 15:10 #1360
procrastinator
Хайдук, мне конечно лень искать, что и как Григорий писал, но по сути речи о взятии модуля (абсолютной величины) не могло идти. Речь шла о вычислениях по модулю 12. Используется то же слово, но смысл у него другой.
The topic has been locked.
Математика для чайников №3
29 Нояб 2018 15:13 #1361
Математика для чайников №3
29 Нояб 2018 15:30 #1362
procrastinator
Извините, не вчитался. Думал Вы по-прежнему Григория опровергаете.
Для нечетных n эта сумма (n+1)n/2 = 0 (mod n), и приведенное решение не работает. Более того реально существует перестановка, исключающая больше одного совпадения при любом повороте стола.
The topic has been locked.
Математика для чайников №3
29 Нояб 2018 18:24 #1363
При частом сравнении сложных объектов полезной оказывается идея хеширования, сокращающая время перебора и состоящая в том, что на множестве этих объектов вводится некоторая функция и сравниваются не они, а значения этой хеш-функции; к самим же объектам обращаются только при совпадении ее значений на них, хранимых в их классах хеш-эквивалентности в виде хеш-таблицы. Эти хеш-значения должны просто вычисляться и пореже (по возможности равномерно) совпадать.
Чем больше область значений применяемой хеш-функции, тем меньше ожидаются их совпадения. Например, если объектами являются подмножества пронумерованного множества, то в качестве хеш-функции можно взять мощность этих подмножеств. Так я и сделал и решил некую задачу на компьютере за 2 часа; а потом просто сменил хеш-функцию, взяв вместо мощности подмножества сумму исходных номеров его элементов, гораздо более многозначную, и решил ту же самую задачу всего за 2 минуты! Кстати, номера элементов тоже, по сути, есть хеш-значения, реноме элементов.
P.S. А если бы я хеш-функцию не использовал, то не решил бы задачу за разумное время вообще.
Чем больше область значений применяемой хеш-функции, тем меньше ожидаются их совпадения. Например, если объектами являются подмножества пронумерованного множества, то в качестве хеш-функции можно взять мощность этих подмножеств.
а потом просто сменил хеш-функцию, взяв вместо мощности подмножества сумму исходных номеров его элементов, гораздо более многозначную
Оптимистичное заявление... сам-пят wrote:
Кстати, номера элементов тоже, по сути, есть хеш-значения, реноме элементов.
Это просто очень частный случай.
Вот будет проблемка сравнивать слова или даже текстики произвольной длины...
Тогда придется крепче подумать, как выбирать хэш
Каждому - своё.
The topic has been locked.
Математика для чайников №3
09 Дек 2018 07:52 #1366
Я заявил это конкретно, по факту. Исходное множество у меня состоит из 255 элементов, пронумерованных от 0 до 254. Мощность рассматриваемых мною его подмножеств в упомянутой задаче не превосходит 69, всего-то. А вот если складывать номера элементов подмножества, то сумма может достигать, правда, не 186 + ... + 254, но 10 351, что тоже гораздо больше 69.
Не совсем понял, поскольку и до этого-то я додумался не сразу.
Главный критерий хэш-функции это вероятность коллизий. А для криптографии еще и стойкость к обратному преобразованию, но это тут лишнее, как я понимаю.
Поэтому число возможных вариантов должно быть как можно больше. Для бытовухи достаточно 32 (2 лярда) или 64 (очень очень много) битного числа в качестве хэша даже для очень больших массивов.
При сложении как выше вариантов маловато, притом коллизии возникают при самом простом 1+4 и 2+3. Это неэффективно
Вообще обычно уже есть готовые классы для этого типа HashMap, так что изобретать велосипед не нужно, там уже все встроено
Если же хочется немного своё, то тут обзорчик Некриптографические хеш-функции
Можно взять старинную CRC32, на ней все архиваторы древние целостность архивов проверяли habr.com/post/178955/
Каждому - своё.
The topic has been locked.
Математика для чайников №3
09 Дек 2018 12:33 #1370
При сложении как выше вариантов маловато, притом коллизии возникают при самом простом 1+4 и 2+3. Это неэффективно
Вообще обычно уже есть готовые классы для этого типа HashMap, так что изобретать велосипед не нужно, там уже все встроено
Вряд ли стоит говорить о неэффективности, когда задача оказывается решенной за 2 минуты (вместо 2 часов). Объекты у меня - это множества, набираемые из последовательности чисел 0, ..., 254 по некоторому критерию, каждый раз разному. Заранее их нет. И задача состоит в том, чтобы подсчитать количество различных множеств, поскольку они могут совпадать. Какую "более эффективную" хеш-функцию здесь можно предложить? Я использовал уже встроенную просто функцию Sum().
Я, между прочим, пробовал использовать хеш-коды, вырабатываемые по умолчанию для моих множеств (списков), какие-то довольно большие числа. Тут же возникли проблемы с памятью. Может, я не понимаю, что такое хеш-таблица, но я брал ее размером с максимальное хеш-значение.
"Позвольте, товарищ, у меня все ходы записаны!"
The topic has been locked.
Математика для чайников №3
09 Дек 2018 13:22 #1373
Я почему возник здесь с идей хеш-функции. Просто мне захотелось изложить эту полезную идею просто и кратко, для чайников. А то даже в Википедии все это излагается каким-то нечеловеческим языком. ((
Кстати, все общие понятия похожи на хеш-значения. Например, человек (в смысле вообще). Если бы этого понятия (или ему эквивалентного) не было, а мы с вами захотели бы сказать о человеке что-то интересное, то нам, думаю, пришлось бы перечислять миллиарды имен тех, кого мы имеем в виду, подряд.
"Позвольте, товарищ, у меня все ходы записаны!"
The topic has been locked.
Математика для чайников №3
11 Дек 2018 06:12 #1375