Mediana de un arreglo
Encontrar la mediana de un arreglo (con impar) es un problema para el cual no se conoce el número exacto de comparaciones. Se conoce una cota inferior de y una cota superior de . Mostraremos una cota inferior relativamente sencilla de comparaciones. Hablaremos de la mediana que entregará el algoritmo aunque éste no la conozca hasta el final.
Consideraremos dos tipos de comparaciones, cruciales y no cruciales. Conceptualmente, una comparación resulta crucial para un elemento si es la que nos permite conocer la relación entre y . Más precisamente, consideremos la historia de las comparaciones que realizó el algoritmo para determinar , y definamos un grafo con un nodo por elemento. Dibujemos una arista entre y los elementos que se compararon directamente contra , roja si y azul si . También pintemos a de rojo o azul, respectivamente. Para todo nodo rojo , dibujemos aristas rojas hacia elementos que aún no tengan color y se hayan comparado directamente contra . Para todo nodo azul , dibujemos aristas azules hacia elementos que aún no tengan color y se hayan comparado directamente contra . En ambos casos, pintemos a de rojo o azul, respectivamente. Continuemos así hasta pintar todas las aristas y elementos posibles. Todas las aristas pintadas corresponden a las comparaciones cruciales.
El grafo formado por las aristas rojas y azules no tiene ciclos. Si no resulta conexo, el algoritmo no puede conocer la mediana, pues implica que existe un elemento no pintado, por lo cual el algoritmo nunca hizo una comparación que le permitiera determinar si ó . El adversario puede entonces decidir si ó , haciendo que la respuesta sea incorrecta. Por lo tanto, se necesitan al menos comparaciones cruciales.
Mostraremos que, además, el algoritmo debe haber realizado al menos comparaciones no cruciales, cuyas aristas no están en el grafo porque resultan ser para un , o bien para un . Para esto, consideremos un adversario que responde a las comparaciones del algoritmo mediante asignarles valor a los elementos cuando los ve por primera vez. Antes de ello, determinará un valor para quien será la mediana, sin asignárselo a ningún elemento en particular. Modelaremos el avance del conocimiento del algoritmo partiendo los elementos en tres conjuntos:
- es el cardinal del conjunto de los elementos que nunca han sido comparados (no confundir con el arreglo );
- es el cardinal del conjunto de los elementos que se han comparado alguna vez y se les asignó un valor mayor a ; y
- es el cardinal del conjunto de los elementos que se han comparado alguna vez y se les asignó un valor menor a .
El algoritmo no conoce la mediana hasta el final (es decir, no sabe qué tipo de comparación está realizando). Cuando se comparen dos elementos de , el adversario les dará a uno un valor mayor y a otro un valor menor que . Cuando se compare un elemento de con uno de , le asignará al de un valor menor a . Cuando se compare un elemento de con uno de , le asignará al de un valor mayor a . Note que en estos tres casos, la comparación resultará no ser crucial. Cuando se comparen elementos de ó , responderá según los valores que ya ha asignado (estas comparaciones podrían ser cruciales).
Con estas decisiones del adversario, la siguiente tabla muestra cómo progresa el estado según los elementos que se comparan:
Si llegamos a , el adversario asignará a todos los elementos aún no comparados (es decir, les dará valores menores a ), salvo uno que se reservará para asignarle el valor . Similarmente, si llegamos a , el adversario asignará a todos los elementos aún no comparados menos uno. Con ello, resultará ser la mediana, como era el plan del adversario.
De la tabla se deduce que, como partimos de y continuamos hasta que ó son , necesitamos al menos ese número de comparaciones de la primera fila de la tabla, todas las cuales son no cruciales. Se deduce entonces la cota inferior de comparaciones para encontrar la mediana.
Se puede usar el mismo razonamiento para demostrar que encontrar el -ésimo elemento de un conjunto requiere comparaciones, si bien esta cota no es ajustada.