La Mise En Œuvre Disjoints Ensemble Du Système En Python

Ce que j'ai à ce jour est en grande partie basée sur la page 571 de "Introduction Aux Algorithmes" par Cormen et coll.

J'ai une classe de Nœud en python qui représente un ensemble:

class Node:
    def __init__(self, parent, rank = 0):
        self.parent = parent
        self.rank = rank

Cette mise en œuvre va utiliser un List de Nœuds comme la forêt (je suis ouvert à de meilleures façons de stocker les ensembles).

Initialize() renvoie une liste de Nœuds, que je stocke dans la variable set et passer dans les autres fonctions.

Find recherches à travers la forêt pour la valeur et le rendement de l'ensemble qu'il paraît. J'ai choisi d'utiliser for s in range(len(set)): de sorte que, dans la récursivité j'ai pu réduire la liste des ensembles étant passé par set[s:].

def Find(set, value):
    for s in range(len(set)):
        if value != set[s].parent:
            set[s].parent = Find(set[s:], set[s].parent)
        return set[s]

Merge fusionne jeux dans la forêt par les trouver et de les promouvoir au rang plus élevé ensemble.

def Merge(set, value1, value2):
    set_val_1 = Find(set, value1)
    set_val_2 = Find(set, value2)
    if set_val_1.rank > set_val_2.rank:
        set_val_2.parent = set_val_1
    else:
        set_val_1.parent = set_val_2
        if set_val_1.rank == set_val_2.rank:
            set_val_2.rank += 1

J'obtiens des erreurs quand j'en fais Finds et Merges, à savoir Find ne retourne pas le bon jeu, et donc je ne sais pas si Merge fonctionne correctement. J'apprécierais un peu d'aide pour s'assurer les fonctions sont mises en œuvre correctement.

OriginalL'auteur Jordan | 2011-02-23