sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan samles matchende par til forbundne komponenter i Python

Med netværk X:

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)

giver:

[['a', 'd', 'e', 'b', 'c'], ['f', 'g']]

Du skal tjekke den hurtigste algoritme nu ...

OP:

Dette fungerer fantastisk! Jeg har dette i min PostgreSQL-database nu. Bare organiser par i en tabel med to kolonner, og brug derefter array_agg() for at videregive til PL/Python-funktionen get_connected() . Tak.

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;

(Bemærk:Jeg redigerede svaret, da jeg troede, at visning af dette trin kunne være nyttigt tilføjelse, men for langt til en kommentar.)



  1. SUM() Funktion i MySQL

  2. TNS-12519 uden maksimale processer nået

  3. Kan ikke VÆLGE fra UPDATE RETURNING-klausulen i postgres

  4. Hvordan genererer man DELETE-sætninger i PL/SQL, baseret på tabellerne FK-relationer?