Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2010, 19:14   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Доброе время суток , уважаемые программисты ))
Есть такая вот картинка-

И на этой же картинке, как мы видим есть ответ, вот что-то вроде такой последовательности вершин графа или нескольких последовательностей таких вершин ( на примере их как раз таки две ) и надо получить.
Форма задания графа ( просто , чтобы было понятно какие есть исходные данные) - это два стринггрида - 1) это координаты точек на форме 2) Это матрица связности.
Смысл в том чтобы "обойти" граф по внешним точка, внутренние нас не интересуют.
Если граф состоит из нескольких несвязанных между собой графов - то в ответ идут маршруты "внешнего обхода" всех их по отдельности.
Какие у кого есть по этому поводу идеи?
А именно-
1) как организовать структуру данных.
2) можно ли обойтись здесь без указателей ?


Прикреплю архив. Здесь программа пока просто рисует.

Интересует не программная реализация , а просто идеи того, как лучше решить , какие подзадачи, по-вашему содержит эта задача ))
Вложения
Тип файла: rar tarama.rar (238.1 Кб, 33 просмотров)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось Stilet; 07.07.2010 в 08:42.
vedro-compota вне форума Ответить с цитированием
Старый 04.07.2010, 22:44   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Теория графов не предусматривает координаты вершин. Это не граф и задача не из этой области. Тут скорее задача на построение наибольшего многоугольника из заданных вершин\линий или что-то в этом роде.
Можно посмотреть на алгоритмы закрашивания многоугольников http://algolist.manual.ru/graphics/fill.php может натолкнет на какую-нибудь идею (у меня с математикой плохо я бы смотрел в сторону построчного сканирования)
Так же не ясно, что делать в таких случаях:
Изображения
Тип файла: png uhar.PNG (3.4 Кб, 107 просмотров)
pu4koff вне форума Ответить с цитированием
Старый 04.07.2010, 23:01   #3
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

А я бы посмотрел в сторону построения выпуклой оболочки. Ваша задача очень похожа на неё. Можно немного видоизменить Алгоритм Грехэма и использовать его.

P.S. Сначала нужно выделить связные области, а затем для каждой такой области применить алгоритм. Граф разбить на связные подграфы можно за O(n). Видоизменённый алгоритм Грехэма по сложности будет O(nLogn), если использовать быструю сортировку или сортировку слиянием, в итоге получится очень недурно.

Последний раз редактировалось mMAg; 04.07.2010 в 23:05.
mMAg вне форума Ответить с цитированием
Старый 04.07.2010, 23:16   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от mMAg Посмотреть сообщение
А я бы посмотрел в сторону построения выпуклой оболочки. Ваша задача очень похожа на неё. Можно немного видоизменить Алгоритм Грехэма и использовать его.
Да. Пожалуй более подходящий алгоритм для задачи, нежели то направление, что я предлагал. Хотя допиливать его достаточно серьезно придется.
pu4koff вне форума Ответить с цитированием
Старый 04.07.2010, 23:23   #5
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Да. Пожалуй более подходящий алгоритм для задачи, нежели то направление, что я предлагал. Хотя допиливать его достаточно серьезно придется.
Ну, на самом деле серьёзно или нет зависит от того, что именно требуется в поставленной задаче, ведь определения внешних точек автор сией темы не дал. Он только лишь привёл пример. А пример, это лишь частный случай. Я как математик не слишком люблю оперирование частными случаями. Если бы автор потрудился немного более широко раскрыть ТЗ своей задачи, я мог бы и алгоритмом помочь, но увы, отрезан, ввиду неопределённости ТЗ.

А вообще это задание имеет прямое отношение к укладке графа на плоскости. Большинство задач на таком счастье являются NP-полными, причём даже без более-менее адекватных алгоритмов перебора, которые существенно сокращают затраченное на их решение время. На первый взгляд эта задача к ним отношения не имеет. Но это лишь на первый взгляд.

vedro-compota,
Структура данных - матрица смежности, если количество вершин небольшое. Список смежности, если количество вершин велико, а количество рёбер мало (т.е. граф разреженный). Так же обращаю ваше внимание на то, что список смежности нужно будет хранить дублируя рёбра, если граф неориентированный, т.е. каждое ребро необходимо разбить на 2 дуги и хранить дуги (они уже имеют направление). Без указателей можно обойтись, если будете пользоваться матрицей смежности. Во-втором случае без них обойтись не получится.

Последний раз редактировалось mMAg; 04.07.2010 в 23:34.
mMAg вне форума Ответить с цитированием
Старый 04.07.2010, 23:41   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от mMAg Посмотреть сообщение
Ну, на самом деле серьёзно или нет зависит от того, что именно требуется в поставленной задаче, ведь определения внешних точек автор сией темы не дал. Он только лишь привёл пример. А пример, это лишь частный случай. Я как математик не слишком люблю оперирование частными случаями. Если бы автор потрудился немного более широко раскрыть ТЗ своей задачи, я мог бы и алгоритмом помочь, но увы, отрезан, ввиду неопределённости ТЗ.
Это понятно, что задача не полностью описана, но уже видно, что нужно:
1) Разбить множество точек на группы, из которых можно собрать замкнутую область
2) Соединять не первые подходящие по алгоритму точки, а только те, между которыми есть связь в матрице смежности.
В принципе, это не так всё сложно, но скорость работы алгоритма сильно пострадает.
В зависимости ответа топикстартера по поводу моего рисунка, допиливание может существенно усложниться.
Цитата:
Сообщение от mMAg Посмотреть сообщение
А вообще это задание имеет прямое отношение к укладке графа на плоскости.
Разве? У меня с математикой туго, но я не припомню, чтобы такие задачи вписывались в теорию графов. Есть конечно такая штука, как планарный граф, но это несколько из другой оперы вроде как. Координаты вершин там не фигурируют на сколько я помню. Укладка графа на плоскость - это скорее из серии: вот вам матрица смежности, расположите вершины как-нибудь покрасивее (или я не прав?). Тут же позиция вершин уже известна.
Цитата:
Сообщение от mMAg Посмотреть сообщение
На первый взгляд эта задача к ним отношения не имеет. Но это лишь на первый взгляд.
Для не математиков можно разъяснить как это все связано, а то я не улавливаю что-то?
pu4koff вне форума Ответить с цитированием
Старый 05.07.2010, 00:07   #7
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Это понятно, что задача не полностью описана, но уже видно, что нужно:
1) Разбить множество точек на группы, из которых можно собрать замкнутую область
2) Соединять не первые подходящие по алгоритму точки, а только те, между которыми есть связь в матрице смежности.
В принципе, это не так всё сложно, но скорость работы алгоритма сильно пострадает.
Множество точек на связные группы разбивается за O(n)... Полагаю, здесь я немного поспешил с выводом и приврал немножко. Пока в голову ничего не приходит, но, может что-нибудь прийдёт. Заранее прошу прощения у автора темы, если не вспомню ничего более толкового, чем O(m), что в худшем случае приводит к O(n^2). Поскольку завтра на военные сборы отъезжаю, вставать рано нужно.
По сути, задача сводится к сортировке на каждом шаге точек, с которыми есть связь (вместо предварительной сортировки всех точек, как в Алгоритме Грехема). Что-то мне подсказывает, что сложность алгоритма увеличится на константу (в отдельных случаях может и упасть). Пока нет идей, как это обосновать. Опять же, здесь предпочтительнее хранение списком смежности (в таком случае сложность будет в среднем O(mlog(m/n))). И опять же имеем зависимость от количества рёбер, в худшем случае будет O((n^2)Logn), что отбивает всякое желание оптимайзить первый шаг. Причём, от этой сложности мы здесь не избавимся. Загвоздка в том, что при этом худшем случае лучше не сканировать всё, а просто использовать стандартный Алгоритм Грехэма. Опять же, нужно думать, и думать не о птичках, возможно, есть способ как-то решить задачу оригинально. Пока в голову ничего не лезет.

Цитата:
Сообщение от pu4koff Посмотреть сообщение
В зависимости ответа топикстартера по поводу моего рисунка, допиливание может существенно усложниться.
Да, вы правы.

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Разве? У меня с математикой туго, но я не припомню, чтобы такие задачи вписывались в теорию графов. Есть конечно такая штука, как планарный граф, но это несколько из другой оперы вроде как. Координаты вершин там не фигурируют на сколько я помню. Укладка графа на плоскость - это скорее из серии: вот вам матрица смежности, расположите вершины как-нибудь покрасивее (или я не прав?). Тут же позиция вершин уже известна.
Нет. Укладка графа на плоскости имее очень большое техническое значение. Конечно, планарные графы здесь преобладают, поскольку фактически во многие задачи сводятся к тому, чтобы узнать, планарен ли граф и как его уложить на плоскости. Напомню, планарный, это который без самопересечений на плоскости можно уложить. Но это не значит, что все задачи сводятся к задачам на планарных графах. Вообще, когда говорят укладка графа, то подразумевают укладку без самопересечений и именно планарного графа. Это я там уже немного в ином смысле употребил. Но фактически, автор в своём примере не привёл пересечений рёбер, поэтому я так и сказал.
А то, что позиция вершин известна, эт даже хорошо. Это значит, что граф уже уложен и не нужно решать достаточно сложную для понимания задачу.

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Для не математиков можно разъяснить как это все связано, а то я не улавливаю что-то?
Мм, не понимаю, что можно разъяснить... Посмотрите, что такое NP-полная или NP-сложная задачи. Посмотрите несколько примеров задач таких.
mMAg вне форума Ответить с цитированием
Старый 05.07.2010, 09:06   #8
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

mMAg и pu4koff, благодарю за ценные советы! )) начинаю применять их ))
Цитата:
Можно немного видоизменить Алгоритм Грехэма и использовать его.
сначала попробую немного видоизменить и использовать )))
Цитата:
Если бы автор потрудился немного более широко раскрыть ТЗ своей задачи, я мог бы и алгоритмом помочь,
автор попытается сам этот алгоритм создать , ибо всё-таки видел пару алгоритмов ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 05.07.2010 в 09:12.
vedro-compota вне форума Ответить с цитированием
Старый 05.07.2010, 09:17   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

По-моему задача решения не имеет. Например первый граф можно представить так, что точка 4 окажется вместо точки 1. Что тогда?

Цитата:
автор попытается сам этот алгоритм создать , ибо всё-таки видел пару алгоритмов ))
Это как так? Уверен эти алгоритмы работают не с графами, а со структурами данных похожими на графы .
Более того, если посмотреть на задание внимательно, то совершено ясно что ТС пытается привязать графы к координатам. Но тогда в первом графе все точки внешние, ибо в трехмерном измерении цифра 4 приближена к наблюдателю, по сравнении с другими .
Задача явно не доформулирована.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 05.07.2010 в 09:20.
Utkin вне форума Ответить с цитированием
Старый 05.07.2010, 09:20   #10
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

хм. разве структура данных для графа определена однозначно? ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
лРаспознавание изображений и сопоставление найденных на тем "точек" Marsique Фриланс 8 21.06.2010 18:15
Распознавание изображений и сопоставлении найденных на тем "точек" Marsique Помощь студентам 0 20.06.2010 01:34
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Помогите пожайлуста найти, кто человек "вконтакте", зная его "мэйл" Аксюнька1990 Помощь студентам 1 12.06.2009 06:16