2012-09-12 9 views

risposta

17

Il confronto tra i set è implementato dallo function set_richcompare in setobject.c, line 1848. Vedrete che l'uguaglianza è implementato come segue:

  1. Se i set non hanno la stessa dimensione, restituire false.

  2. Se entrambi gli insiemi sono stati sottoposti a hash e gli hash sono diversi, restituire false.

  3. Chiama set_issubset.

Il test sottoinsieme per due set si presenta in questo modo:

while (set_next(so, &pos, &entry)) { 
    int rv = set_contains_entry((PySetObject *)other, entry); 
    if (rv == -1) 
     return NULL; 
    if (!rv) 
     Py_RETURN_FALSE; 
} 
Py_RETURN_TRUE; 

Vedrai che funziona mediante iterazione su tutti gli elementi del primo set e poi guardando ognuno nell'altro impostato. Quindi (a meno che non ci siano molte collisioni hash) questo è lineare nella dimensione del primo set.

Problemi correlati