|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Чтобы не плодить топики, здесь будет всякая ерунда на один укус. Для начала поглумимся над классикой. Есть поезд, со множеством вагонов, без окон и т.д., замкнутый в круг, то есть последний вагон скреплен с первым. В каждом вагоне можно только включать и выключать свет, больши ничего менять нельзя, и все вагоны одинаковы. Изначально неизвестно, где свет горит а где нет. Надо посчитать количество вагонов, находясь внутри этого поезда и умея переходить между вагонами. Окон нет, наружу выглянуть нельзя. Алгоритм должен работать за линейное время. То есть если вагонов окажется N штук, то всяких действий не более чем O(N) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 13:35 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Ходить вперед-назад можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 13:49 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Aklin Ходить вперед-назад можно? по сути всё то же самое как в оригинале, плюс ограничение на асимптотику ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 13:52 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 00:15 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Представляя себя машиной Тьюринга. Я могу бегать вправо(+1) влево(-1). Справа - включать свет во всех вагонах. Влево выключать. Сначала +1,-1. Потом +2,-2 и так далее пока половина вагонов не будет включена. При этом в уме считать. Получается асимптоматика вроде квадратичной. Цикл с увеличивающимся внутренним циклом. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 01:26 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
У меня получается по три пробежки между точками A->B->A->B, далее точка B превращается в A и все повторяется, плюс одна финальная пробежка, когда во всех вагонах будет одинаковое состояние, по моей стратегии получается максимум 4*N проходов, вроде как удовлетворяет O(N). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 01:39 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
iOracleDev когда во всех вагонах будет одинаковое состояние, Когда в старом вагоне будет состояние, отличное от установленного ранее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 07:26 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
iOracleDev Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет. у меня было решение немного хуже, от 4N до 8N: ходить от некоего постоянного стартового вагона (с выключенным светом) вправо, включая везде свет и запоминая, в каком по счету вагоне последний раз был выключен, потом возвращаться и проверять стартовый. Забеги делать сначала на 1, потом на 2, потом на 4, на 8 вагонов и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 10:49 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
iOracleDev Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет. Как я понял, нельзя И метить и включать свет. либо одно, либо другое ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 13:04 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
iOracleDev Обозначим стартовый вагон буковкой A, выключим в нем свет и пойдем по ходу поезда, идем пока свет в вагонах горит, дошли до вагона с выключенным светом, обозначим его буковкой B, включаем в нем свет и идем обратно в A, если в A горит свет, значит мы обошли все вагоны, если свет в A выключен, то включаем его и возвращаемся в вагон B, выключаем в вагоне B свет, назначаем вагон B вагоном A и далее повторяем описанную процедуру, до тех пор пока не обнаружим в A свет. Это не O(N), а O(N 2 ), т.к. действие это не проход от А до Б, а переход из вагона в вагон. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 13:34 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Dima T Это не O(N), а O(N 2 ), т.к. действие это не проход от А до Б, а переход из вагона в вагон. Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 13:44 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Соколинский Борис 5N. финальная пробежка будет туда и обратно по всему поезду. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 13:52 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Имя пользователя1 Соколинский Борис 5N. финальная пробежка будет туда и обратно по всему поезду. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 13:57 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Соколинский Борис Dima T Это не O(N), а O(N 2 ), т.к. действие это не проход от А до Б, а переход из вагона в вагон. Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода. Он ходит туда-сюда увеличивая проходимый отрезок. В худшем случае (изначально в вагоны в состоянии: 01010101010) будет такая последовательность переходов из вагона в вагон: 1,3,5,7...N, это арифметическая прогрессия, ее сумма ((1+N)/2)*N, т.е. O(N 2 ) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:00 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Все-таки сначала надо определиться что означает термин "действие". Проверка света в одном вагоне это действие? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:03 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Соколинский Борис Имя пользователя1 пропущено... да, точно. финальная пробежка будет туда и обратно по всему поезду. Dima T Соколинский Борис пропущено... Там все правильно, за исключением того, что это 5N. Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода. Он ходит туда-сюда увеличивая проходимый отрезок. В худшем случае (изначально в вагоны в состоянии: 01010101010) будет такая последовательность переходов из вагона в вагон: 1,3,5,7...N, это арифметическая прогрессия, ее сумма ((1+N)/2)*N, т.е. O(N 2 ) Пройдя очередной отрезок АВАВ (то есть пройдя по нему 3 раза), он делает точку В стартовой и уже не будет за неё возвращаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:04 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Dima T Все-таки сначала надо определиться что означает термин "действие". Проверка света в одном вагоне это действие? Можно ещё переключение света и проверку так назвать, но на линейность асимптотики это не влияет, потому не заморачиваемся. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:06 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
982183 iOracleDev когда во всех вагонах будет одинаковое состояние, Когда в старом вагоне будет состояние, отличное от установленного ранее. Да, оба выражения отражают одно и то же. Aklin Как я понял, нельзя И метить и включать свет. либо одно, либо другое Ничего метить нельзя, можно только ходить из вагона в вагон по ходу или против хода поезда и включать или выключать свет в вагоне, кроме того можно считать вагоны. Буквами я их называю чтобы проще было понять алгоритм. Например вагон с которого начали пусть будет 0-й, следующий вагон принятый новой точкой отсчета например будет 5-й по счету от нулевого, следующий будет например 7-й по счету от 0-го и 2-й по счету от 5-го, т.е. никаких букв мы в вагонах не рисуем. Соколинский Борис Там все правильно, за исключением того, что это 5N. Ключевое место: назначаем вагон B вагоном A , т.е переход A(старый)<->B будет только при завершении обхода. Да, посчитал последнюю пробежку по всему кругу только туда, обратно упустил, получается 5N в худшем случае, в лучшем 2N. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:14 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Имя пользователя1 Пройдя очередной отрезок АВАВ (то есть пройдя по нему 3 раза), он делает точку В стартовой и уже не будет за неё возвращаться. Как не будет если iOracleDev ... обозначим его буковкой B, включаем в нем свет и идем обратно в A ... O(N) будет если добавить возможность "телепортации" между А и Б, т.е. переход из А в Б это одно действие, т.к. вагоны между А и Б не интересны, их состояние известно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:23 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Я наверное был не прав. По моему методу также нелья понять при движении вправо - выключил ли я лампочку либо она просто уже была выключена. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:25 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Dima T, Нет, каждый вагон посещается не более пяти раз, в самом плохом случае получаем 5*N. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:28 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Имя пользователя1 Соколинский Борис пропущено... Кстати, 4N можно добиться инверсией подключения и направления основного обхода Если при проходе B->A выключать во всех вагонах свет, то можно обратно в B не возвращаться, просто искать не первый выключенный, а первый включенный. 4N, на самом деле не получается, но будет <5N. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:39 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Dima T Как не будет если iOracleDev ... обозначим его буковкой B, включаем в нем свет и идем обратно в A ... iOracleDev назначаем вагон B вагоном A и далее повторяем описанную процедуру ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:41 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Соколинский Борис Если при проходе B->A выключать во всех вагонах свет, то можно обратно в B не возвращаться, просто искать не первый выключенный, а первый включенный. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:44 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
iOracleDev Dima T, Нет, каждый вагон посещается не более пяти раз, в самом плохом случае получаем 5*N. Понял, ты продвигаешься постоянно вперед, т.е. А всегда смещается вперед, а Б где-то впереди А. Тогда O(N) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:48 |
|
|
start [/forum/topic.php?fid=16&msg=39914302&tid=1339678]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
others: | 278ms |
total: | 435ms |
0 / 0 |