Показать сообщение отдельно
  #5  
Старый 27.10.2008, 11:36
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Вот как раз я и хотел сразу предложить вариант с SQL запросом (только пока не делал, а могу предложить подход). Во-первых, сам цикл писать не надо, пишешь только условия (select ... where <условия>). Конечно, в базе данных будет этот цикл перебора, но всё-таки базу данных писали программисты и математики, поэтому они постарались провести оптимизацию. Во-вторых, (напр. у MS SQL Server) есть анализатор. Если он покажет длинный кусок, можно постараться сделать что-то по-другому. Итак, решение - это формирование промежуточных наборов данных (подзапросов). Сначала можно получить набор отрезков, имеющих ровно одну общую вершину (назовём этот набор "галочки"). Затем из набора галочек получить набор двойных галочек, имеющих общее ребро. Мы почти закончили (для треугольников). Осталось выяснить, чтобы у последнего набора вершина из первого набора галочек совпадала с вершиной из другого набора галочек (обе эти вершины не принадлежат общему ребру). Пример. У галочки ABC и галочки XYZ есть общее ребро (BC = XY) и совпадают вершины A и Z.
Ответить с цитированием