Здравствуйте, WolfHound, Вы писали:
E>>Поподробнее не расскажешь, что именно плохо делать?
В смысле в конце темы сообщения? Или в конце последнего предложения сообщения точку не надо ставить?
WH>Вот это.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Кодт, Вы писали:
К>К вопросу о песочных часах
По идее птичка на второй картинке не должна вниз головой сидеть... Нормально бы её посадить.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Erop, Вы писали:
E>В смысле в конце темы сообщения? Или в конце последнего предложения сообщения точку не надо ставить?
Он в конце каждого сообщения делает кучу переводов строк и ставит точку.
Выглядит не лучше оверквотинга.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Общая идея предлагаемого алгоритма -- заставить погрешность определения середины саму себя нивелировать.
Алгоритм такой:
Пусть N — общее количество песка в песочных часах. В нашем случае, соответствующее 16 мин.
Будем записывать состояния часов следующим образом. Каждая строка записи соответствует количеству песка в верхней колбе часов.
Значком @ будем обозначать момент переворачивания часов.
Например, запись
@N ; N/2 ; 0
означает, что в верхней колбе первых часов N песка и мы только что их перевернули. Во вторых часах -- N/2 песка. В третьих — 0.
Временем переворачивания пренебрегаем, считаем что мгновенно.
1. Запускаем первые и вторые часы
@N ; @N ; 0
2. Когда пройдет приблизительно N/2 времени, перевернем часы №2 и №3. Если d — погрешность определения середины, получаем
N/2+d ; @N/2-d ; @N
, где d может быть положительным или отрицательным.
3. Когда в часах №1 или №2 закончится песок, для удобства записи, переставим их местами, так чтоб под №2 оказались часы, в которых закончился песок
2d ; 0 ; N/2+d
Теперь d строго положительно.Т.к. песок закончился в часах, у которых N/2-|d|
Далее шаги будут такими
Собственно, получили в часах №1 8мин. Отмеряем их и ещё 16, получаем 24.
0 ; 0 ; 0
0 ; 0 ; @N
0 ; 0 ; 0
Для алгоритма важно, чтоб выполнялось условие N/2 > 3d. Т.е. d < 8/3 мин. По моему, достаточно для определения "на глаз", но кого не устраивает, предлагаю самостоятельно дополнить алгоритм несколькими условными шагами, для повышения точности.
Последовательность шагов подобрана. Поэтому думаю, что можно их и уменьшить, как с точки зрения количества шагов, так и с точки зрения общего времени подготовки до начала отсчета 24 мин. интервала. Данная последовательность позволяет гарантированно начать отсчет менее чем через 40 мин. Точнее, через 40 мин.- d.
Алгоритм лучше, чем через вычисление НОК, т.к. не требует от "пользователя часов" вычислений, а только повторения шагов. Гарантированно позволяет начать отсчет 24 мин интервала через 40 мин. Хотя временем переворачивания мы и пренебрегали, но на практике, точность данного алгоритма выше за счет меньшего числа переворачиваний часов.
Кто сможет улучшить алгоритм по "времени подготовки" и количеству шагов? Или доказать его оптимальность?
Здравствуйте, Нэчер, Вы писали:
Н>Пусть имеется трое одинаковых песочных часов на 16 минут каждые. Н>Как точно(не на глаз)отмерить 24 минуты?
Предложу сразу два решения:
1. Мат.ожидание
Включам часы 1 и 2, считаем про себя до Х и выкл 2 вкл 3, считаем про себя до Х и вкл 2 выкл 3, и т.д. до тех пор пока в часах 1 не закончится песок.
Тогда ждем пока в включенных в данный момент часах не закончится песок.
Длины интервалов вкл/выкл 2 и 3 нормально распределены вокруг некоторого значения (Х сек), их сумма имеет также нормальное распределение, и мат.ожидание суммы отличается от 8 минут не более чем на Х.
2. Прогрессия.
Тут нам потребуется 5 часов.
На определенном шаге прогрессии имеются часы в которых осталось песка меньше чем на 8 мин.
Создаем 3 таких же часов(1,2,3), эти в 0.
1 — эталон
2 и 3 запускаем в разные стороны, когда в одних закончтся песок в других останется в два раза больше чем от эталона до 8 мин.
Создаем 3 таких же часов(2,3,4), эти в 0.
Запускаем 2 и 3, когда в 3 визуально высыпалось половина выкл 3 вкл 4. Когда в 2 закончилось вкл 1(эталон) на досыпку и выкл их когда закончилось в 3 или 4 (что раньше)
В рез-те получаем часы в которых песка меньше (либо равно) чем на 8 мин но больше чем раньше