Si entonces sabemos que el conjunto no es un antichain por el lema de Sperner, por lo que el La versión de decisión del problema se vuelve trivial. Pero podría ser interesante considerar el caso donde está cerca de ese valor.n>(dd/2)≈2dπd/2√n
El trabajo de Friedgut sobre el teorema de Erdős-Ko-Rado muestra que dado el vector característico de una familia de subconjuntos de , uno puede encontrar en el tiempo si es una familia que se cruza (cada dos elementos de intersecarse). En términos más generales, su método nos permite calcular
donde es alguna función conocida (específica) que no es cero solo si son disjuntos. depende solo del histograma de , donde es el indicador de .f[m]O(m2m)ff
Σ=∑x,y∈fS(x,y),
S(x,y)≥0x,yS(x,y){(xi,yi):i∈[d]}xii∈x
(Como comentario, comentamos que su método también funciona si se nos dan dos familias , y estamos interesados en . En ambos casos, debemos calcular las transformadas de Fourier-Walsh sesgadas de para una arbitraria , y luego , donde depende solo del peso de Hamming de .)f,gΣ=∑x∈f,y∈gS(x,y)pf,gp∈(0,1/2)Σ=∑xT(x)f^(x)g^(x)T(x)x
¿Cómo se relaciona todo esto con el problema en cuestión? Considere la familia
Cada es disjunto de cada . Dado que se da explícitamente, podemos calcular la contribución de estos pares a . ¿Hay más pares disjuntos? Si es disjunto de entonces y entonces . Entonces es un antichain iff
F={Si∪{x}:i∈[n]}∪{Si¯¯¯¯¯∪{y}:i∈[n]}.
Si∪{x}Si¯¯¯¯¯∪{y}S(x,y)ΣSi∪{x}Sj¯¯¯¯¯∪{y}Si∩Sj¯¯¯¯¯=∅Si⊆SjS1,…,SnΣ=∑i=1nS(Si∪{x},Si¯¯¯¯¯∪{y}).
Este algoritmo se ejecuta en tiempo , ignorando los factores polinómicos en . Cuando está cerca de , esto es significativamente mejor que . En general, obtenemos una mejora siempre que .O~(n+2d)dn2dO~(n2)n=ω(2d/2)
Dado que sabemos que existe un par que satisface , ¿cómo lo encontramos? Supongamos que dividimos todos los conjuntos en dos grupos al azar. Con una probabilidad de aproximadamente , los conjuntos y se encontrarán en el mismo grupo. Si tenemos tanta suerte, podemos ejecutar nuestro algoritmo en y , encontrar a cuál pertenecen y reducir a la mitad el número de conjuntos que debemos tener en cuenta. Si no, podemos intentarlo de nuevo. Esto muestra que con un número esperado de llamadas de oráculo a la versión de decisión, podemos encontrar un par que satisfaga .Si⊆SjS1,…,SnG1,G21/2SiSjG1G2O(logn)Si⊆Sj
También podemos desrandomizar el algoritmo. Sin pérdida de generalidad, supongamos que . En cada paso, dividimos de acuerdo con cada uno de los bits. Una de estas particiones siempre pondrá e en la misma parte, a menos que tengan polaridades opuestas; podemos probar esto explícitamente usando solo operaciones . Esto proporciona un algoritmo determinista que utiliza llamadas Oracle a la versión de decisión.n=2kkxyO(nd)O(log2n)