|
|
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
На собеседовании дали задачку, я её решил, отправил, программеры посмотрели и отказали. Поэтому думаю, что можно публиковать всё, кроме явок и паролей. Задачка была такая: дана матрица высот 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, только начать с того же самого элемента. Смысл в том, что мы нащупываем любое дно, хоть мелкую впадинку и дальше пытаемся из неё вырасти. На каждой новой итерации мы будем иметь дело с новым уровнем дна, который будет неубывающий, если мы имеем дело с глубоким озером, которое "по ступенькам" поднимается. Будет новая итерация с разведкой границ нового дна на каждой ступеньке. Если в очередной раз целое множество составить не удалось, значит встречена дырка, край рельефа, либо элемент ниже дна, который не позволит налить воды больше - она утечёт вниз. Да, в рельефе может иметься множество локальных озёр, которые все ограничены чем то выше них, ну типа: на картинке дно такое, что в нём может быть несколько локальных озёр, он все они погребены под общим окианом, так что всё сводится к тому, что озеро одно, просто дно у него инеетрсное. Алгоритм мой "осознаёт" такую ситуацию в момент строительства последнего локального дна (из которого ничто никуда не выливается). Ибо во время строительства последнего озера наступает итеррация, когда уровень воды в этом озеер ровняется со всеми остальными или с группой других озёр и тогда "трассировщик" находит более широкое множество с более широкими краями и заливает уже его, погребая всё больше озёр под собой. Так он захватывает всё что можно на последнем ходе. Недостаток - повторные прохождения по нескольку раз одной и той же клетки в ходе подьёма уровня воды по ступенькам, порой даже повторный проход целых озёр. Т.е. такая вот штука инкрементирующая, динамический алгоритм наверное это называется. Ничего лучше я пока не придумал. Конечно, есть вопросы кеширования целых озёр, как-то можно упростить их слияние. Сразу строить всё озеро, анализируя одновременно и спуски и подьёмы я не смог осилить, мне показалось, что очень тяжело построить такой реально работающий алгоритм. Более того, он больше похож на попытку оптимизировать частный случай, когда очень сложное дно, а озеро одно. Но например в моём простом примере сверху, озера реально два, одно с более высоким уровнем воды, второе с более низким, ограничены стенкой (на водопад каскадный картинка похожа). Есть возможен алгоритм с трассировкой каплей, т.е. ты капаешь куда-либо, трассируешь каплю и смотришь, изменилось ли состояние всей системы после этого, если да - капаешь ещё раз, если нет - валим капать в другое место. Тоже будет работать. Но будет ли быстрее моей - наверное иногда да, но если представить резкую глубокую впадину, то у меня она зальётся до краёв моментально, а там будет капать очень долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 20:44:02 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
каково количество значений высот? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 20:50:59 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
Количество значений высот - от 0 до скольки угодно. От типа данных реализация зависеть не должна. Самих клеток сколько - сколько угодно, лишь бы это была матрица (NxM), без всяких рваных краёв, хотя их можно реализовать нулями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 20:57:27 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
не, меня интересует не "до скольки", а "сколько значений ?" в приведенном примере 4 значения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 21:04:08 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
да это "детская" задача В ней ни ума ни соли ничего нет Просто надо строго и ясно понять что именно ты ищещь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 22:22:31 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
1. ищешь все стоки при помощи dfs/bfs (что больше нравится) для каждой клетки; 2. если стоков, не являющихся дырками, не найдено, то гоуту 5; 3. стоки, не являющиеся дырками, помечаешь как озерные клетки и устанавливаешь им новое значение высоты, равное минимальной высоте среди 4ех соседей (которые гарантированно не дырки); 4. гоуту 1. 5. в множестве озерных клеток выделить связные подмножества; тот же dfs. Уверен, хотели именно это, простое знание базовых алгоритмов поиска на графе (dfs/bfs). Интересно, где такое спрашивают? В горле уже сидят все эти select CustomerName from Shipments ..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 22:24:57 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
напрмиер http://www.spoj.pl/problems/WATER/ Я например даже не помню как я это делал 6th Polish Olympiad in Informatics, stage 3 ------- это вообще-то очень не для средних умов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 22:25:07 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
http://pajerovaliero.livejournal.com/803.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 23:49:07 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
nu88http://pajerovaliero.livejournal.com/803.html глянул и чё? в чем трабла? У этой задачи нет алгоритма в общепринятом смысле В самой задаче само решение и сидит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 00:05:17 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
блин, всё, вопрос закрыт, надо было с краёв херачить, было бы в сто раз быстрее... чёрт ) алгоритм с "крайний наименьший" ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 02:04:07 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
nu88блин, всё, вопрос закрыт, надо было с краёв херачить, было бы в сто раз быстрее... чёрт ) алгоритм с "крайний наименьший" ) ты главного не сказал: те пиплы (которые "тестировали" тебя) были правы или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 02:18:10 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
> вопрос закрыт, нифига, завтра разберем по полной программе Я например тоже не эффективно сделал, ; как всегда : сверху вниз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 02:21:01 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
RT183nu88блин, всё, вопрос закрыт, надо было с краёв херачить, было бы в сто раз быстрее... чёрт ) алгоритм с "крайний наименьший" ) ты главного не сказал: те пиплы (которые "тестировали" тебя) были правы или нет? уже пофиг, отказ получен, больше ничё меня не интересует ) Сейчас я вижу, в чём ещё могла быть лажа - не увидел такого решения, когда можно с краёв начинать "в обнимку" В ОДИН ПРОХОД заполнить все хитрые впадины и мультиозёра. Всё, это была самая приличная вакансия в городе, теперь тока застрелицо ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 02:27:27 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
не бери в голову (насчет вакансии) Хотя между нами задача очень простая (без обид), для программера экстра-класса тут ваще нет задачи. И они кстати молодцы что такой хней проверяют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 02:33:32 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
хотя именно насчет тебя они еще пожалеют А то знаешь на ПТ сидит куча ламеров, пальцы топорщат, а что они могут? Никуя. Не умеют простейшие вещи (знание хрен с ним, это восполнимо). Ничего не умеют и даже не понимают ни сути вещей, просто как роботы; Пришли, ушли, накодили детсад. Им это неинтересно, это же видно невооруженным глазом. Воображают: чуть-что, погуглим! Хер вы свой погуглите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 02:52:59 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
Да я понимаю, что простая, решение сразу в голову пришло, потом второе более экономичное, а оказывается есть третье, просто идеально клёвое ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 03:25:43 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
nu88Да я понимаю, что простая, решение сразу в голову пришло, потом второе более экономичное, а оказывается есть третье, просто идеально клёвое ) нет , не простая Просто всё у ламеров. вот у них всё просто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 03:41:45 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
в следующий раз ткни своих тестировщиков сюда http://www.spoj.pl/ranks/HIR/ Hard Image Recognition И я тебе скажу почему там нет китаёз. Ты думал китаёзы такие простачки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 04:01:09 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
малейшая "полезная" вещь под строжайшим запретом Да собственно и у нас это начинают понимать. Наш местный супер-хирург пишет: пипец, на любой конференции язык на замок, потому что пиздят в наглую идеи, и через неделю уже делают ТАМ (на Западе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 04:05:09 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
RT183малейшая "полезная" вещь под строжайшим запретом Да собственно и у нас это начинают понимать. Наш местный супер-хирург пишет: пипец, на любой конференции язык на замок, потому что пиздят в наглую идеи, и через неделю уже делают ТАМ (на Западе) (-; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 04:46:06 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
nu88RT183малейшая "полезная" вещь под строжайшим запретом Да собственно и у нас это начинают понимать. Наш местный супер-хирург пишет: пипец, на любой конференции язык на замок, потому что пиздят в наглую идеи, и через неделю уже делают ТАМ (на Западе) (-; так и есть ты не знаешь насколько там контроль со стороны ну простых преподов например Они (детишки, студики) у них консультируются по любому поводу; там вот так просто не письнешь Со стороны конечно выглядит как будто "свободная страна" Никуя; там пистец ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 04:55:58 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
RT183nu88RT183малейшая "полезная" вещь под строжайшим запретом Да собственно и у нас это начинают понимать. Наш местный супер-хирург пишет: пипец, на любой конференции язык на замок, потому что пиздят в наглую идеи, и через неделю уже делают ТАМ (на Западе) (-; так и есть ты не знаешь насколько там контроль со стороны ну простых преподов например Они (детишки, студики) у них консультируются по любому поводу; там вот так просто не письнешь Со стороны конечно выглядит как будто "свободная страна" Никуя; там пистец А что это за сайт такой -- http://www.spoj.pl/ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 05:20:46 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
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 Бери что хочешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 05:36:54 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
а SPOJ -- это Гданьский Технологический Университет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 05:38:55 |
|
||
|
Каким алгоритмом можно заполнить все озёра рельефа водой?
|
|||
|---|---|---|---|
|
#18+
Но чем именно этот сайт хорош? Да в принципе ничем особенным. Просто задачи там встречаются зашибательские. Даже взять просто польские олимпиады: это высочайший уровень. Ваще-то Польша всегда славилась своей математикой. Или даже взять ту задачу HIR, ты ее нигде больше не увидишь (с ZCon-а) а ее наш русский опубликовал (Роман Соловьев) В Индии проводится очень много соревнований. Море просто. С денежными призами. Я просто пачками получаю "спам" от них: приглашаем ! Примите участие ! (не именно я конечно; спам такой) Индуссы кстати очень даже молодцы; они умеют работать, а не куи валять. Они умные пацаны и у них есть очень важная черта: они не боятся ошибаться и признавать свои ошибки . Т.е. там где я надую губки от обиды, индусс просто скажет: а я этого не знал! Фенькс! Буду знать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 05:55:31 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36042363&tid=1344339]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 517ms |

| 0 / 0 |
