PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara menggabungkan pasangan yang cocok menjadi komponen yang terhubung dengan Python

Dengan jaringanX:

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)

memberi:

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

Anda harus memeriksa algoritma tercepat sekarang ...

OP:

Ini bekerja dengan baik! Saya memiliki ini di database PostgreSQL saya sekarang. Cukup atur pasangan menjadi tabel dua kolom, lalu gunakan array_agg() untuk meneruskan ke fungsi PL/Python get_connected() . Terima kasih.

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;

(Catatan:Saya mengedit jawaban, karena saya pikir menunjukkan langkah ini mungkin merupakan tambahan yang membantu, tetapi terlalu panjang untuk dikomentari.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP PDO Postgres versus jenis kolom Sqlite untuk count(*)

  2. Menggarisbawahi atau camelCase di pengidentifikasi PostgreSQL, ketika bahasa pemrograman menggunakan camelCase?

  3. EF Core GroupBy dengan Select Distinct Count

  4. Nama zona waktu dengan properti yang identik menghasilkan hasil yang berbeda ketika diterapkan pada stempel waktu

  5. Apa cara yang paling direkomendasikan untuk menyimpan waktu di PostgreSQL menggunakan Java?