2014-09-29 13 views
7

Я не знаю, недавно ли NetworkX обновил один из методов, чтобы быть генератором вместо того, чтобы возвращать список, но я ищу хороший (скорее, лучший) способ получить GC графа.Как получить гигантский компонент графика NetworkX?

У меня работает, но на самом деле неэффективный вид, фрагмент кода вниз:

# G = nx.Graph() 
giant = sorted(nx.connected_component_subgraphs(G), key=len, reverse=True)[0] 

Есть ли способ очистки?

ответ

12

В networkx 1.9, connected_components_subgraphs возвращает итератор (вместо отсортированного списка). Значения, заданные итератором, равны not in sorted order. Таким образом, чтобы найти самый большой, использовать max:

giant = max(nx.connected_component_subgraphs(G), key=len) 

Сортировка O (N журнал N). Принимая max, O (n).

+0

Не знал, что вы можете использовать аргумент 'key' с' max', интересно ... Является ли метод 'connected_component_subgraphs' лучшим методом для использования в NX? –

+0

Да. Именно так [рекомендуется основным разработчиком networkx] (http://stackoverflow.com/a/24378179/190597). – unutbu

+0

Можно ли отсортировать 'nx.connected_component_subgraphs()', чтобы определить не самый большой компонент, но * все * из них? Сортируя это, мы могли бы получить ** неэффективный фрагмент **, как указано OP. Существует ли какое-либо обходное решение, особенно в случае ** огромных сетей **? – FaCoffee

Смежные вопросы