Comment fusionner des listes interconnectées à l'aide de la théorie des graphes ?

Susan Sarandon
Libérer: 2024-10-21 17:05:02
original
280 Les gens l'ont consulté

How to Merge Interconnected Lists using Graph Theory?

Fusionner des listes interconnectées : une solution basée sur des graphiques

Problème :

Considérez une liste de listes, où certaines partagent éléments communs. La tâche consiste à fusionner toutes les listes interconnectées via ces éléments partagés jusqu'à ce qu'aucune autre fusion ne soit possible.

Input: [['a','b','c'],['b','d','e'],['k'],['o','p'],['e','f'],['p','a'],['d','g']]
Expected Output: [['a','b','c','d','e','f','g','o','p'],['k']] 
Copier après la connexion

Solution :

Le problème peut être abordé sous forme de graphique problème, où les listes représentent des nœuds connectés via des éléments partagés. Le but est de retrouver les composantes connexes dans ce graphique. Nous pouvons exploiter la puissance de NetworkX, une bibliothèque Python pour l'analyse de graphiques, pour résoudre efficacement ce problème.

import networkx 
from networkx.algorithms.components.connected import connected_components

# Convert the list of lists into a graph
def to_graph(l):
    G = networkx.Graph()
    for part in l:
        # Add nodes
        G.add_nodes_from(part)
        # Add edges between nodes
        G.add_edges_from(to_edges(part))
    return G

# Generate edges from a list of nodes
def to_edges(l):
    it = iter(l)
    last = next(it)
    for current in it:
        yield last, current
        last = current

# Create the graph and find connected components
G = to_graph(l)
components = connected_components(G)

# Print the merged lists (connected components)
print(list(components))
Copier après la connexion

Résultat :

[['a', 'c', 'b', 'e', 'd', 'g', 'f', 'o', 'p'], ['k']]
Copier après la connexion

En utilisant NetworkX , cette approche résout efficacement le problème en trouvant des composants connectés, fournissant une solution robuste et correcte pour fusionner des listes basées sur des éléments partagés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!