DCTLib tiene razón, pero olvida las matemáticas por un segundo.
Por su lógica, entonces, n -ary debería ser el más rápido. Pero si lo piensa, n -ary es exactamente igual a una búsqueda de iteración regular (solo iterando a través de la lista 1 por 1, pero en orden inverso). Primero, selecciona el último (o penúltimo) elemento de la lista y compara ese valor con tu valor de comparación. Luego, elimina ese elemento de su lista y luego elige el último elemento de la nueva lista, que es el penúltimo valor de la matriz. Cada vez, solo estaría eliminando 1 valor a la vez hasta que encuentre su valor.
En cambio, debería pensarlo así: ¿cómo elimino la mayoría de los valores de la lista en cada iteración? En una búsqueda binaria, siempre elimina la mitad de la lista. En una búsqueda ternaria, existe la posibilidad (33.33% de probabilidad, en realidad) de que pueda eliminar 2/3 de la lista, pero hay una posibilidad aún mayor (66.66%) de que solo elimine 1/3 de la lista. para calcular O (n), debe mirar el peor de los casos, que es 1/3, menos de 1/2. A medida que te acercas más y más a n, empeora aún más.
No solo se mejorará el peor de los casos con la búsqueda binaria, sino que también se mejorará su tiempo promedio . Mirando el valor esperado (qué porción de la lista podemos eliminar en promedio), usamos esta fórmula:
(P_lower) x (parte que podemos eliminar si es inferior) + (P_higher) x (parte que podemos eliminar si es superior) = E
Para la búsqueda binaria, esto es .5x.5 + .5x.5 = .5 (siempre eliminamos la mitad de la lista). Para búsquedas ternarias, este valor es .666x.333 + .333x.666 = 0.44, o en cada paso, es probable que solo eliminemos el 44% de la lista, por lo que es menos eficiente que la búsqueda binaria, en promedio. Este valor alcanza su punto máximo en 1/2 (la mitad de la lista) y disminuye a medida que se acerca a n (iteración inversa) y 0 (iteración regular).
Ok, entonces mentí ... hay un poco de matemática involucrada, ¡pero espero que ayude!