Инквизитор Опубликовано 4 июля, 2012 Жалоба Поделиться Опубликовано 4 июля, 2012 Привет всем! Имеется задача по программированию:-------------------------------------------------------------------------------Дано (все величины - целочисленные):площадка X*Y число плиток Nплитки прямоугольной формы.соотношение длин сторон плитки от a:b до b:a То есть, если a = 1 и b = 3, то возможны плитки с соотношением сторон 1:1, 1:2, 1:3, 2:1, 2:2, 2:3, 3:1, 3:2, 3:3.Максимальная и минимальная площади плитки - Smax и Smin. То есть, имеется ограничение плитки по размеру. Например, если Smax = 4 и Smin = 1, то возможны плитки размеров 1х1, 1х2, 1х3, 2х1, 2х2, 3х1, но не 2х3 или 4х1. Надо замостить площадку плитками так, чтобы выполнялись следующие требования:все N плиток должны поместиться на площадкена площадке не должно остаться незакрытых местразмеры плиток и их расположение должны быть случайнымЖелательно:распределение плиток должно быть равномернымзадача должна решаться, если часть плиток (M) уже имеет заданные размеры и находится в определенных местах площадки. В общем, должно получиться что-то такое (расцветил для наглядности):------------------------------------------------------------------------------- Помогите, плиз, подобрать алгоритм для решения этой задачи, ибо даже не знаю, в какую сторону копать. Пока меня хватило только на это:1) проверить, решаема ли задача вообще (помещаются ли N плиток на площадку): Smin * N <= X*Y Цитата - Что они хотят? - Ку они хотят… Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость feo-gabber Опубликовано 4 июля, 2012 Жалоба Поделиться Опубликовано 4 июля, 2012 Привет всем! Имеется задача по программированию:-------------------------------------------------------------------------------Дано (все величины - целочисленные):площадка X*Y число плиток Nплитки прямоугольной формы.соотношение длин сторон плитки от a:b до b:a То есть, если a = 1 и b = 3, то возможны плитки с соотношением сторон 1:1, 1:2, 1:3, 2:1, 2:2, 2:3, 3:1, 3:2, 3:3.Максимальная и минимальная площади плитки - Smax и Smin. То есть, имеется ограничение плитки по размеру. Например, если Smax = 4 и Smin = 1, то возможны плитки размеров 1х1, 1х2, 1х3, 2х1, 2х2, 3х1, но не 2х3 или 4х1. Надо замостить площадку плитками так, чтобы выполнялись следующие требования:все N плиток должны поместиться на площадкена площадке не должно остаться незакрытых местразмеры плиток и их расположение должны быть случайнымЖелательно:распределение плиток должно быть равномернымзадача должна решаться, если часть плиток (M) уже имеет заданные размеры и находится в определенных местах площадки. В общем, должно получиться что-то такое (расцветил для наглядности):------------------------------------------------------------------------------- Помогите, плиз, подобрать алгоритм для решения этой задачи, ибо даже не знаю, в какую сторону копать. Пока меня хватило только на это:1) проверить, решаема ли задача вообще (помещаются ли N плиток на площадку): Smin * N <= X*Y здесь все очень не просто, перечислю проблемные пункты которые не так уж просто решить конкретно для одного условия, а уж если они еще и в совокупности с другими то...[*]все N плиток должны поместиться на площадке[*]размеры плиток и их расположение должны быть случайным(это уже попахивает случайным перебором из хрен его знает скольких возможных вариантов)[*]распределение плиток должно быть равномерным(это уж точно не из области программинга или математики - совершенно не определенное понятие)[*]задача должна решаться, если часть плиток (M) уже имеет заданные размеры и находится в определенных местах площадки.(а это противоречит предыдущим проблемным пунктам) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Rumlin Опубликовано 4 июля, 2012 Жалоба Поделиться Опубликовано 4 июля, 2012 Часть задачи жутко знакомое из школьных математических головоломок. За столько лет не вспомню, что зависело от длины стороны участка или от периметра....... Цитата Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов Ничего не делается к лучшему © Борис РаушенбахЛюди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский Ссылка на комментарий Поделиться на другие сайты Поделиться
SamSa Опубликовано 4 июля, 2012 Жалоба Поделиться Опубликовано 4 июля, 2012 Оффтопик:windows 8 делаете? :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
SlavaD Опубликовано 4 июля, 2012 Жалоба Поделиться Опубликовано 4 июля, 2012 Подозреваю, что надо делать поиск по фразе "Алгоритм раскроя". Однозначного решения тут не будет, скорее всего, что-то похожее на решение перебором, с дальнейшими попытками оптимизации, слишком большое количество вариантов. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Инквизитор Опубликовано 4 июля, 2012 Автор Жалоба Поделиться Опубликовано 4 июля, 2012 SamSa, ага, нечто похожее =)распределение плиток должно быть равномерным(это уж точно не из области программинга или математики - совершенно не определенное понятие) эм... я как раз думал,что "равномерное распределение" - это как раз сугубо математическое понятие. А имею в виду вот что:Не должно быть так, что в одной части площадки скопятся все большие плитки, а остаток займут маленькие. размеры плиток и их расположение должны быть случайным(это уже попахивает случайным перебором из хрен его знает скольких возможных вариантов)Почему-то мне кажется, что как раз перебор вариантов и не потребуется.задача должна решаться, если часть плиток (M) уже имеет заданные размеры и находится в определенных местах площадки.(а это противоречит предыдущим проблемным пунктам)Хм... не вижу противоречия.Имею такую мысль: Заполнение плиткой идет последовательно, каждая плитка кладется на случайное место, соответствующие области площадки помечаются как занятые... если для некоторых плиток заранее известно занимаемое ими место, задача не меняется. Но, может это тупиковый путь? Не знаю.здесь все очень не простоНу, было бы просто, не писал бы тут =) Цитата - Что они хотят? - Ку они хотят… Ссылка на комментарий Поделиться на другие сайты Поделиться
Инквизитор Опубликовано 4 июля, 2012 Автор Жалоба Поделиться Опубликовано 4 июля, 2012 SlavaD, алгоритм раскроя плюс перебор вариантов оного раскроя? Возможно... Но есть нюанс: заранее неизвестны размеры "выкроек". Похоже, вырисовалась подзадача математического плана:Сгенерировать N пар случайных чисел (a,b ), таких, что:1. Сумма всех произведений a*b = X*Y2. 1/k <= a/b <= k, где k - заданное максимальное соотношение a/b3. Smin <= a*b <= Smax Цитата - Что они хотят? - Ку они хотят… Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость feo-gabber Опубликовано 4 июля, 2012 Жалоба Поделиться Опубликовано 4 июля, 2012 SlavaD, алгоритм раскроя плюс перебор вариантов оного раскроя? Возможно... Но есть нюанс: заранее неизвестны размеры "выкроек". Похоже, вырисовалась подзадача математического плана:Сгенерировать N пар случайных чисел (a,b ), таких, что:1. Сумма всех произведений a*b = X*Y2. 1/k <= a/b <= k, где k - заданное максимальное соотношение a/b3. Smin <= a*b <= SmaxВы не понимаете разницы между математическими формулами и логики работы программы - это очень печально.... :( Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
SlavaD Опубликовано 4 июля, 2012 Жалоба Поделиться Опубликовано 4 июля, 2012 Но есть нюанс: заранее неизвестны размеры "выкроек"Понял, сразу не до конца уловил суть задачи.Что-то чем дольше думаю над ней, тем более чудовищное количество вариантов перебора представляется... 1) проверить, решаема ли задача вообще (помещаются ли N плиток на площадку): Smin * N <= X*YX=1 Y=12N=3Smin=4 Smax=4a=2 b=2 по вашему уравнению задача решаемая, в реальности нет и это еще простейший случай видимый визуально. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 5 июля, 2012 Жалоба Поделиться Опубликовано 5 июля, 2012 Когда-то давно занимался поиском чего-то подобного для мебельщиков (раскрой полотна). Результат поисков: хорошо решается задача в одномерном варианте (разрезка погонных материалов). В двумерном - очень сложно, ресурсоемко и все равно наполовину вручную. Как я понял, во всех вариантах решения основа - разные способы перебора. А если ставится задача "случайного расположения" - точно только перебор. Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
SlavaD Опубликовано 5 июля, 2012 Жалоба Поделиться Опубликовано 5 июля, 2012 В двумерном - очень сложно, ресурсоемко и все равно наполовину вручную.А в поставленной выше задаче еще и размеры деталей можно менять, считайте 3-е измерение ;). С одной стороны данная возможность увеличивает шансы, что задача будет решаема, с другой точно так-же увеличивает количество вариантов. Как по мне, решить однозначно данную задачу невозможно, в теории может получиться составить алгоритм который будет работать в некоторых несложных ситуациях. Кстати пример программы, составил я эскиз раскроя, при этом оставив с запасом на толщину пилы. Пришел заказывать распил, а у меня просят просто ввести размеры деталей, программа все сделает. Ввели, а у программы не влазит одна деталь, пока спорили почему они не могут взять мой вариант раскроя, программа похоже перебирала варианты и предложила следующий вариант раскроя, где все помещается. Собственно это к тому, что однозначного решения нет и сильно оно зависит от перебора вариантов и оптимизации этого перебора. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 5 июля, 2012 Жалоба Поделиться Опубликовано 5 июля, 2012 Да, как я понял, все подобные программы перебором работают так или иначе. Ну предварительная привязка крупных деталей может уменьшить количество вариантов, конечно. Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
Инквизитор Опубликовано 5 июля, 2012 Автор Жалоба Поделиться Опубликовано 5 июля, 2012 Похоже, вырисовалась подзадача математического плана:Сгенерировать N пар случайных чисел (a,b ), таких, что:1. Сумма всех произведений a*b = X*Y2. 1/k <= a/b <= k, где k - заданное максимальное соотношение a/b3. Smin <= a*b <= Smax Вы не понимаете разницы между математическими формулами и логики работы программы - это очень печально.... :( ? Буду признателен за разъяснение что с чем конкретно я спутал. По идее, с помошью этих формул я поставил конкретные условия задачи. Логика собственно программная тут может быть какая угодно, вплоть до действительно тупого перебора.Как бы, с одной стороны, "я не волшебник, а только учусь" =)С другой стороны, мне представляется, что решив задачу математически, я смогу если не написать с нуля соответствующую программную логику, то хотя бы сузить область поиска решения. Конкретно по данной подзадаче - для чего она нужна: решив ее, я получу готовый набор плиток; останется выяснить, можно ли ими замостить площадку. Это как бы часть одного пути; другой путь - вначале рандомно разложить по площадке N плиток единичного размера, а потом рандомно менять им размеры и двигать - пока что подвис в воздухе. Цитата - Что они хотят? - Ку они хотят… Ссылка на комментарий Поделиться на другие сайты Поделиться
zerg Опубликовано 5 июля, 2012 Жалоба Поделиться Опубликовано 5 июля, 2012 мля, программеры х от у ,данная задачарешается методом Кантаровича-Данцига Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость feo-gabber Опубликовано 5 июля, 2012 Жалоба Поделиться Опубликовано 5 июля, 2012 (изменено) мля, программеры х от у ,данная задачарешается методом Кантаровича-ДанцигаЕсли бы... такое можно было решить без тупого перебора на одних лишь формулах - не нужно бы было изобретать машину времени(а нахрена она нужна если все можно предвидеть и предрасчетать???)эта задача так просто не разрешаема - уж поверь.не приветствую высеры в достаточно нагруженных темах по математике, собственно как и на программерских Изменено 5 июля, 2012 пользователем feo-gabber Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Eugene Опубликовано 5 июля, 2012 Жалоба Поделиться Опубликовано 5 июля, 2012 если бы не это условие2. число плиток Nто, можно сказать, я нашел решение задачино как рандомно расставить заведомо известное кол-во плиток - увы, пока не знаю :( Цитата Жизнь - вечная борьба: до обеда с голодом, после обеда со сном. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.