Оказывается Хабр доброжелательно предоставляет возможность завести бесплатный «корпоративный» блог для опенсорсного проекта. Какое-то время назад я подал заявку — и недавно обнаружил что она была удовлетворена. Начинать программисты любят с «тестового» поста, но т.к. речь идёт о публичном пространстве, пусть он будет хоть немного содержательным 🙂
На сайт CodeAbbey сегодня добавилась задачка про поиск Белого Прямоугольника. Речь идёт о матрице в которой есть чёрные и белые клетки — расставленные достаточно хаотично — и хочется найти прямоугольник без чёрных клеток максимальной площади (со сторонами параллельными сторонам матрицы, конечно).
Про сам сайт мы ещё расскажем в отдельно (иначе зачем блог было заводить) — а сейчас всё же про саму задачку.
Она, по-видимому, древняя как мир. Я на неё наткнулся где-то в конце книжки Ж.Арсака «Программирование Игр и Головоломок» — причём он упоминает что сам встретил её на какой-то олимпиадке за несколько лет до того. А книжка-то 1985 года.
Интересно что при очень простом описании самый банальный алгоритм который приходит в голову имеет сложность O(N^6)
где N
— сторона матрицы. Конечно нынешние компьютеры уже не те что в 80х годах, но если вы заимплементите такой «брутефорс» — то даже на скромных размерах тестовых данных которые предлагает сайт, работать он у вас будет сколько-то секунд… Заметно не мгновенно.
Гораздо более сносный алгоритм O(N^3)
можно реализовать достаточно несложно (именно он срабатывает при загрузке страницы и генерации данных на сайте).
Возможно оптимальный алгоритм за O(N^2)
уже требует немножко поднапрячь мозги — но впрочем его не очень сложно нагуглить (сложнее понять).
ссылка на оригинал статьи https://habr.com/ru/articles/869720/
Добавить комментарий