Ho fatto qualcosa di simile qualche anno fa. Nel mio caso avevamo decine di migliaia di set e ogni set aveva una dozzina di interi. Non tutti i set hanno lo stesso numero di numeri interi. Poiché questi sono "insiemi", suppongo che l'ordine degli interi in ciascun set sia irrilevante.
Nel nostro caso, il passaggio 1 consisteva nel calcolare un hash dei numeri di ciascun set. Dovremmo quindi ordinare l'elenco degli hash e tirare fuori i duplicati.
Il passaggio 2 consisteva nel calcolare l'hash di ogni insieme meno un elemento, quindi fare lo stesso. Ad esempio,
s1 {1,2,3,4} darebbe 4 hash (2,3,4) e (1,3,4) e (1,2,4) e (1,2,3).
Creeremo una nuova lista associando tutti i 4 hash con s1 e sort / look per i duplicati. Questo avrebbe trovato la (1,3,4) corrispondenza tra s1 e s2.
Faremmo un passo simile 3 (omettendo 2 da ciascun set) e così via. Ci sono voluti alcuni esperimenti per capire dove fosse il taglio / costo. Questo è sicuramente un costoso metodo di forza bruta, ma ha funzionato bene per noi.