Поиск:

Ответ в темуСоздание новой темы Создание опроса
> алгоритм проверки корректности структуры 
:(
    Опции темы
Makise
Дата 4.6.2015, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2015

Репутация: нет
Всего: нет



добрый день!

задача практическая.

есть такие блоки
user posted image

углы на блоках маркируются при производстве. суть маркировки: соединять можно только углы с разными обозначениями. 

например так можно
user posted image

а так нельзя
user posted image


из этих блоков выкладываются структуры. например
user posted image 

блоки в структуре можно проворачивать, чтобы добиться корректного соединения в углах согласно маркировке.

блок А - просто квадрат,  переходит сам в себя при повороте на 90.
блок B - квадрат с линией посредине, переходит сам в себя при повороте на 180.
блок С - квадрат с линией по краю, его нельзя проворачивать.

теперь сама задача. задана структура (пример - см большую картинку выше). на ней указано расположение блоков A и расположение и ориентация блоков B и C. Нужно определить, возможно ли (и как именно) провернуть блоки A и B так, чтобы в каждой точке соединения углов оказались углы с разной маркировкой.

вот пример структуры, для которой это сделать невозможно
user posted image

может у кого-то есть идея, в какую сторону копать?
PM MAIL   Вверх
Akina
Дата 4.6.2015, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Не вижу особой проблемы. Задачу вполне может решить рекурсивная процедура присоединения к текущему промежуточному набору очередной плитки (при этом порядок заполнения должен определяться однозначно). На каждом шаге проверяется, можно ли в очередное место присоединить очередную плитку (одним или несколькими способами), если такая возможность имеется, то каждое полученное состояние передаётся на следующий шаг рекурсии для присоединения очередной плитки.
Максимальная вложенность алгоритма получается равной количеству плиток, а количество допустимых вариантов на каждом шаге - от нуля до 3. Если ты не собираешься мостить пустыню, то есть шанс дождаться окончания процесса.

Добавлено @ 15:23
PS. В начальном состоянии можно сразу разместить блоки типа С и организовать их "обход" при выборе очередной плитки для заполнения. Наиболее просто это, наверное, сделать предрасчитанным массивом порядка заполнения, но можно и запрограммировать. Опять же для снижения количества просчитываемых вариантов наиболее разумно на начальных шагах класть плитки возле плиток типа С, и по возможности пораньше переходить у плиткам типа В и отдавать предпочтение плиткам, имеющим максимальное количество уже размещённых соседних. 



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Makise
Дата 4.6.2015, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2015

Репутация: нет
Всего: нет



Цитата(Akina @  4.6.2015,  15:19 Найти цитируемый пост)
Задачу вполне может решить рекурсивная процедура присоединения к текущему промежуточному набору очередной плитки


простой перебор очень нежелателен. потому и вопрос к студии. может быть возможно очевидным образом свести это к какой-то известной задаче на графах или что-то подобное. я в дискретке не сильна  smile 
PM MAIL   Вверх
Akina
Дата 4.6.2015, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



А задача по-любому переборная. Просто надо максимально оптимизировать её выполнение, уже на первых шагах просчёта организовав максимальное "отсечение" невалидных вариантов.

Добавлено через 2 минуты и 29 секунд
Каков максимальный ожидаемый размер поля для заполнения в плитках и количество на нём плиток различного типа?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Makise
Дата 4.6.2015, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2015

Репутация: нет
Всего: нет



2000 x 2000 блоков максимум. содержимое структуры можно рассматривать как случайные данные.
PM MAIL   Вверх
Akina
Дата 4.6.2015, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



4кк блоков? мощненько... рекурсией тут делать нечего - это точно. Думаю, придётся тебе придумывать что-то типа волнового алгоритма с дополнительной валидацией. И за вменяемое время оно будет работать только в случае, если блоки (или агломераты таких блоков) типов В и С достаточно редки - т.е. количество альтернативных решений достаточно велико.

А задача всё равно имхо переборная.

Добавлено через 11 минут и 30 секунд
С другой стороны...

Если нумерация именно такова (у всех типов блоков совершенно одинакова, как в начальном посте), то несложно сделать простой, но достаточно любопытный вывод - блоки типа А при наличии хотя бы одного блока типа В или С по возможным вращениям полностью эквивалентны блокам типа В. Иными словами, если в структуре зафиксированы хотя бы один блок, расположенный "вертикально", и один блок, расположенный "горизонтально" - эту структуру замостить бесконфликтно невозможно в принципе. Можешь попробовать замостить полосу из 3 блоков (В-А-С), причём полоска на блоках В и С ориентирована одинаково (скажем, вертикально, тю.е. относительно первого твоего рисунка блок С повёрнут на 90 градусов) - хрен что у тебя получится.
Что в свою очередь тянет вывод, что для того, чтобы произвольный рисунок мог быть замощён блоками, должны существовать по два типа блоков В и С - с горизонтальной и с вертикальной полосой (при нумерации, как на первом рисунке).
А это приводит к выводу, что в таком случае достаточно просто выбрать ориентацию нумераций (либо "горизонтально", либо "вертикально"), и в нужных местах использовать блоки типов В и С нужной ориентации полосы на них.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Lipetsk
  Дата 5.6.2015, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в форме ;)
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.1.2009
Где: Липецк

Репутация: 2
Всего: 5



Ну, если посмотреть внимательно, то задача очень простая
Каждый блок имеет одно из 4-х состояний, пронумеруем, например, по числу из правого нижнего угла
Какие соседи могут быть у блока с состоянием 1? Только 1 или 3
для блока с состоянием 2 соседями могут быть только 2 и 4
и т.д.
Т.е. задача решается, если все блоки типа B и C имеют одинаковую чётность
PM   Вверх
Makise
Дата 5.6.2015, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2015

Репутация: нет
Всего: нет



спасибо за участие в обсуждении!!

задача оказалась еще проще. я картинки из первого поста делала в inkscape. посидела в нем еще немного, покрутила блоки и вот к чему пришла: если в структуре есть хотя бы один ориентированный блок (B или C), то степеней свободы у такой структуры очень мало.

я сразу забыла написать, что соединять два блока по диагонали нельзя (соединения типа "треугольник" не используются, поэтому жесткости при диагональном соединении не будет), такие структуры отбрасываем сразу.

если два блока соединены, то любой один из них можно провернуть на 180, и это положение тоже будет соединяемым (говорю только о нумерации углов). но если к двум соединенным зафиксированным блокам добавить третий, который должен присоединяться к обоим, то у него есть только одно возможное положение. т.е. если в структуре все блоки соединяются как минимум с 3 другими (т.е. нет "мостов" шириной в 1 блок), то проворот каждого блока однозначно задается положением любых двух выбранных фиксированных блоков, и проверка возможности соединения всей структуры сводится к скромному числоу проходов по ней, начиная с любых двух выбранных соседних блоков. если в структуре есть блок C, тогда вся проверка выполнится за 2 прохода (два возможных положения комплекса из выбранного блока C и какого-то из соседних с ним). если C нет, но есть блок B, проходов будет 4 (т.к. сам B тоже можно провернуть. а может быть и 2 будет достаточно, если поворот B на 180 рассматривать как поворот всей структуры на 180). если вся структура состоит из блоков A, тогда задача всегда имеет решение.

итого осталось учесть ситуацию с мостами шириной в 1 блок, и готово  smile

Добавлено @ 13:38
Цитата(Lipetsk @  5.6.2015,  08:29 Найти цитируемый пост)
Т.е. задача решается, если все блоки типа B и C имеют одинаковую чётность

у меня есть пример структуры, в которой по два блока B и C "одинаковой четности", и которую нельзя соединить

вот даже еще проще пример несоединяемой структуры с двумя C "одинаковой четности"
user posted image

а если добавать один ряд из A, тогда структура станет соединяемой
user posted image

Это сообщение отредактировал(а) Makise - 5.6.2015, 13:50
PM MAIL   Вверх
Akina
Дата 5.6.2015, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Makise @  5.6.2015,  14:35 Найти цитируемый пост)
у меня есть пример структуры, в которой по два блока B и C "одинаковой четности", и которую нельзя соединитьвот даже еще проще пример несоединяемой структуры с двумя C "одинаковой четности"

Что-то не возьму я в толк - что в данном случае названо несоединяемостью? Вполне себе замощено, вроде конфликтных узлов не видать...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Makise
Дата 5.6.2015, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2015

Репутация: нет
Всего: нет



Цитата(Akina @ 5.6.2015,  14:00)
Цитата(Makise @  5.6.2015,  14:35 Найти цитируемый пост)
у меня есть пример структуры, в которой по два блока B и C "одинаковой четности", и которую нельзя соединитьвот даже еще проще пример несоединяемой структуры с двумя C "одинаковой четности"

Что-то не возьму я в толк - что в данном случае названо несоединяемостью? Вполне себе замощено, вроде конфликтных узлов не видать...

user posted image

1-1 и 4-4 встречаются в точке соединения
PM MAIL   Вверх
Akina
Дата 5.6.2015, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Пффф... приехали... да при ТАКОМ условии (если ещё и у соседа по диагонали не должен быть тот же номер) у тебя вообще положение ЛЮБОЙ ОДНОЙ "внутренней" (для которой хотя бы на одном из углов имеется 3 соседа) плитки полностью определяет ориентацию ВСЕХ внутренних плиток узора, если между ними можно построить путь из только внутренних плиток. Т.е. степени свободы имеет только полоса шириной в 1 плитку. Убери на этом своём рисунке любой (скажем, правый) вертикальный крайний ряд - и всё равно узор останется несовместным.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
TarasProger
Дата 17.8.2015, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Цитата(Makise @  4.6.2015,  14:13 Найти цитируемый пост)
вот пример структуры, для которой это сделать невозможно
user posted image

может у кого-то есть идея, в какую сторону копать? 
Можно: http://hkar.ru/Daat.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.