Łączenie powiązanych rekordów w mapę

0

Załóżmy, że mam strukturę w bazie:

+---------+---------+
|KOLUMNA_1|KOLUMNA_2|
+---------+---------+
|A        |B        |
|B        |C        |
|D        |E        |
+---------+---------+

I chciałbym te dane umieścić w mapie w formie:

A = {B, C}
B = {A, C}
C = {B,C}
D = {E}
E = {D}

Klucz A ma wartość {B,C}. B jest w liście ponieważ w pierwszym rekordzie A jest połączony z B, oraz C jest w liście ponieważ C jest połączony z B w drugim rerkodzie. Czyli istnieje pośrednie połączenie między A i C poprzez B. W przypadku D i E takiego połączenia nie ma dlatego jako wartość mają 1elementową listę. Czy istnieje jakiś gotowy algorytm, który mi to ogarnie?

1

Szukaj pod "tree traversal". Chyba, że składujesz to w DB to wtedy się to robi poprzez CTE i rekursywne zapytanie.

2

Czy istnieje jakiś gotowy algorytm, który mi to ogarnie?

Jest kategoria narzędze które to ogarnią. Nazywa się to baza grafowa, np Neo4j.
Można jeszcze przedstawić to jako dane dla jakiegoś Prologa embedded i on wyliczy wszystkie możliwe drogi na podstawie odcinków. Ale jeśli istnieją cykle to prawdopodobnie zabiją interpreter Prologa

UPDATE
No albo po prostu wyciągnąć to jako mapę dwustronną {A ->B, B -> A} i mozolnie budować ten graf.

hauleth napisał(a):

Szukaj pod "tree traversal"

Moja wyobraźnia dziś szwankuje, bo drzewa do przejścia tu nie widzę :D bardziej to drzewo trzeba dopiero zbudować z odcinków. A w zasadzie graf

2

@mikew: Ja bym wyrzucil wierzcholki posrednie i trzymal to normalnie, w liscie sasiedztwa. Jak chcesz miec informacje czy jest polaczenie miedzy dwoma wierzcholkami to moze union-find

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0