|
42 / 42 / 18
Регистрация: 12.03.2013
Сообщений: 148
|
|
Задача о находжении минимального количества квадратов09.02.2014, 04:28. Показов 10115. Ответов 12
Метки нет (Все метки)
Дан прямоугольник с целочисельными длинами сторон. Задача состоит в находжении минимального количества квадратов на которые можно разрезать данный прямоугольник.
Есть способ всегда "откусывать" квадрат наибольшей возможной площади, но он не дает минимальности. Для примера 5х6 этот способ даст один квадрат со стороной 5 и 4-ре со сторнами 1. Минимальное количество на самом деле: 2 по 3, и 3 по 2. http://i.pixs.ru/storage/7/6/5... 799765.png
0
|
|
| 09.02.2014, 04:28 | |
|
Ответы с готовыми решениями:
12
Счетчик количества квадратов Найти сумму квадратов максимального и минимального чисел массива |
|
42 / 42 / 18
Регистрация: 12.03.2013
Сообщений: 148
|
|||||||
| 09.02.2014, 04:30 [ТС] | |||||||
|
Дан прямоугольник с целочисельными длинами сторон. Задача состоит в находжении минимального количества квадратов на которые можно разрезать данный прямоугольник.
Есть способ всегда "откусывать" квадрат наибольшей возможной площади, но он не дает минимальности. Для примера 5х6 этот способ даст один квадрат со стороной 5 и 4-ре со сторнами 1. Минимальное количество на самом деле: 2 по 3, и 3 по 2. http://i.pixs.ru/storage/7/6/5... 799765.png
0
|
|||||||
|
14 / 12 / 12
Регистрация: 23.12.2013
Сообщений: 84
|
|
| 09.02.2014, 07:22 | |
|
откуда такая задача?
Добавлено через 19 минут у меня появился такой вариант: дан квадрат прямоугольник nxm. n*m = k. вот у нас есть k (клеток, в примере на рисунке 30), что делаем - перебираем все варианты квадратов сверху вниз, начиная с корень из k, пытаясь заполнить пространство такими же квадратами, например: k = 30. 5 < sqrt(k) < 6. тогда начинаем с 5: 5*5 = 25. вычитаем из 30. получаем 5. и рекурсивно пытаемся заполнить квадратами эти 5: 2 * 2 + 1 * 1 = 5, но каким-то образом надо сделать проверку, что этот вариант нас не устраивает, тогда надо уменьшить "максимальный" квадрат, то есть 2x2 -> 1x1, и заполняем этот прямоугольник из 5. Получили разложение 30 = 5x5 + 1x1 + 1x1 + 1x1 + 1x1 +1x1. Далее уменьшаем максимальный квадрат 5x5 -> 4x4, делаем то же самое: 30 = 4x4 + 14, 14 = 3x3 + 5. Каким образом проверять, влезет ли - может, передавать длины и ширину прямоугльника. например: 30 = 5x5 + 5, тогда передаем для анализа прямоугольник со сторонами 5, 1. понятно, что 2x2 туда не влезет. таким образом мы получим набор вариантов, и выберем с минимальным значением. как задачу выполнить без перебора, пока не знаю, может ни как. вот как-то сумбурно написал, но вроде имею можно уловить.
0
|
|
|
42 / 42 / 18
Регистрация: 12.03.2013
Сообщений: 148
|
|
| 09.02.2014, 12:17 [ТС] | |
|
Перебором конечно можно. Тогда фактически задача сведется к представлению числа (площади прямоугольника S=MxN) в виде суммы чисел (правда только тех что сами являются квадратами натуральных чисел, но тогда количество возможных вариантов растет слишком быстро с ростом S.
Если НСД(M,N)=1, то вообще кошмар. Задача о разбиении числа. (http://ru.wikipedia.org/wiki/%... 0%BB%D0%B0) Может наоборот начинать из наихудшего варианта и использовать диаграмму Юнга, но как. ________________________________________ ________________ а задача, можно сказать неоткуда)
0
|
|
|
4182 / 3052 / 918
Регистрация: 19.11.2012
Сообщений: 6,196
|
|
| 09.02.2014, 17:04 | |
|
Хорошая задача. Видел оценки в книге Яглома Как "разрезать квадрат?", стр 87 и далее.
0
|
|
|
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 82
|
||
| 09.02.2014, 17:56 | ||
|
0
|
||
|
42 / 42 / 18
Регистрация: 12.03.2013
Сообщений: 148
|
|
| 09.02.2014, 23:18 [ТС] | |
|
0
|
|
|
42 / 42 / 18
Регистрация: 12.03.2013
Сообщений: 148
|
|
| 09.02.2014, 23:29 [ТС] | |
|
0
|
|
|
14 / 12 / 12
Регистрация: 23.12.2013
Сообщений: 84
|
|
| 10.02.2014, 18:13 | |
|
можно вычисления распараллелить и записывать кол-во слагаемых в общедоступную область памяти. и туда записывать минимальное значение слагаемых. если мы видим при вычислении, что кол-во слагаемых больше становится существующего значения, то прерываем. эти действия могут немного оптимизировать перебор, но это всё таки перебор
0
|
|
|
4182 / 3052 / 918
Регистрация: 19.11.2012
Сообщений: 6,196
|
|
| 11.02.2014, 13:17 | |
|
Предлагаю алгоритм разбиения целочисленного прямоугольника со сторонами a и b на минимальное число квадратов, основанный на полном переборе.
1) Пусть a<b. Если a=b, то достаточно одного квадрата. Рассмотрим все возможные разбиения числа ab в сумму квадратов не обязательно различные. 2) Для каждого такого разбиения числа ab проверяем можно ли выложить прямоугольник со сторонами a, b из квадратов со сторонами a) Каждый квадрат последовательно пытаемся уложить на прямоугольник. b) Положение квадрата полностью определяется положением, скажем, левой верхней вершины. Эта вершина помещается в узел целочисленной сетки на прямоугольнике. c) Если квадраты замощают прямоугольник, то найдено разбиение прямоугольника. d) Переходим к следующему разбиению числа ab. e) На каждом шаге число квадратов сравниваем с минимальным среди уже рассмотренных разбиений.
0
|
|
|
14 / 12 / 12
Регистрация: 23.12.2013
Сообщений: 84
|
|
| 12.02.2014, 11:03 | |
|
да и вообще, метод откусывания дает неплохое приближение. его кол-во участвующих квадратов можно использовать для откидывания вариантов при переборе.
0
|
|
|
4182 / 3052 / 918
Регистрация: 19.11.2012
Сообщений: 6,196
|
||
| 12.02.2014, 20:10 | ||
|
Так вот известно, что k(32,33)<10. Метод откусывания однако дает лишь k(32,33)<34. Предлагаю, такое сокращение перебора. Разбиваем одно из чисел так, чтобы свести дело к двум прямоугольникам меньших размеров. Решить задачу для каждого из них и получить оценки. Скажем для случая 32*33 имеем 33=16+17. Получаем два прямоугольника 16*32 и 17*32. Очевидно, что k(16,32)=2 и можно аналогично продолжить для k(17,32). Это как видно известная задача. Следил и здесь за обсуждением, но сегодня появились комментарии, которых еще вчера не было видно. Кто понимает в чем дело?
0
|
||
|
14 / 12 / 12
Регистрация: 23.12.2013
Сообщений: 84
|
|
| 12.02.2014, 22:17 | |
|
0
|
|
| 12.02.2014, 22:17 | |
|
Помогаю со студенческими работами здесь
13
Вычислить сумму квадратов максимального и минимального элементов вектора
Функция минимального количества изменений в массиве
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|