Головоломка с балансом или головоломка со взвешиванием — это логическая головоломка, в которой нужно уравновешивать предметы (часто монеты), чтобы определить, какой из них имеет иную ценность, используя весы ограниченное количество раз. Они отличаются от головоломок, в которых предметам присваивается вес, тем, что имеет значение только относительная масса этих предметов.
Например, при обнаружении разной монеты за три взвешивания (n = 3) максимальное количество монет, которые можно проанализировать, составляет 3 3 − 1/2 = 13. Обратите внимание, что при 3 весах и 13 монетах не всегда можно определить идентичность последней монеты (тяжелее она или легче остальных), а только то, что монета отличается. В общем, при n весах вы можете определить идентичность монеты, если у вас есть 3 н − 1/2 - 1 или менее монет. В случае n = 3 вы действительно можете обнаружить идентичность отличающейся монеты из 12 монет.
Эта версия задачи с двенадцатью монетами появилась в печати еще в 1945 году [2] [3] , и Гай и Новаковски объясняют, что она «была популярна по обе стороны Атлантики во время Второй мировой войны; даже предлагалось сбросить ее над Германией в попытке саботировать ее военные усилия». [3]
Известный пример имеет до девяти предметов, скажем, монет (или шариков), которые одинаковы по весу, за исключением одного, который легче остальных — фальшивки (oddball). Разница заметна только при взвешивании их на весах — но взвесить можно только сами монеты. Как можно изолировать фальшивую монету всего двумя взвешиваниями?
Чтобы найти решение, сначала рассмотрим максимальное количество предметов, из которых можно найти более легкий всего за одно взвешивание. Максимально возможное количество — три. Чтобы найти более легкий, мы можем сравнить любые две монеты, исключив третью. Если две монеты весят одинаково, то более легкая монета должна быть одной из тех, которых нет на весах. В противном случае это та, которую весы показали как более легкую.
Теперь представьте девять монет в трех стопках по три монеты в каждой. За один ход мы можем определить, какая из трех стопок легче (т. е. та, в которой находится более легкая монета). Затем требуется всего один ход, чтобы определить легкую монету в этой более легкой стопке. Таким образом, за два взвешивания мы можем найти одну легкую монету из набора 3 × 3 = 9 .
Другими словами, для того, чтобы найти лишнюю легкую монету среди 27 монет, потребуется всего три взвешивания, а для того, чтобы найти ее среди 81 монеты, потребуется четыре взвешивания.
В более сложной версии двенадцать монет, одиннадцать из двенадцати из которых идентичны. Если одна отличается, мы не знаем, тяжелее она или легче остальных. На этот раз весы можно использовать три раза, чтобы определить, есть ли уникальная монета, и если есть, то изолировать ее и определить ее вес относительно других. (Эта головоломка и ее решение впервые появились в статье в 1945 году. [4] ) У задачи есть более простой вариант с тремя монетами за два взвешивания и более сложный вариант с 39 монетами за четыре взвешивания.
Эта проблема имеет более одного решения. Одно из них легко масштабируется до большего количества монет с помощью нумерации с основанием три: маркируя каждую монету различным числом из трех цифр в основании три и размещая на n -м взвешивании все монеты, которые маркированы n -й цифрой, идентичной маркировке пластины (с тремя пластинами, по одной с каждой стороны весов с маркировкой 0 и 2, и одной вне весов с маркировкой 1). Другие пошаговые процедуры аналогичны следующим. Для этой проблемы это менее просто, и второе и третье взвешивания зависят от того, что произошло ранее, хотя это не обязательно так (см. ниже).
Имея в наличии 13 монет, среди которых известно, что 1 из 13 отличается (по массе) от остальных, легко определить, какая это монета, с помощью весов и 3 тестов следующим образом:
Если есть одна подлинная монета для сравнения, то подозрительных монет может быть 13. Пронумеруйте монеты от 1 до 13, а подлинную монету присвойте номеру 0 и выполните эти взвешивания в любом порядке:
Если весы не сбалансированы только один раз, то это должна быть одна из монет 1, 2, 3, которые появляются только в одном взвешивании. Если равновесия нет никогда, то это должна быть одна из монет 10–13, которые появляются во всех взвешиваниях. Выбор одной фальшивой монеты, соответствующей каждому из 27 результатов, всегда возможен (13 монет, одна из которых слишком тяжелая или слишком легкая, — это 26 возможностей), за исключением случаев, когда все взвешивания сбалансированы, в этом случае фальшивой монеты нет (или ее вес правильный). Если монеты 0 и 13 удалить из этих взвешиваний, они дают одно общее решение задачи с 12 монетами.
Если две монеты фальшивые, эта процедура, в общем случае, не выбирает ни одну из них, а выбирает какую-то подлинную монету. Например, если обе монеты 1 и 2 фальшивые, то либо монета 4, либо монета 5 выбраны неправильно.
В расслабленной вариации этой головоломки нужно только найти фальшивую монету, не обязательно имея возможность определить ее вес относительно других. В этом случае, очевидно, любое решение, которое ранее взвешивало каждую монету в какой-то момент, может быть адаптировано для обработки одной дополнительной монеты. Эта монета никогда не кладется на весы, но если все взвешивания уравновешены, она выбирается как фальшивая монета. Сделать что-то лучше невозможно, поскольку любой монете, которая в какой-то момент кладется на весы и выбирается как фальшивая монета, всегда может быть назначен вес относительно других.
Метод, который взвешивает одни и те же наборы монет независимо от результатов, позволяет либо
Три возможных результата каждого взвешивания можно обозначить как "\" для левой стороны, которая легче, "/" для правой стороны, которая легче, и "–" для обеих сторон, имеющих одинаковый вес. Символы для взвешиваний перечислены в последовательности. Например, "//–" означает, что правая сторона легче при первом и втором взвешивании, и обе стороны весят одинаково при третьем взвешивании. Три взвешивания дают следующие 3 3 = 27 результатов. За исключением "–––", наборы разделены таким образом, что каждый набор справа имеет "/", а набор слева имеет "\", и наоборот:
/// \\\\// /\\/\/ \/\//\ \\/\/– /\––\/ –/\/–\ \–/\\– //––\\ –//\–\ /–//–– \–––/– –\–––/ ––\–––
Поскольку каждое взвешивание дает осмысленный результат только тогда, когда количество монет на левой стороне равно количеству на правой стороне, мы игнорируем первую строку, так что каждый столбец имеет одинаковое количество символов "\" и "/" (по четыре каждого). Строки помечены, порядок монет не имеет значения:
\// Легкий /\\ Тяжелый/\/ B легкий \/\ B тяжелый//\ C легкий \\/ C тяжелый\/– D легкий /\– D тяжелый–\/ E легкий –/\ E тяжелый/–\ Ф лёгкий \–/ Ф тяжёлый\\– G легкий //– G тяжелый–\\ H легкий –// H тяжелый\–\ Я лёгкий /–/ Я тяжёлый/–– J легкий \–– J тяжелый–/– К легкий –\– К тяжелый––/ Л легкий ––\ Л тяжелый––– M либо легче, либо тяжелее (13-монетный корпус), или все монеты весят одинаково (шкала на 12 монет)
Используя приведенную выше схему результатов, можно определить состав монет для каждого взвешивания; например, набор «\/– D легкая» подразумевает, что монета D должна находиться на левой стороне при первом взвешивании (чтобы эта сторона была легче), на правой стороне при втором взвешивании и неиспользованной при третьем:
1-е взвешивание: левая сторона: ADGI, правая сторона: BCFJ2-е взвешивание: левая сторона: BEGH, правая сторона: ACDK3-е взвешивание: левая сторона: CFHI, правая сторона: ABEL
Затем результаты считываются с таблицы. Например, если правая сторона легче в первых двух взвешиваниях, а обе стороны весят одинаково в третьем, соответствующий код «//– G тяжелая» означает, что монета G лишняя, и она тяжелее остальных. [5]
В другом обобщении этой проблемы у нас есть две весы, которые можно использовать параллельно. Например, если вы знаете, что ровно одна монета отличается, но не знаете, тяжелее она или легче обычной монеты, то в раундах вы можете решить задачу с максимальным количеством монет. [6]
Обобщение этой проблемы описано в работе Чуднова. [7]
Пусть будет -мерным евклидовым пространством и будет скалярным произведением векторов и из Для векторов и подмножеств операции и определяются соответственно как ; , , Через будем обозначать дискретный [−1; 1]-куб в ; т. е. множество всех последовательностей длины над алфавитом Множество представляет собой дискретный шар радиуса (в метрике Хэмминга ) с центром в точке Относительные веса объектов задаются вектором , определяющим конфигурации весов объектов: й объект имеет стандартный вес, если вес й объекта больше (меньше) на постоянную (неизвестную) величину, если (соответственно, ). Вектор характеризует типы объектов: стандартный тип, нестандартный тип (т. е. конфигурации типов), и он не содержит информации об относительных весах нестандартных объектов.
Взвешивание (проверка) задается вектором результат взвешивания для ситуации равен Взвешивание, заданное вектором, имеет следующую интерпретацию: для данной проверки во взвешивании участвует -й объект, если ; он кладется на левую чашу весов, если и кладется на правую чашу, если Для каждого взвешивания обе чаши должны содержать одинаковое количество объектов: если на какой-то чаше весов количество объектов меньше положенного, то на нее подаются эталонные объекты. Результат взвешивания описывает следующие случаи: весы , если , левая чаша перевешивает правую, если , и правая чаша перевешивает левую, если Неполнота исходной информации о распределении весов группы объектов характеризуется множеством допустимых распределений весов объектов , которое также называется множеством допустимых ситуаций, элементы из называются допустимыми ситуациями.
Каждое взвешивание индуцирует разбиение множества плоскостью ( гиперплоскостью ) на три части и определяет соответствующее разбиение множества , где
Определение 1. Алгоритм взвешивания (ВА) длины — это последовательность , где — функция, определяющая проверку на каждом -м шаге алгоритма по результатам взвешиваний на предыдущих шагах ( — заданная начальная проверка).
Пусть будет множеством всех -синдромов, а будет множеством ситуаций с тем же синдромом ; т.е. ;
Определение 2. Говорят, что WA : а) определяет ситуации в наборе , если условие выполняется для всех б) определяет типы объектов в наборе , если условие выполняется для всех
В [7] доказано , что для так называемых подходящих множеств алгоритм идентификации типов идентифицирует также ситуации в
В качестве примера в [7] построены совершенные динамические (двухкаскадные) алгоритмы с параметрами , соответствующими параметрам совершенного троичного кода Голея (кода Виртакаллио-Голея). При этом установлено, что статического WA (т.е. кода с весами) с такими же параметрами не существует.
Каждый из этих алгоритмов с помощью 5 взвешиваний находит среди 11 монет до двух фальшивых монет, которые могут быть тяжелее или легче настоящих монет на одинаковую величину. В этом случае область неопределенности (множество допустимых ситуаций) содержит ситуации, т.е. построенная WA лежит на границе Хэмминга для и в этом смысле является идеальной.
На сегодняшний день неизвестно, существуют ли другие совершенные WA, которые идентифицируют ситуации в для некоторых значений . Более того, неизвестно, существуют ли для некоторых решения уравнения (соответствующего границе Хэмминга для троичных кодов), что, очевидно, необходимо для существования совершенного WA. Известно лишь, что для совершенных WA не существует, а для это уравнение имеет единственное нетривиальное решение , которое определяет параметры построенного совершенного WA.