powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Относительно простые задачки
25 сообщений из 339, страница 1 из 14
Относительно простые задачки
    #39914285
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не плодить топики, здесь будет всякая ерунда на один укус.

Для начала поглумимся над классикой. Есть поезд, со множеством вагонов, без окон и т.д., замкнутый в круг, то есть последний вагон скреплен с первым. В каждом вагоне можно только включать и выключать свет, больши ничего менять нельзя, и все вагоны одинаковы.
Изначально неизвестно, где свет горит а где нет.
Надо посчитать количество вагонов, находясь внутри этого поезда и умея переходить между вагонами. Окон нет, наружу выглянуть нельзя.

Алгоритм должен работать за линейное время. То есть если вагонов окажется N штук, то всяких действий не более чем O(N)
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914302
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ходить вперед-назад можно?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914304
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin
Ходить вперед-назад можно?
да.

по сути всё то же самое как в оригинале, плюс ограничение на асимптотику
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914592
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914597
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Представляя себя машиной Тьюринга.

Я могу бегать вправо(+1) влево(-1). Справа - включать свет во всех вагонах. Влево выключать.
Сначала +1,-1. Потом +2,-2 и так далее пока половина вагонов не будет включена.
При этом в уме считать.

Получается асимптоматика вроде квадратичной. Цикл с увеличивающимся внутренним циклом.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914600
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня получается по три пробежки между точками A->B->A->B, далее точка B превращается в A и все повторяется, плюс одна финальная пробежка, когда во всех вагонах будет одинаковое состояние, по моей стратегии получается максимум 4*N проходов, вроде как удовлетворяет O(N).
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914625
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
когда во всех вагонах будет одинаковое состояние,

Когда в старом вагоне будет состояние, отличное от установленного ранее.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914703
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.
все верно, сейчас проверил, действительно 4N в худшем случае (когда непосредственно перед самым первым вагоном выключен свет).

у меня было решение немного хуже, от 4N до 8N: ходить от некоего постоянного стартового вагона (с выключенным светом) вправо, включая везде свет и запоминая, в каком по счету вагоне последний раз был выключен, потом возвращаться и проверять стартовый. Забеги делать сначала на 1, потом на 2, потом на 4, на 8 вагонов и т.д.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914779
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.


Как я понял, нельзя И метить и включать свет.
либо одно, либо другое
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914789
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет.

Это не O(N), а O(N 2 ), т.к. действие это не проход от А до Б, а переход из вагона в вагон.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914791
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Это не O(N), а O(N 2 ), т.к. действие это не проход от А до Б, а переход из вагона в вагон.
Там все правильно, за исключением того, что это 5N.
Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914797
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
5N.
да, точно.
финальная пробежка будет туда и обратно по всему поезду.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914799
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
5N.
да, точно.
финальная пробежка будет туда и обратно по всему поезду.
Кстати, 4N можно добиться инверсией подключения и направления основного обхода
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914802
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Dima T
Это не O(N), а O(N 2 ), т.к. действие это не проход от А до Б, а переход из вагона в вагон.
Там все правильно, за исключением того, что это 5N.
Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода.

Он ходит туда-сюда увеличивая проходимый отрезок. В худшем случае (изначально в вагоны в состоянии: 01010101010) будет такая последовательность переходов из вагона в вагон: 1,3,5,7...N, это арифметическая прогрессия, ее сумма ((1+N)/2)*N, т.е. O(N 2 )
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914804
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все-таки сначала надо определиться что означает термин "действие". Проверка света в одном вагоне это действие?
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914806
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Имя пользователя1
пропущено...
да, точно.
финальная пробежка будет туда и обратно по всему поезду.
Кстати, 4N можно добиться инверсией подключения и направления основного обхода
не очень понял, как это.


Dima T
Соколинский Борис
пропущено...
Там все правильно, за исключением того, что это 5N.
Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода.

Он ходит туда-сюда увеличивая проходимый отрезок. В худшем случае (изначально в вагоны в состоянии: 01010101010) будет такая последовательность переходов из вагона в вагон: 1,3,5,7...N, это арифметическая прогрессия, ее сумма ((1+N)/2)*N, т.е. O(N 2 )
нет.
Пройдя очередной отрезок АВАВ (то есть пройдя по нему 3 раза), он делает точку В стартовой и уже не будет за неё возвращаться.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914807
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Все-таки сначала надо определиться что означает термин "действие". Проверка света в одном вагоне это действие?
действие - переход в соседний вагон.
Можно ещё переключение света и проверку так назвать, но на линейность асимптотики это не влияет, потому не заморачиваемся.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914813
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183
iOracleDev
когда во всех вагонах будет одинаковое состояние,

Когда в старом вагоне будет состояние, отличное от установленного ранее.

Да, оба выражения отражают одно и то же.

Aklin
Как я понял, нельзя И метить и включать свет.
либо одно, либо другое

Ничего метить нельзя, можно только ходить из вагона в вагон по ходу или против хода поезда и включать
или выключать свет в вагоне, кроме того можно считать вагоны. Буквами я их называю чтобы проще было
понять алгоритм. Например вагон с которого начали пусть будет 0-й, следующий вагон принятый новой точкой
отсчета например будет 5-й по счету от нулевого, следующий будет например 7-й по счету от 0-го и 2-й по
счету от 5-го, т.е. никаких букв мы в вагонах не рисуем.

Соколинский Борис
Там все правильно, за исключением того, что это 5N.
Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода.

Да, посчитал последнюю пробежку по всему кругу только туда, обратно упустил, получается 5N в худшем случае, в лучшем 2N.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914816
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Пройдя очередной отрезок АВАВ (то есть пройдя по нему 3 раза), он делает точку В стартовой и уже не будет за неё возвращаться.

Как не будет если
iOracleDev
... обозначим его буковкой B, включаем в нем свет и идем обратно в A ...


O(N) будет если добавить возможность "телепортации" между А и Б, т.е. переход из А в Б это одно действие, т.к. вагоны между А и Б не интересны, их состояние известно.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914818
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я наверное был не прав. По моему методу также нелья понять при движении вправо - выключил ли я лампочку
либо она просто уже была выключена.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914820
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Нет, каждый вагон посещается не более пяти раз, в самом плохом случае получаем 5*N.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914826
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
Соколинский Борис
пропущено...
Кстати, 4N можно добиться инверсией подключения и направления основного обхода
не очень понял, как это.

Если при проходе B->A выключать во всех вагонах свет, то можно обратно в B не возвращаться, просто искать не первый выключенный, а первый включенный.
4N, на самом деле не получается, но будет <5N.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914829
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Как не будет если
iOracleDev
... обозначим его буковкой B, включаем в нем свет и идем обратно в A ...
так ведь буквицей А каждый раз будет назван новый вагон, а не тот, с которого начали:
iOracleDev
назначаем вагон B вагоном A и далее повторяем описанную процедуру
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914830
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Если при проходе B->A выключать во всех вагонах свет, то можно обратно в B не возвращаться, просто искать не первый выключенный, а первый включенный.
так первый включенный и будет В :) то есть всё то же самое.
...
Рейтинг: 0 / 0
Относительно простые задачки
    #39914835
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Dima T,

Нет, каждый вагон посещается не более пяти раз, в самом плохом случае получаем 5*N.

Понял, ты продвигаешься постоянно вперед, т.е. А всегда смещается вперед, а Б где-то впереди А. Тогда O(N)
...
Рейтинг: 0 / 0
25 сообщений из 339, страница 1 из 14
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Относительно простые задачки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]