नेटवर्कएक्स के साथ:
import networkx as nx
G1=nx.Graph()
G1.add_edges_from([("a","b"),("b","c"),("c","d"),("d","e"),("f","g")])
sorted(nx.connected_components(G1), key = len, reverse=True)
देना:
[['a', 'd', 'e', 'b', 'c'], ['f', 'g']]
अब आपको सबसे तेज़ एल्गोरिथम की जाँच करनी होगी ...
ओपी:
यह बहुत अच्छा काम करता है! मेरे पास यह अब मेरे PostgreSQL डेटाबेस में है। बस जोड़े को दो-स्तंभ तालिका में व्यवस्थित करें, फिर array_agg()
. का उपयोग करें पीएल/पायथन फ़ंक्शन को पास करने के लिए get_connected()
. धन्यवाद।
CREATE OR REPLACE FUNCTION get_connected(
lhs text[],
rhs text[])
RETURNS SETOF text[] AS
$BODY$
pairs = zip(lhs, rhs)
import networkx as nx
G=nx.Graph()
G.add_edges_from(pairs)
return sorted(nx.connected_components(G), key = len, reverse=True)
$BODY$ LANGUAGE plpythonu;
(नोट:मैंने उत्तर संपादित किया, जैसा कि मैंने सोचा था कि यह कदम सहायक परिशिष्ट हो सकता है, लेकिन एक टिप्पणी के लिए बहुत लंबा है।)