API библиотеки графов - PullRequest
       3

API библиотеки графов

0 голосов
/ 13 октября 2011

Я пишу свою собственную библиотеку Graph Graph ++ , у меня есть вопрос относительно того, что должен вернуть интерфейс. Например, Что должен вернуть мой BFS, я смущен тем, что должен ли он возвращать набор из vertices посещенных в заказе, или я должен иметь callback function, который будет вызываться при каждом посещении.

Что может быть лучшим вариантом, чтобы моя библиотека легко потреблялась.

Ответы [ 3 ]

3 голосов
/ 17 октября 2011

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

Графики являются чрезвычайно общими абстракциями.Любая структура данных, более сложная, чем дерево, является графом.Большинство программ имеют такие структуры данных.Например, веб-сайт, содержащий связанные страницы, представляет собой график.Так же как и представление карты.Однако, когда вы думаете о них как о графиках, вы игнорируете все различия между веб-сайтами и картами улиц и сосредотачиваетесь на единственном, что является общим.

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

Полагаю, я пытаюсь сказать, что вижу очень ограниченное использование универсальной библиотеки графов.Приятно, что у нас есть библиотека графов Boost, но, AFAIK, ее используют немногие.

3 голосов
/ 13 октября 2011

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

шаблон посетителя также может иметь отношение к вашим интересам.

1 голос
/ 13 октября 2011

В C ++ 11 предпочитают функциональный подход итеративному. В C ++ 03 используйте стратегии итераторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...