Два стеклянных шара, и небоскрёб.

 

 Задача: Имеется два одинаковых стеклянных шарика и этажный дом. Необходимо предложить алгоритм, который

 за наименьшее количество бросаний определяет, с какого максимального этажа этот данный шарик не разобьётся.

 

Следует отметить, что предложенный алгоритм минимизирует кол-во испытаний в наихудшем случае. Т.е. тогда, когда нужный этаж находится в последний момент.

 

Решение:

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

 

Представим схему бросаний в виде дерева: Верхний его уровень обозначает первое бросание. Если шарик разбивается, то уходим на левую ветвь, если нет, то продолжаем увеличивать этаж, уходя на правую ветвь. В итоге глубина узла этого дерева соответствует номеру испытания, которое он обозначает, а степень «правости» узла соответствует высоте этажа данного испытания. Цифра в узле обозначает этаж, на котором проводилось испытание.

Простое дерево

Данная схема обозначает, что сначала бросили со 2 этажа, если шар разбился бросили с 1 этажа, если не разбился, то с 3.

 

Бросив шар с какого-то этажа  мы либо разбиваем шарик, и идём начиная с первого вверх, либо не разбиваем шарик, и бросаем его тогда с какого-то другого этажа , причём

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

И так далее...

Т.к. длине алгоритма соответствует глубина дерева по соответствующим ветвям, то будем искать неизвестные ,, ...

такие, чтобы все ветви имели одинаковую, и при том минимальную длину, при заданном количестве узлов (равном кол-ву этажей ). Длинна алгоритма очевидно тогда будет равна номеру первого этажа .

Равенство ветвей    и    запишется следующим образом

,           (1)

а ветвей    и  

,            (2)

 продолжая получим

               (3)

               (4)

*****************

     (5)

выразив и подставив скобку из правой части (1) вместо скобки в левой части (2), получим

        (6)

выразим скобку из (6), и подставим в (3)

,

следуя этой логике получим:

.

В итоге

   (7)

Подставим в (7) выражение для  полученное из (7) заменой    .

,

продолжая эту логику получим

.

Мы выразили все  необходимые этажи через тот, на котором надо проводить первое испытание. Найдём и его.

 

Для этого нам необходимо найти такое минимальное , при котором  сможет достигнуть необходимого этажа.

Рассмотрим  как непрерывную функцию от

Найдём, когда она достигает максимума при фиксированном .

Т.к. нам нужны только целые числа, то максимальным будет  элемент.

Нам необходимо, что бы максимум , который равен  достигал максимального этажа

,

откуда

 

Задача решена. Найден алгоритм, и все необходимые данные об этажах в зависимости от высоты небоскрёба.

 

Для 100 этажного дома , округляя всегда в большую сторону, получим , а .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hosted by uCoz