Главное меню

За сколько взвешиваний можно упорядочить набор грузов различной массы?

Автор Xorne, Март 15, 2024, 18:28

« назад - далее »

Xorne

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

ZadaSIK

В программировании есть так называемый 'пузырьковый' алгоритм для сортировки массива чисел. Этот метод как раз использует 'взвешивания на чашечных весах', т.е. сравнение двух чисел по критерию, какое из них 'легче', т.е. меньше. Меньшее число их этой пары продвигается вперёд, или остаётся на месте, если оно и так было впереди большего. Затем меньшее сравнивается со следующим числом. И т.д. Таким образом, более меньшее число 'всплывает' на верх массива, как пузырёк воздуха в воде. 
Таким образом, если чисел N, то на первом этапе делается N-1 взвешивания.
На втором этапе тоже самое делается, но уже начиная со второго числа массива, т.е. второе число сравнивается с третьим и т.д. На этом этапе проводится N-2 взвешиваний.
И так производится до тех пор, пока не останутся два последних числа, которые определяются одним последним взвешиванием.
Итого, взвешиваний будет:
(N-1)+(N-2)+(N-3) + ... + N-(N-1) = N*((N-1)/2)

Qucani

Описание о минимальном количестве взвешиваний для 3, 4, 5 грузов есть в моем комментарии. Пусть  n – количество грузов, N - минимальное число взвешиваний. Тогда формула расчета для указанных наборов проста
N = 2n – 3, при 2 <= n =<  5.
Дальнейшие взвешивания надлежит производить  по целесообразной схеме. За основу берется предыдущий набор грузов, который уже упорядочен. Следовательно, остается рациональным сравнением идущего следом груза, определить его местоположение в упорядоченном ряду. На схеме приведены некоторые примеры взвешиваний. Цифры над кружками (грузами) указывают порядковый номер взвешивания, зависящий от результата сравнения.
Согласно этому алгоритму определено количество взвешиваний для ряда наборов,  значения которых сведены в таблицу.
Число взвешиваний идет с возрастанием  в арифметической прогрессии. Но вот ее шаг (разность d) периодически возрастает в каждом последующем цикле. Первые члены циклов  n′ и N′ выделены в таблице синим цветом. Имеем следующую закономерность
N′/ n′ = log₂ n′ -1, (16/8 = 2; 48/16 = 3; 128/32 = 4; ...). Исходя из этого, можно определить количество взвешиваний для любого набора грузов
N  =  N′ + d(n  - n′) (1).
Обозначим  m =  [log₂ n], здесь квадратные скобки означают округление числа до ближайшего целого меньшего числа. Тогда
n′ = 2ᵐ;
N′ = n′(m – 1) = 2ᵐ(m – 1);
d = (m + 1).
Подставляем полученные выражения в (1). После преобразования имеем искомую формулу в общем виде
N = n(m + 1) – 2⁽ᵐ ⁺ ¹⁾  (2) при n=>5.
Вычислить количество взвешиваний можно «вручную», например, для набора из 41 груза. Запишем числовую последовательность возведения 2 в степень
2² = 4; 2³ = 8; 2⁴ = 16; 2⁵ = 32; 2⁶ = 64; 2⁷ = 128; ...
32 < 41 < 64, тогда m = 5.
N = 41*(5 +1) - 2⁽⁵ ⁺ ¹⁾  = 182.