ння зручно для реалізації деяких алгоритмів, але не забезпечує ефективне додавання та видалення вершин. Крім того, воно є самим неекономічним по витраті пам'яті (за винятком графів, в яких кількість ребер значно перевищує кількість вершин). p> З наведеного аналізу видно, що кожна з трьох розглянутих структур зберігання графів володіє своїми достоїнствами і недоліками. Внутрішнє подання графів в універсальній бібліотеці має забезпечувати ефективну реалізацію великої кількості різноманітних алгоритмів, тому такі бібліотеки використовують комбіновані подання, або, як це зроблено в GTL (Н-Новгород), дозволяють явно вказати внутрішнє подання при створенні об'єкта-графа. p> Поширеним варіантом комбінованого внутрішнього подання є об'єднання уявлень у вигляді списків вершин/ребер і списків суміжності. Така структура зберігання забезпечує ефективне додавання та видалення вершин і ребер, ітерацію по вершинах і ребрах і, в той же час, дозволяє легко визначити ребра, інцідентние заданої вершині графа. Подібне уявлення використовується в бібліотеках LEDA і GTL (University of Passau). p> Бібліотека AGraph також використовує комбіноване уявлення, але замість списків застосовуються динамічні масиви покажчиків, реалізовані в бібліотеці Vectors (клас TPointerVector, він же TClassList). Порівняння списків і динамічних масивів, реалізованих у Vectors, з точки зору еффктівності виконання різних операцій наведено в наступній таблиці (n позначає кількість вершин у графі, m - кількість ребер):
Операція
<