Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Menggabungkan Senarai dengan Elemen Bertindih Menggunakan Teori Graf?

Bagaimana untuk Menggabungkan Senarai dengan Elemen Bertindih Menggunakan Teori Graf?

Susan Sarandon
Lepaskan: 2024-10-21 17:14:02
asal
191 orang telah melayarinya

How to Merge Lists with Overlapping Elements Using Graph Theory?

Menggabungkan Senarai dengan Elemen Dikongsi: Pendekatan Teori Graf

Memandangkan koleksi senarai, beberapa daripadanya mengandungi elemen bertindih, objektif adalah untuk menggabungkannya ke dalam satu set senarai yang terdiri daripada set lengkap elemen unik merentas senarai asal. Sebagai contoh, pertimbangkan senarai input berikut:

L = [['a', 'b', 'c'], ['b', 'd', 'e'], ['k'], ['o', 'p'], ['e', 'f'], ['p', 'a'], ['d', 'g']]
Salin selepas log masuk

Tugasnya adalah untuk menggabungkan senarai yang berkongsi elemen biasa sehingga tiada lagi senarai boleh digabungkan. Output yang dikehendaki ialah:

L = [['a', 'b', 'c', 'd', 'e', 'f', 'g', 'o', 'p'], ['k']]
Salin selepas log masuk

Walaupun operasi boolean dan gelung while boleh digunakan, pendekatan yang lebih cekap boleh didapati dengan melihat senarai sebagai graf. Dalam perwakilan graf, setiap senarai sepadan dengan set nod yang disambungkan oleh tepi. Oleh itu, masalah itu diterjemahkan kepada mencari komponen yang disambungkan dalam graf ini.

Satu penyelesaian melibatkan penggunaan NetworkX, perpustakaan yang teguh untuk analisis graf, seperti yang ditunjukkan di bawah:

<code class="python">import networkx 
from networkx.algorithms.components.connected import connected_components

def to_graph(l):
    G = networkx.Graph()
    for part in l:
        # each sublist is a bunch of nodes
        G.add_nodes_from(part)
        # it also imlies a number of edges:
        G.add_edges_from(to_edges(part))
    return G

def to_edges(l):
    """ 
        treat `l` as a Graph and returns it's edges 
        to_edges(['a','b','c','d']) -> [(a,b), (b,c),(c,d)]
    """
    it = iter(l)
    last = next(it)

    for current in it:
        yield last, current
        last = current    

G = to_graph(l)
print(connected_components(G))
# prints [['a', 'c', 'b', 'e', 'd', 'g', 'f', 'o', 'p'], ['k']]</code>
Salin selepas log masuk

Dengan memanfaatkan kuasa daripada teori graf, NetworkX mengendalikan tugas dengan berkesan, memastikan ketepatan dan kecekapan.

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Senarai dengan Elemen Bertindih Menggunakan Teori Graf?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan