Алгоритм нарезки динамического графа

В настоящее время я работаю над проектом, основанным на графе, и я ищу алгоритм для нарезки динамического графа. Я уже провел некоторые исследования, но большинство алгоритмов, которые я нашел, работают только для статического графа. В моем окружении график динамический, это означает, что пользователи добавляют/удаляют элементы, создают/удаляют зависимости во время выполнения. (На самом деле я работаю с моделями UML, но модели UML также могут быть представлены типизированными графами, которые состоят из типизированных вершин и ребер) Я также ищу термины фрагментация графа но я ничего не нашел. И я хотел бы знать, существует ли такой алгоритм для нарезки динамического графа?

[ОБНОВЛЕНИЕ]

Извините за неясность, и я обновляю свой вопрос. Позвольте мне сначала раскрыть контекст.

В MDE (Model Driven Engineering) в крупномасштабных промышленных системах в настоящее время участвуют сотни разработчиков, работающих над сотнями моделей, представляющих часть спецификации всей системы. В таком контексте обычно применяется подход, заключающийся в использовании центрального репозитория. Решение, которое я предоставляю для своего проекта (в настоящее время я работаю в исследовательской лаборатории), является решением, ориентированным на одноранговые сети, что означает, что каждый разработчик имеет свою собственную репликацию системной спецификации.

Моя главная проблема заключается в том, как воспроизвести эти данные, модели. Например, представьте, что Алиса и Боб работают над этим UML. диаграмма, и у Алисы есть вся диаграмма в его репозитории. Боб хочет иметь элементы {FeedOrEntry, Entry}, как я могу разрезать эту диаграмму UML? Я ищу термины «нарезка модели». Я нашел один бумага, которая дает подход к нарезке диаграмм классов UML, но проблема этого алгоритма в том, что он работает только для статического графа. В нашем контексте разработчики постоянно добавляют/обновляют/удаляют элементы, и общие элементы должны быть согласованы с другими репликами.

Поскольку модели UML также можно рассматривать как граф, я также ищу термины «разрез графа» или «фрагмент графа», но не нашел ничего полезного. И я хотел бы знать, существует ли такой алгоритм для нарезки динамического графа


person Dimitri    schedule 12.08.2011    source источник
comment
Что вы имеете в виду под нарезкой?   -  person George Kastrinis    schedule 12.08.2011
comment
Средство нарезки принимает компоненты подмодели или подграфа на основе некоторых критериев. Эта концепция аналогична концепции нарезки программы.   -  person Dimitri    schedule 13.08.2011
comment
Может быть много алгоритмов в зависимости от того, о каком конкретном виде нарезки вы говорите. Например. алгоритмы нахождения компонент связности хорошо известны.   -  person Gabriel Ščerbák    schedule 13.08.2011
comment
Нарезка, как объяснено, сильно зависит от выбранных вами критериев. например, если вашим критерием является клика размером k, это на самом деле проблема клики, который является NP-полным. Вы должны предоставить более подробную информацию о конкретных критериях нарезки.   -  person amit    schedule 15.08.2011
comment
@Dimitri, тебе обязательно стоит обновить свой вопрос, чтобы он был понятным. Если мы не знаем, о чем вы просите, то, боюсь, никакое вознаграждение вам не поможет.   -  person Tomas    schedule 15.08.2011
comment
@Dimitri: Это может помочь, если вы дадите ссылку на упомянутую вами статью. Проблема станет для нас более понятной.   -  person Gabriel Ščerbák    schedule 16.08.2011


Ответы (3)


Если вы сделаете нарезку атомарной, я не вижу проблем с использованием алгоритма, показанного в документе, на который вы ссылаетесь.

Однако из-за ваших ограничений согласованности я считаю, что ваш подход p2p несовместим. Альтернативой является операция слияния, но я понятия не имею, как эта операция будет работать. Возможно, хотя бы частично, это придется делать вручную.

person stralep    schedule 18.08.2011
comment
Привет, спасибо за ответ? С чего вы взяли, что подход p2p несовместим? - person Dimitri; 18.08.2011
comment
Делать нарезку атомарной — не лучший выбор, потому что наш подход оптимистичен, что означает, что при совместном использовании элементов блокировка не применяется, но при обнаружении конфликта выполняется синхронизация. - person Dimitri; 18.08.2011
comment
Сильно попахивает САР-теоремой... Это действительно просто догадка, надо было точнее выразиться. Можете ли вы гарантировать, что определенная операция не привела к конфликту? Оптимистический подход допускает атомарность (если операции обратимы) - person stralep; 18.08.2011
comment
Да, я могу гарантировать, что определенная операция не может создать конфликтов. Например, когда я изменяю элементы, не используемые другими, для этого элемента не может возникнуть конфликт. Но, если элемент модифицируется одновременно двумя людьми, то может возникнуть конфликт и разрешение конфликта зависит от выбранной стратегии. Например, побеждает последняя запись. - person Dimitri; 18.08.2011
comment
В этом случае я бы предложил стратегию разрешения конфликта-возврата. Это заставляет операцию вести себя атомарно. Если операция не особенно распространена (в смысле их много одновременно), это может сработать. - person stralep; 18.08.2011

Похоже, вам нужна графовая база данных NoSQL, такая как Neo4J или FlockDB. Они могут хранить миллиарды вершин и ребер.

person Tom Jones    schedule 18.08.2011
comment
Как вы думаете, эти базы данных графов NoSQL предлагают возможность нарезать граф? - person Dimitri; 18.08.2011
comment
Я не знаю. Возможно, стоит проверить. - person Tom Jones; 19.08.2011

Как насчет нормализации графа к модели соседнего дерева? Тогда вы можете использовать DFS или BFS для нарезки графика?

person Gigamegs    schedule 18.08.2011