Категория ‘Алгоритмы’

Компоненты для рисования графов на Delphi (C Builder)

При решении ряда задач требуется реализовывать отображение различных структур в виде графов - простых, ориентированных, нагруженных… В очередной раз может встать вопрос - делать ли в рамках проекта, либо использовать существующие наработки. Каждый из вариантов имеет право на существование, однако в любом случае хотя бы ознакомиться с уже имеющимся материалом по этой теме не помешает.

Библиотеки для отображения графов. (некоторые кроме отображения позволяют редактировать и производить ряд операций с графом - поиск пути, проверка связности…) Кратенький обзор графо-рисовалок за давностью, пожалуй, не сделаю (дабы не вводить в заблуждение).. Скорее как коллекция ссылок - дополняйте :).

GraphVIZ - http://www.graphviz.org/
Leda - http://www.algorithmic-solutions.com/enleda.htm
http://www.algorithmic-solutions.com/leda/ledak/index.htm (бесплатная?)
BOOST Graph Library - http://www.boost.org/libs/graph/doc/table_of_contents.html
Lib tulip - http://www.tulip-software.org/ (бесплатная)
http://bloodgate.com/perl/graph/manual/overview.html
http://www.oreas.com/products_en.php
http://www.tomsawyer.com/home/products.php
http://www.lassalle.com/index.html
http://netron.sourceforge.net/ (для .NET)

После просмотра ряда компонентов для отображения-редактирования графов, выбор пал на Lassale Addflow Active X.Бесплатная версия ограничена тем, что выдает сообщение при запуске скомпилированной программы (lassale.com) Кроме основного AddFlow компонента, можно использовать дополнительные LayoutFlow-компоненты, которые задают расположение элементов графа в соответствии с его типом (иерархия, дерево, симметричный граф…) Компонент тестировался на Borland CPP Builder 6.

http://bloodgate.com/perl/graph/manual/output.html
http://alenacpp.blogspot.com/2006/02/blog-post_19.html
http://dotnet-exp.blog.ru/29704355.html
http://kkv.spb.su/doku.php?id=etc:users:zan:graph_visualization

Опубликовано Февраль 7, 2008 | автор: levik  |  Нет комментариев »

Деревья php + mysql

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

Дано: php + mysql.
Все элементы, которые входят в древовидную структуру хранятся в одной таблице базы данных.
Найти: способ хранения и представления древовидной структуры.

  1. Простейший вариант состоит в том, что все “ветки” дерева имеют дополнительное поле “идентификатор родителя”, используя который и можно построить всё дерево. Если нет необходимости строить всё дерево, а достаточно просматривать потомков следующего уровня некоторого родителя - то такой способ организации дерева, на мой взгляд, идеален. Если же требуется строить дерево целиком, то придется использовать рекурсивную процедуру - или в php или в mysql (при условии, что максимальная “глубина  дерева” заранее определена, можно, конечно, обойтись одним составным, в котором одна таблица присоединяется сама к себе… Но это уже больше похоже на извращения..).
    Можно, конечно, обойтись одним запросом (что-то вроде “select * from tree”, а данные разбирть уже в php примерно так:
      while($row = mysql_fetch_assoc($res)){
      $tree[$row['pid']][$row['id']] = $row;
      }
    Плюсы: простота организации данных.
    Минусы: при большом количестве “веток” количество запросов возрастает…
  2. Nested sets или вложенные множества. Способ организации дерева, при котором дерево обходится, к примеру слева направо, и все вершины нумеруются дважды.
    Нумерация элементов при организации дерева методом Nested Sets
    Плюсы: одним запросом можно выбрать всех потомков, отстоящих по дереву на заданное количество уровней, всех родителей.. да вообще много чего можно. Где-то встречал уже готовый класс для работы с ”Nested sets” -  деревьями.

Опубликовано Ноябрь 1, 2007 | автор: levik  |  Комментарии (2) »