![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
любитель-далеко не
Участник клуба
Регистрация: 13.04.2010
Сообщений: 1,156
|
![]()
Доброе время суток , уважаемые программисты ))
Есть такая вот картинка- ![]() И на этой же картинке, как мы видим есть ответ, вот что-то вроде такой последовательности вершин графа или нескольких последовательностей таких вершин ( на примере их как раз таки две ) и надо получить. Форма задания графа ( просто , чтобы было понятно какие есть исходные данные) - это два стринггрида - 1) это координаты точек на форме 2) Это матрица связности. Смысл в том чтобы "обойти" граф по внешним точка, внутренние нас не интересуют. Если граф состоит из нескольких несвязанных между собой графов - то в ответ идут маршруты "внешнего обхода" всех их по отдельности. Какие у кого есть по этому поводу идеи? А именно- 1) как организовать структуру данных. 2) можно ли обойтись здесь без указателей ? Прикреплю архив. Здесь программа пока просто рисует. Интересует не программная реализация , а просто идеи того, как лучше решить , какие подзадачи, по-вашему содержит эта задача )) Последний раз редактировалось Stilet; 07.07.2010 в 08:42. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Теория графов не предусматривает координаты вершин. Это не граф и задача не из этой области. Тут скорее задача на построение наибольшего многоугольника из заданных вершин\линий или что-то в этом роде.
Можно посмотреть на алгоритмы закрашивания многоугольников http://algolist.manual.ru/graphics/fill.php может натолкнет на какую-нибудь идею (у меня с математикой плохо я бы смотрел в сторону построчного сканирования) ![]() Так же не ясно, что делать в таких случаях: |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]()
А я бы посмотрел в сторону построения выпуклой оболочки. Ваша задача очень похожа на неё. Можно немного видоизменить Алгоритм Грехэма и использовать его.
P.S. Сначала нужно выделить связные области, а затем для каждой такой области применить алгоритм. Граф разбить на связные подграфы можно за O(n). Видоизменённый алгоритм Грехэма по сложности будет O(nLogn), если использовать быструю сортировку или сортировку слиянием, в итоге получится очень недурно. Последний раз редактировалось mMAg; 04.07.2010 в 23:05. |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#5 | |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]() Цитата:
А вообще это задание имеет прямое отношение к укладке графа на плоскости. Большинство задач на таком счастье являются NP-полными, причём даже без более-менее адекватных алгоритмов перебора, которые существенно сокращают затраченное на их решение время. На первый взгляд эта задача к ним отношения не имеет. Но это лишь на первый взгляд. vedro-compota, Структура данных - матрица смежности, если количество вершин небольшое. Список смежности, если количество вершин велико, а количество рёбер мало (т.е. граф разреженный). Так же обращаю ваше внимание на то, что список смежности нужно будет хранить дублируя рёбра, если граф неориентированный, т.е. каждое ребро необходимо разбить на 2 дуги и хранить дуги (они уже имеют направление). Без указателей можно обойтись, если будете пользоваться матрицей смежности. Во-втором случае без них обойтись не получится. Последний раз редактировалось mMAg; 04.07.2010 в 23:34. |
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]() Цитата:
1) Разбить множество точек на группы, из которых можно собрать замкнутую область 2) Соединять не первые подходящие по алгоритму точки, а только те, между которыми есть связь в матрице смежности. В принципе, это не так всё сложно, но скорость работы алгоритма сильно пострадает. В зависимости ответа топикстартера по поводу моего рисунка, допиливание может существенно усложниться. Разве? У меня с математикой туго, но я не припомню, чтобы такие задачи вписывались в теорию графов. Есть конечно такая штука, как планарный граф, но это несколько из другой оперы вроде как. Координаты вершин там не фигурируют на сколько я помню. Укладка графа на плоскость - это скорее из серии: вот вам матрица смежности, расположите вершины как-нибудь покрасивее (или я не прав?). Тут же позиция вершин уже известна. Для не математиков можно разъяснить как это все связано, а то я не улавливаю что-то? |
|
![]() |
![]() |
![]() |
#7 | |||
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]() Цитата:
По сути, задача сводится к сортировке на каждом шаге точек, с которыми есть связь (вместо предварительной сортировки всех точек, как в Алгоритме Грехема). Что-то мне подсказывает, что сложность алгоритма увеличится на константу (в отдельных случаях может и упасть). Пока нет идей, как это обосновать. Опять же, здесь предпочтительнее хранение списком смежности (в таком случае сложность будет в среднем O(mlog(m/n))). И опять же имеем зависимость от количества рёбер, в худшем случае будет O((n^2)Logn), что отбивает всякое желание оптимайзить первый шаг. Причём, от этой сложности мы здесь не избавимся. Загвоздка в том, что при этом худшем случае лучше не сканировать всё, а просто использовать стандартный Алгоритм Грехэма. Опять же, нужно думать, и думать не о птичках, возможно, есть способ как-то решить задачу оригинально. Пока в голову ничего не лезет. Цитата:
Цитата:
А то, что позиция вершин известна, эт даже хорошо. Это значит, что граф уже уложен и не нужно решать достаточно сложную для понимания задачу. Мм, не понимаю, что можно разъяснить... Посмотрите, что такое NP-полная или NP-сложная задачи. Посмотрите несколько примеров задач таких. |
|||
![]() |
![]() |
![]() |
#8 | ||
любитель-далеко не
Участник клуба
Регистрация: 13.04.2010
Сообщений: 1,156
|
![]()
mMAg и pu4koff, благодарю за ценные советы! )) начинаю применять их ))
Цитата:
Цитата:
Последний раз редактировалось vedro-compota; 05.07.2010 в 09:12. |
||
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
По-моему задача решения не имеет. Например первый граф можно представить так, что точка 4 окажется вместо точки 1. Что тогда?
Цитата:
![]() Более того, если посмотреть на задание внимательно, то совершено ясно что ТС пытается привязать графы к координатам. Но тогда в первом графе все точки внешние, ибо в трехмерном измерении цифра 4 приближена к наблюдателю, по сравнении с другими ![]() Задача явно не доформулирована.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 05.07.2010 в 09:20. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
лРаспознавание изображений и сопоставление найденных на тем "точек" | 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 |