Порридж В Ко-ливинге
Там все числа от 1 и по прядку
Порридж В Ко-ливинге
Я хотел найти не тривиальный пример
Порридж В Ко-ливинге
И случайно решил
Viktor
Там разве сказано явно про это в условии?
Evgeniy
Там все числа от 1 и по прядку
Ну бред же) такие тесты давать
Порридж В Ко-ливинге
Ну бред же) такие тесты давать
Бред, никто не спорит
Evgeniy
Там разве сказано явно про это в условии?
Сказано лишь что числа из диапазона...
Evgeniy
Сегодняшняя задача как про квадраты
Evgeniy
Maximal Square
Viktor
ага, похожа. только дпшечка не с самим ответом, а просто помогает за O(1) получить количество единиц в квадрате, но проверить их все нужно ручками.
Evgeniy
Сумма по всей матрице dp получается
Viktor
т.е. у тебя каждая клетка — количество каких квадратов? которые правым нижним углом заканчиваются в этой клетке?
Evgeniy
Сейчас решение пришлю
Viktor
ага, ясно. и потом ты по ним суммируешь. давай, а я своё пришлю.
Viktor
по-другому вышло.
Evgeniy
https://leetcode.com/problems/count-square-submatrices-with-all-ones/discuss/643527/C-simple-O(mn)-DP-solution
Evgeniy
Выкинул лишнее из прошлого решения по квадрату и поправил
Порридж В Ко-ливинге
O(N) по памяти и O(N) по доступам это лучшее?
Порридж В Ко-ливинге
N это колво элементов в прямоугольнике
Evgeniy
Проверки на размер можно было и не делать, ну да ладно
Evgeniy
O(N) по памяти и O(N) по доступам это лучшее?
Можно без дополнительной памяти
Evgeniy
прямо на базе данной матрицы
Порридж В Ко-ливинге
Ну...
Порридж В Ко-ливинге
Это не совсем правильно по идее
Порридж В Ко-ливинге
Но ладно
Evgeniy
Если можно исправлять исходные данные, то почему бы и нет
Порридж В Ко-ливинге
Ловим фото
Viktor
https://leetcode.com/problems/count-square-submatrices-with-all-ones/discuss/643527/C-simple-O(mn)-DP-solution
Любопытно, да. https://gist.github.com/vitkarpov/95744ed3ebf82a38682e8497e488cba6 Я делал на основе вот этой идеи: количество единиц между двумя точками (когда проверяем квадраты) можно подсчитать если вычесть зелёные и красные области и прибавить их пересечение (потому что дважды вычли). Таким образом за O(1) можно спросить количество единиц в квадрате, а потом просто пробежаться надо по всем квадратам — это O(N^3)
Viktor
Где N — сторона матрицы, для простоты считаем её квадратной, иначе O(n * m * min(n, m))
Viktor
Выкинул лишнее из прошлого решения по квадрату и поправил
Мне нравится. Лучше, чем у меня вышло 👍
Viktor
Это вроде в посказках было
Да, я ровно то же самое и реализовал 😄
Viktor
Довольно очевидное решение видимо.
Viktor
Общее количество единиц в квадрате, т.е. площадь?
типа того. у тебя есть площадь квадрата и если единиц меньше, значит где-то там не хватало 1
Viktor
т.е. не подходит по условию
Evgeniy
Мне нравится. Лучше, чем у меня вышло 👍
Изначально я нагородил больше кода. Тут уже упростил. Но да, выходит довольно просто
Evgeniy
Засел крепко)
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Сегодняшняя очень похожа
Viktor
на сегодняшнюю? 🤔
Viktor
Сегодняшняя очень похожа
я, наверное, не очень понял о чем речь.
Порридж В Ко-ливинге
Да
Порридж В Ко-ливинге
я, наверное, не очень понял о чем речь.
Сегодняшня задачка очень похожа с задачкой про острова
Viktor
Сегодняшня задачка очень похожа с задачкой про острова
ого! ты типа как-то dfs-ом хочешь идти по квадратам рекурсивно?
Evgeniy
Evgeniy
Интересно, что у каждого свои ассоциации возникли, на какую задачу похоже!
Viktor
ну логично, кто на чём больше сидел 😄
Viktor
Читая CLRS, я только сейчас понял что задачка про buy and sell stocks сводится к задаче про max subarray sum и решается тем самым Кейденом. Только в задаче про стоки у него получается ещё и логическое объяснение.
Viktor
В том, что отрицательной прибыли не может быть?
ну, просто глядя на график ты понимаешь, что выгодно купить в самой нижней точке и продать дальше в самой верхней точке, и надо проверить вот такие «подмассивы», которые идут от низин к вершинам и выбрать те у которых самый большой размах, т.е. профит.
Viktor
а если представить массив цен как разницу между соседними ценами, типа твой профит между днями, то получается массив положительные и отрицательных чисел и это как раз матчится на нахождения maximum subarray sum
Viktor
потому что в сумме по отрезкам и есть профит целиком
Evgeniy
А ведь правда
Viktor
Это из книги CLRS если что 🙂
Evgeniy
Это из книги CLRS если что 🙂
На какой странице?
Evgeniy
:)
Viktor
91
Viktor
там правда не про кейдена рассказывается
Viktor
а про divide & conquer
Viktor
типа по-разному можно решать
Evgeniy
У меня на неё про O обозначения
Evgeniy
Это в каком издании?
Viktor
ой, да. ошибся. 70.
Viktor
3 издание.
Viktor
даже, 68.
Evgeniy
Поищу в электронном. А то в бумаге у меня только второе
Viktor
Во втором тоже наверняка есть, поищи главу про divide & conquer
Viktor
и там The maximum-subarray problem
Evgeniy
Русскоязычное?
Viktor
не
Evgeniy
аа
Viktor
тогда может и не быть 😄