Как я могу определить атрибуты ребер или вершин с помощью Юнга?

1

Может быть, это наивный вопрос, но на самом деле у меня не могло быть функции, определяющей атрибуты ребер или вершин в графе.

Учитывая, что мой график - DirectedSparseGraph.

заранее спасибо

Теги:
jung

1 ответ

0

Существует несколько различных способов работы с атрибутами edge/vertex в JUNG.

(Следующий материал взят из руководства JUNG, в настоящее время находится по адресу http://sourceforge.net/apps/trac/jung/wiki/JUNGManual.)

Многие из методов JUNG требуют, чтобы пользователь указывал связь между элементом графа (вершиной или краем) и данными определенного типа: текст меток, вес края, цвет и т.д. По соглашению это обычно делается с помощью трансформатора.

Transformer - это интерфейс коллекций коллекций с одним преобразованием метода (I input), который возвращает какой-либо объект типа вывода (O) для любого ввода. Это существенно определяет взаимосвязь между элементами входного и выходного типов. В некотором смысле, это нечто похожее на карту, за исключением того, что она намного более легкая и доступна только для чтения.

Существует несколько способов записи одного из этих трансформаторов. Это относится к любому месту, в котором вас попросят предоставить Трансформатор.

(1) Постоянное значение. На самом деле для этой цели есть класс ConstantTransformer (в коллекциях коллекций). Это полезно для ситуаций, когда вас спрашивают об трансформаторе, но на самом деле все элементы должны получать одинаковое значение (например, при условии, что вес кромки не имеет веса).

(2) Поддержка карт - либо новая карта, либо на основе существующей Карты. Там класс MapTransformer (опять же, коллективные коллекции), который обрабатывает этот случай. Это полезно, когда у вас есть столько разных значений, сколько элементов, или когда нет очевидного шаблона, который связывает элементы со значениями/выходами.

(a) новая карта: для каждого элемента вы создаете пару (элемент, значение) на карте. Если значения не относятся ни к чему другому, это может быть уместно... хотя это, вероятно, довольно редко.

(b) существующая Карта: часто у вас будет существующая таблица поиска, которая делает то, в чем вы нуждаетесь (см. примечание ниже); нет необходимости создавать новую.

(3) Элемент с переменной переменной. Это почти то же самое, что и Map-backed, но с другой моделью хранения.

(4) На основании вызова функции "на лету" (расчет, отчет о состоянии и т.д.).

(5) Комбинации или варианты вышеуказанного, например, трансформаторы, которые используют информацию для выбора, для определения того, какой из двух цветов использовать.

Обратите внимание, что в любом из этих случаев трансформатор может принимать процесс (карта, переменная экземпляра, вызов функции), который выводит что-то другое, чем то, что вы хотите (например, значение с плавающей запятой), и переводит его в значение соответствующего типа (например, краска). Например, предположим, что вы хотите красить вершины красного цвета, если они имеют высокий PageRank, желтый, если они имеют умеренный PageRank и черный, если у них низкий PageRank. Вы можете легко построить класс Transformer, который принимает данные PageRank (возможно, сам предоставленный Transformer, который вы предоставили конструктору), определяет, какой из трех интервалов вы хотите, а затем выводит соответствующий цвет, когда вы даете ему вершину. Сделав это еще дальше, было бы довольно легко написать основанный на пороге общий трансформатор, который передал бы Transformer из пороговых значений в цвета в качестве его параметра конструктора.

Это действительно ключевое понимание использования трансформаторов в JUNG: мы пытаемся использовать их таким образом, чтобы у вас было как можно меньше работы, чтобы, скажем, запустить алгоритм, где весовые коэффициенты основаны на количество документов, соавторов связанных с вершинами инцидентов (представляющих авторов), или создать визуализацию, для которой цвет вершин является функцией уровня активности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню