Алгоритм нахождения минимального количества взвешиваний, необходимого для нахождения дефектного шара из набора из n шаров.

Хорошо, вот такая головоломка, с которой я сталкивался много раз: Дан набор из 12 шаров, один из которых бракованный (весит то меньше, то больше). Вы можете взвесить 3 раза, чтобы найти дефектный, а также сказать, который весит меньше или больше.

Решение этой проблемы существует, но я хочу знать, можем ли мы алгоритмически определить, если задан набор из «n» шаров, какое минимальное количество раз вам потребуется использовать балансиры, чтобы определить, какой из них неисправен и как ( легче или тяжелее).


person Raks    schedule 13.07.2010    source источник
comment
@ralph : ceil(log3(13)) = 3, но трех измерений недостаточно, чтобы выбрать неисправный и сказать, тяжелее ли он, если у вас 13 шаров.   -  person sandris    schedule 13.07.2010
comment
@sandris Я должен читать лучше - это верно только в том случае, если вы ранее знали, тяжелее или легче дефектный мяч.   -  person Ralph M. Rickenbach    schedule 13.07.2010
comment
Я не до конца понял алгоритм принятого ответа на вышеуказанный вопрос. Но действительно ли возможно определить дефектный мяч всего за 3 взвешивания, несмотря на то, что его вес неизвестен по сравнению с другими мячами??? Я думаю, что в худшем случае потребуется 4 взвешивания.   -  person Manish Shukla    schedule 03.02.2014


Ответы (3)


Замечательный алгоритм Джека Верта можно найти здесь

(как описано для случая n, имеет вид (3 ^ k-3)/2, но его можно обобщить на другие n, см. запись ниже)

Более короткая версия и, возможно, более читаемая версия здесь.

Для n вида (3^k-3)/2 приведенное выше решение применимо идеально, и минимальное требуемое количество взвешиваний равно k.

В остальных случаях...


Адаптация алгоритма Джека Верта для всех n.

Чтобы изменить приведенный выше алгоритм для всех n, вы можете попробовать следующее (хотя я не пытался доказать правильность):

Сначала проверьте, является ли n из (3^k-3)/2. Если это так, примените описанный выше алгоритм.

Если не,

Если n = 3t (т.е. n кратно 3), вы найдете наименьшее m > n такое, что m имеет вид (3^k-3)/2. Необходимое количество взвешиваний равно k. Теперь сформируйте группы 1, 3, 3^2,..., 3^(k-2), Z, где 3^(k-2) ‹ Z ‹ 3^(k-1) и повторите алгоритм Джека. решение.

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

Если n = 3t+1, попробуйте решить для 3t (оставив один шар в стороне). Если вы не найдете лишнего шара среди 3t, значит, тот, что вы отложили в сторону, бракованный.

Если n = 3t+2, сформируйте группы по 3t+3, но пусть в одной группе не будет группы с одним мячом. Если вы дойдете до стадии, когда вам нужно вращать одну группу шаров, вы знаете, что дефектный шар — это один из двух шаров, и вы можете затем взвесить один из этих двух шаров против одного из заведомо исправных шаров (из числа остальных 3t). .

person Community    schedule 13.07.2010
comment
Приведенное выше адаптированное решение является неполным. - person ; 13.07.2010

Трихотомия! :)

Объяснение: Дан набор из n шаров, разделите его на 3 набора A, B и C по n/3 шаров.

Сравните A и B. Если они равны, то дефектный шар находится в C и т. д.

Итак, ваше минимальное количество раз — это количество раз, которое вы можете разделить n на три (извините, я не знаю английского слова для этого).

person OMG_peanuts    schedule 13.07.2010
comment
Но если А и В не равны, то где дефектный шар? - person Ralph M. Rickenbach; 13.07.2010
comment
Нет, но для 12 шаров минимум 3 взвешивания, что, согласно объяснению, должно быть 4. И как в этом случае проявляется трихотомия? - person Raks; 13.07.2010

Вы можете использовать общий алгоритм планирования: http://www.inf.ed.ac.uk/teaching/courses/plan/

person Mau    schedule 13.07.2010
comment
Не могли бы вы уточнить это? - person sandris; 16.07.2010