powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Каким алгоритмом можно заполнить все озёра рельефа водой?
25 сообщений из 261, страница 1 из 11
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042270
Фотография nu88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На собеседовании дали задачку, я её решил, отправил, программеры посмотрели и отказали.
Поэтому думаю, что можно публиковать всё, кроме явок и паролей.
Задачка была такая: дана матрица высот
9,9,9,9,9,9,9
9,1,1,5,1,1,3
9,9,9,9,9,9,9
каждый член матрицы выражает высоту земли в этой точке. Т.е получается такой рельеф. За краями матрицы - минус бесконечность. Ноль в качестве значения одного из членов матрицы - тоже минус бесконечность, дырка т.е.

Необходимо выдать результат о том, где какие озёра образуются после длительного дождя или после опускания этой конструкции в море и подёма из него. Вода может переливаться с каждой клетки только в 4 направлениях.
Результат пусть будет, скажем, в абсолютной высоте уровня воды в данной точке. В случае приведённого примера:

0,0,0,0,0,0,0
0,5,5,0,3,3,0
0,0,0,0,0,0,0

Есть ли готовый алгоритм для этого?
Мной придуманный заключается вот в чём:
1. Организуем "структуру данных", в которой каждый элемент может понимать, кто его соседи, касается ли он дырок, краёв. Т.е. чтобы можно было взять любого и определить, кто у него сверху, снизу, справа, слева и т.п.
2. Одновременно с этим есть список, содержащий указатели на все эти элементы. Используется для обхода.
3. Берём первый элемент из списка, запускаем с него попытку "поиска дна". Его высота = N - это максимум уровня земли в этой точке, либо уровня воды в ней (если она была туда залита ранее).
Логика в том, чтобы найти множество элементов, каждый из которых либо:
- высота=N, связан отношением соседства с другими равным себе по высоте.
- высота=N либо связан отношением соседства с элементом, выше его.
4. Если такое множество найдено, то выглядеть оно будет как плоский кусок поверхности, со всех сторон ограниченный элементами выше него, т.е. это будет место, куда можно залить воды. Основной вопрос - сколько.
5. Присвоить всем элементам из этого множества уровень воды равный минимальному ограничивающему это "дно" элементу. Т.е. так мы зальём это дно водой до уровня, откуда ей некуда убежать.
6. Переход на 3, только начать с того же самого элемента.

Смысл в том, что мы нащупываем любое дно, хоть мелкую впадинку и дальше пытаемся из неё вырасти. На каждой новой итерации мы будем иметь дело с новым уровнем дна, который будет неубывающий, если мы имеем дело с глубоким озером, которое "по ступенькам" поднимается. Будет новая итерация с разведкой границ нового дна на каждой ступеньке.

Если в очередной раз целое множество составить не удалось, значит встречена дырка, край рельефа, либо элемент ниже дна, который не позволит налить воды больше - она утечёт вниз.

Да, в рельефе может иметься множество локальных озёр, которые все ограничены чем то выше них, ну типа:

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

Алгоритм мой "осознаёт" такую ситуацию в момент строительства последнего локального дна (из которого ничто никуда не выливается). Ибо во время строительства последнего озера наступает итеррация, когда уровень воды в этом озеер ровняется со всеми остальными или с группой других озёр и тогда "трассировщик" находит более широкое множество с более широкими краями и заливает уже его, погребая всё больше озёр под собой. Так он захватывает всё что можно на последнем ходе.

Недостаток - повторные прохождения по нескольку раз одной и той же клетки в ходе подьёма уровня воды по ступенькам, порой даже повторный проход целых озёр.

Т.е. такая вот штука инкрементирующая, динамический алгоритм наверное это называется.

Ничего лучше я пока не придумал. Конечно, есть вопросы кеширования целых озёр, как-то можно упростить их слияние.

Сразу строить всё озеро, анализируя одновременно и спуски и подьёмы я не смог осилить, мне показалось, что очень тяжело построить такой реально работающий алгоритм. Более того, он больше похож на попытку оптимизировать частный случай, когда очень сложное дно, а озеро одно. Но например в моём простом примере сверху, озера реально два, одно с более высоким уровнем воды, второе с более низким, ограничены стенкой (на водопад каскадный картинка похожа).

Есть возможен алгоритм с трассировкой каплей, т.е. ты капаешь куда-либо, трассируешь каплю и смотришь, изменилось ли состояние всей системы после этого, если да - капаешь ещё раз, если нет - валим капать в другое место. Тоже будет работать. Но будет ли быстрее моей - наверное иногда да, но если представить резкую глубокую впадину, то у меня она зальётся до краёв моментально, а там будет капать очень долго.
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042276
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
каково количество значений высот?
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042290
Фотография nu88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Количество значений высот - от 0 до скольки угодно. От типа данных реализация зависеть не должна.
Самих клеток сколько - сколько угодно, лишь бы это была матрица (NxM), без всяких рваных краёв, хотя их можно реализовать нулями.
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042296
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, меня интересует не "до скольки", а "сколько значений ?"
в приведенном примере 4 значения
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042360
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да это "детская" задача
В ней ни ума ни соли ничего нет
Просто надо строго и ясно понять что именно ты ищещь.
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042362
уральский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. ищешь все стоки при помощи dfs/bfs (что больше нравится) для каждой клетки;
2. если стоков, не являющихся дырками, не найдено, то гоуту 5;
3. стоки, не являющиеся дырками, помечаешь как озерные клетки и устанавливаешь им новое значение высоты, равное минимальной высоте среди 4ех соседей (которые гарантированно не дырки);
4. гоуту 1.
5. в множестве озерных клеток выделить связные подмножества; тот же dfs.

Уверен, хотели именно это, простое знание базовых алгоритмов поиска на графе (dfs/bfs).
Интересно, где такое спрашивают? В горле уже сидят все эти select CustomerName from Shipments .....
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042363
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напрмиер http://www.spoj.pl/problems/WATER/
Я например даже не помню как я это делал
6th Polish Olympiad in Informatics, stage 3 ------- это вообще-то очень не для средних умов
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042433
Фотография nu88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://pajerovaliero.livejournal.com/803.html
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042448
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nu88http://pajerovaliero.livejournal.com/803.html
глянул и чё? в чем трабла? У этой задачи нет алгоритма в общепринятом смысле
В самой задаче само решение и сидит
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042507
Фотография nu88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, всё, вопрос закрыт, надо было с краёв херачить, было бы в сто раз быстрее... чёрт ) алгоритм с "крайний наименьший" )
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042514
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nu88блин, всё, вопрос закрыт, надо было с краёв херачить, было бы в сто раз быстрее... чёрт ) алгоритм с "крайний наименьший" )
ты главного не сказал: те пиплы (которые "тестировали" тебя) были правы или нет?
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042515
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> вопрос закрыт,

нифига, завтра разберем по полной программе
Я например тоже не эффективно сделал, ; как всегда : сверху вниз
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042518
Фотография nu88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RT183nu88блин, всё, вопрос закрыт, надо было с краёв херачить, было бы в сто раз быстрее... чёрт ) алгоритм с "крайний наименьший" )
ты главного не сказал: те пиплы (которые "тестировали" тебя) были правы или нет?
уже пофиг, отказ получен, больше ничё меня не интересует )
Сейчас я вижу, в чём ещё могла быть лажа - не увидел такого решения, когда можно с краёв начинать "в обнимку" В ОДИН ПРОХОД заполнить все хитрые впадины и мультиозёра. Всё, это была самая приличная вакансия в городе, теперь тока застрелицо )
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042520
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не бери в голову (насчет вакансии)
Хотя между нами задача очень простая (без обид),
для программера экстра-класса тут ваще нет задачи.
И они кстати молодцы что такой хней проверяют.
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042523
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя именно насчет тебя они еще пожалеют
А то знаешь на ПТ сидит куча ламеров, пальцы топорщат, а что они могут? Никуя.
Не умеют простейшие вещи (знание хрен с ним, это восполнимо).
Ничего не умеют и даже не понимают ни сути вещей, просто как роботы;
Пришли, ушли, накодили детсад. Им это неинтересно, это же видно невооруженным глазом.
Воображают: чуть-что, погуглим!

Хер вы свой погуглите.
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042531
Фотография nu88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я понимаю, что простая, решение сразу в голову пришло, потом второе более экономичное, а оказывается есть третье, просто идеально клёвое )
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042532
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nu88Да я понимаю, что простая, решение сразу в голову пришло, потом второе более экономичное, а оказывается есть третье, просто идеально клёвое )
нет , не простая
Просто всё у ламеров. вот у них всё просто
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042535
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в следующий раз ткни своих тестировщиков сюда http://www.spoj.pl/ranks/HIR/
Hard Image Recognition
И я тебе скажу почему там нет китаёз. Ты думал китаёзы такие простачки?
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042537
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
малейшая "полезная" вещь под строжайшим запретом
Да собственно и у нас это начинают понимать. Наш местный супер-хирург пишет:
пипец, на любой конференции язык на замок, потому что пиздят в наглую идеи,
и через неделю уже делают ТАМ (на Западе)
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042539
Фотография nu88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RT183малейшая "полезная" вещь под строжайшим запретом
Да собственно и у нас это начинают понимать. Наш местный супер-хирург пишет:
пипец, на любой конференции язык на замок, потому что пиздят в наглую идеи,
и через неделю уже делают ТАМ (на Западе)
(-;
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042540
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nu88RT183малейшая "полезная" вещь под строжайшим запретом
Да собственно и у нас это начинают понимать. Наш местный супер-хирург пишет:
пипец, на любой конференции язык на замок, потому что пиздят в наглую идеи,
и через неделю уже делают ТАМ (на Западе)
(-;
так и есть
ты не знаешь насколько там контроль со стороны ну простых преподов например
Они (детишки, студики) у них консультируются по любому поводу; там вот так просто не письнешь
Со стороны конечно выглядит как будто "свободная страна"
Никуя; там пистец
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042541
Фотография nu88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RT183nu88RT183малейшая "полезная" вещь под строжайшим запретом
Да собственно и у нас это начинают понимать. Наш местный супер-хирург пишет:
пипец, на любой конференции язык на замок, потому что пиздят в наглую идеи,
и через неделю уже делают ТАМ (на Западе)
(-;
так и есть
ты не знаешь насколько там контроль со стороны ну простых преподов например
Они (детишки, студики) у них консультируются по любому поводу; там вот так просто не письнешь
Со стороны конечно выглядит как будто "свободная страна"
Никуя; там пистец
А что это за сайт такой -- http://www.spoj.pl/ ?
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042543
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nu88RT183nu88RT183малейшая "полезная" вещь под строжайшим запретом
Да собственно и у нас это начинают понимать. Наш местный супер-хирург пишет:
пипец, на любой конференции язык на замок, потому что пиздят в наглую идеи,
и через неделю уже делают ТАМ (на Западе)
(-;
так и есть
ты не знаешь насколько там контроль со стороны ну простых преподов например
Они (детишки, студики) у них консультируются по любому поводу; там вот так просто не письнешь
Со стороны конечно выглядит как будто "свободная страна"
Никуя; там пистец
А что это за сайт такой -- http://www.spoj.pl/ ?
а ну это просто очередной контестерский сайт, с 01 июня 2004 года
Очень качественный потому что они решили взять пиплов масштабом допустимых языков
Обычный набор C, Java, Pascal, C#
Я опять скажу, в принципе между подобными сайтами разницы нет, потому что они не
придумывают свои задачи и тестовые данные (это огромный кусок работы)
Вот например Ватерлоо: http://plg1.cs.uwaterloo.ca/~acm00/
Это не типа этого; просто публикуют всё потом
Да их очень много; или
http://cemc.math.uwaterloo.ca/contests/past_contests.html
Бери что хочешь
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042545
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а SPOJ -- это Гданьский Технологический Университет
...
Рейтинг: 0 / 0
Каким алгоритмом можно заполнить все озёра рельефа водой?
    #36042549
RT183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но чем именно этот сайт хорош? Да в принципе ничем особенным.
Просто задачи там встречаются зашибательские.
Даже взять просто польские олимпиады: это высочайший уровень.
Ваще-то Польша всегда славилась своей математикой.

Или даже взять ту задачу HIR, ты ее нигде больше не увидишь (с ZCon-а)
а ее наш русский опубликовал (Роман Соловьев)

В Индии проводится очень много соревнований. Море просто.
С денежными призами. Я просто пачками получаю "спам" от них:
приглашаем ! Примите участие ! (не именно я конечно; спам такой)
Индуссы кстати очень даже молодцы; они умеют работать, а не куи валять.
Они умные пацаны и у них есть очень важная черта: они не боятся ошибаться
и признавать свои ошибки
.
Т.е. там где я надую губки от обиды, индусс просто скажет: а я этого не знал!
Фенькс! Буду знать!
...
Рейтинг: 0 / 0
25 сообщений из 261, страница 1 из 11
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Каким алгоритмом можно заполнить все озёра рельефа водой?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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