sql >> Database >  >> RDS >> PostgreSQL

Hoe overeenkomende paren samen te voegen tot verbonden componenten in Python

Met netwerkX:

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)

geven:

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

Je moet nu het snelste algoritme controleren ...

OP:

Dit werkt geweldig! Ik heb dit nu in mijn PostgreSQL-database. Organiseer gewoon paren in een tabel met twee kolommen en gebruik vervolgens array_agg() doorgeven aan PL/Python-functie get_connected() . Bedankt.

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;

(Opmerking:ik heb het antwoord bewerkt, omdat ik dacht dat het tonen van deze stap een nuttige aanvulling zou zijn, maar te lang voor een opmerking.)



  1. Hoe voeg je een <br/> toe na elk resultaat, maar niet het laatste resultaat?

  2. Hoe bouw je een hybrid_method die het aantal records van de afgelopen X dagen telt?

  3. Onjuiste gidsvolgorde

  4. 3 manieren om de verzamelingen beschikbaar te krijgen in MariaDB