Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.11.2008, 12:02
street85 street85 вне форума
Прохожий
 
Регистрация: 26.11.2008
Сообщения: 9
Репутация: 10
По умолчанию Сравнение Графов

Добрый день!

вобщем есть задача:

например есть "модель-1":

1 2
*--------*
| |
| |
*--------*
3 4

состоит из 4-х точек
связи:
1->3 , 1->2 , 2->4 , 3->4

например пользователь вводит:

3 2 1 4
*---------*-----------*-----------*

также у фигуры 4-е точки
и связи:
1->3, 3->2, 2->4, 1->4

Сравнивая все модели в "библиотеке(файлах)" и введенные данные программа должна вывести что введенные данные по определению является "модель-1". причём точек и связей может быть неограниченно.

Массивы связей и точек:
Код:
Type
DotRec = record
 id:integer;
 x:integer;
 y:integer;
 z:integer;
end;

Type
LinkRec = record
 id:integer;
 first:integer;
 last:integer;
end;

var
 DotArr: array of DotRec;
 LinkArr: array of LinkRec;

у точек: id - уникальный номер, x,y,z - координаты
у связей: id - уникальный номер, first - начальная точка, last-конечная точка
first и last выбирается выберется из массива точек по уникальному номеру.

Заранее спасибо!
Ответить с цитированием
  #2  
Старый 26.11.2008, 14:48
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Пример ввода что-то подозрительно неправилен (напр., у модели 1 нет связи 3-2).
Ответить с цитированием
  #3  
Старый 26.11.2008, 16:30
street85 street85 вне форума
Прохожий
 
Регистрация: 26.11.2008
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Пример ввода что-то подозрительно неправилен (напр., у модели 1 нет связи 3-2).
это просто съехало при редактировании.
вот например "эталон-1":
(2.5 кб)
Точки
Код:
id:0 x:3 y:3 z:0
id:1 x:3 y:6 z:0
id:2 x:6 y:6 z:0
id:3 x:6 y:3 z:0
Связи
Код:
id:0 first:0 last:1
id:1 first:2 last:1
id:2 first:2 last:3
id:3 first:0 last:3
а вот ввод пользователя:
(2.5 кб)
Точки
Код:
id:0 x:7 y:7 z:0
id:1 x:4 y:5 z:0
id:2 x:3 y:6 z:0
id:3 x:7 y:3 z:0
Связи
Код:
id:0 first:1 last:2
id:1 first:1 last:0
id:2 first:3 last:0
id:3 first:3 last:2

и программа проанализировав эталоны должна вывести что ввод пользователя это "эталон-1".
Ответить с цитированием
  #4  
Старый 26.11.2008, 17:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Какие критерии соответсвия шаблону?
Ответить с цитированием
  #5  
Старый 26.11.2008, 18:28
street85 street85 вне форума
Прохожий
 
Регистрация: 26.11.2008
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Какие критерии соответсвия шаблону?
По связи - вышеописанный пример тоесть необязательно пользователь ввёл квадрат но если связи соответсвуют квадрату то программа выдаст что это квадрат.
Ответить с цитированием
  #6  
Старый 26.11.2008, 19:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так и пиши сравнение по связям - кол-во и наличие нужных связей.
Я бы сначала проверял по кол-ву точек, потом по кол-ву связей, а уже если по первым 2м критериям сошлось, то проверяешь нужные связи, при этом проверяешь прямые и обратные связи, т.е. связь 2-3 соответсвует также связи 3-2 (если связи двунаправленные).
Ответить с цитированием
  #7  
Старый 26.11.2008, 19:51
street85 street85 вне форума
Прохожий
 
Регистрация: 26.11.2008
Сообщения: 9
Репутация: 10
По умолчанию

Да это то понятно, но ведь пользователь необязательно введёт в таком порядке точки м связи например вот тоже "квадрат":
точки
Цитата:
id:0 x:7 y:3 z:0
id:1 x:2 y:7 z:0
id:2 x:8 y:9 z:0
id:3 x:3 y:3 z:0
связи
Цитата:
id:0 first:1 last:2
id:1 first:2 last:0
id:2 first:3 last:0
id:3 first:3 last:1

И если по такому методу сравнивать с эталоном описанном в 3-м посте то
ничего не получится , хотя должно...
Ответить с цитированием
  #8  
Старый 26.11.2008, 20:28
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

тогда еще перед сравнением сортируй точки с переименованием.
Иначе далее - распознавание образов, а это гораздо более сложная задача.
Ответить с цитированием
  #9  
Старый 27.11.2008, 00:27
street85 street85 вне форума
Прохожий
 
Регистрация: 26.11.2008
Сообщения: 9
Репутация: 10
По умолчанию

Спасибо! Нет это всё заведёт в тупик... распознавание образов? так ведь квадрат может быть представлен в линию или в "песочные часы", тут скорее нужно всё представлять в матрице смежности и их уже сравнивать только как?
Ответить с цитированием
  #10  
Старый 27.11.2008, 16:48
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Песочные часы получатся, если поставить жёсткое ограничение, что четыре точки в одной плоскости. Но если хотя бы одна точка отклонится от этой плоскости хотя бы на чуть-чуть, то это будет уже обычная пространственная фигура без пересечений.
Ответить с цитированием
  #11  
Старый 27.11.2008, 22:37
street85 street85 вне форума
Прохожий
 
Регистрация: 26.11.2008
Сообщения: 9
Репутация: 10
По умолчанию

Вобщем нужно установить изоморфизм неориентированных графов.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter