3 votos

¿Existe una función más general que DuplicateFreeList() en GAP?

La función DuplicateFreeList en GAP, que es la misma que la función Unique toma una lista y devuelve todos los elementos de esa lista con los duplicados eliminados. Mi problema es que esta función comprueba los duplicados utilizando = mientras que yo quiero eliminar los duplicados de una lista hasta el isomorfismo. ¿Existe una función GAP como DuplicateFreeList que elimina los duplicados utilizando una función binaria arbitraria de verdadero/falso? O si no es así, ¿hay alguna manera de escribir una envoltura alrededor de DuplicateFreeList que modifica el = ¿operador?

3voto

ahulpke Puntos 2612

No existe tal función, pero teniendo en cuenta lo patético que resulta el código real de Unique es, no es difícil escribir una función de este tipo:

UniqueByFunction:=function ( list,fun )
local l,i;
  l:= [];
  for i in list do
    if ForAll(l,x->fun(x,i)=false) then
      Add(l,i);
    fi;
  od;
  return l;
end;

(toma una lista y una función de prueba de igualdad que devuelve true o false cuando se le dan dos objetos como argumentos. Es decir UniqueByFunction(list,\=); tiene el mismo efecto que Unique(list); .)

Advertencia: En una lista de longitud $n$ que hará $n(n-1)$ pruebas de isomorfismo, cada una de las cuales suele ser costosa. Por lo tanto, en la práctica, lo más habitual es dividir la lista según los invariantes de isomorfismo adecuados y, a continuación, ejecutar las pruebas sólo dentro de cada celda.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X