El algoritmo depende en gran medida de la naturaleza de la entrada.
Si la entrada consiste en $n$ enteros de algún tamaño acotado, entonces podemos considerar cada entero como un único símbolo de un alfabeto posiblemente bastante grande, pero finito. Sea $k$ símbolos del alfabeto; a continuación $k$ es una constante fija para cualquier entrada, y cualquier entrada de longitud $>k$ contiene un duplicado por el principio de encasillamiento.
Por ejemplo, si la entrada es una matriz de cualquier longitud que contenga $32$ -enteros de bits, entonces $k=2^{32}.$
El algoritmo para este tipo de problema comienza contando hasta $k+1$ enteros en la entrada. Si el recuento alcanza $k+1,$ el algoritmo devuelve "existe un duplicado"; en caso contrario, realiza hasta $k(k-1)$ comparaciones (el método de la fuerza bruta). Así que en el peor de los casos tenemos $k+1$ pasos de recuento y $k(k-1)$ comparaciones; pero como $k$ es una constante fija, el tiempo de ejecución del algoritmo está acotado, y todo el algoritmo se ejecuta en el peor de los casos $O(1)$ tiempo. (La constante de tiempo para ese $O(1)$ tiempo puede ser bastante grande).
Un tipo de entrada más interesante permite que los enteros de entrada sean cadenas de dígitos de cualquier longitud. Ahora tenemos que decir lo que significa tener una entrada de tamaño $n$ una interpretación razonable es que $n$ es la suma de las longitudes de todas las cadenas (o la suma de las longitudes más el número de cadenas, para permitir la demarcación de las cadenas). Entonces la solución de Henning Makholm (utilizando un trie) se ejecuta en $O(n)$ tiempo en el peor de los casos, lo que implica que tiene $O(n)$ tiempo previsto.
Otra interpretación posible es que permitimos que los enteros sean cadenas de longitud arbitraria, pero suponemos que hay alguna distribución de probabilidad que gobierna el valor de cada entero. Es decir, si $m$ es un número entero dado, entonces hay alguna probabilidad $P(m)$ que el siguiente entero de entrada será igual a $m.$
En esa interpretación hay una probabilidad fija $P_0$ que dos enteros seleccionados al azar de la entrada serán iguales. La longitud esperada de un entero (un límite en el tiempo esperado necesario para comparar dos enteros) también es un valor fijo. Si la primera pasada del algoritmo se limita a comparar el primer y el segundo número entero de la entrada, luego el tercero y el cuarto, luego el quinto y el sexto, etc., a medida que la longitud de la entrada aumenta hasta el infinito la probabilidad de encontrar una coincidencia se aproxima a $1$ y el número esperado de comparaciones antes de encontrar la coincidencia (cuando la hay) se aproxima a una constante.
El número esperado de comparaciones cuando comparamos todos pares posibles de enteros de entrada (hasta el primer par coincidente) es un poco más complicado de tratar, ya que no todos los pares se distribuyen independientemente, pero quizá se pueda demostrar que también está acotado como $n$ llega a infinito; si es así, el tiempo de ejecución esperado de todo el algoritmo es $O(1).$
0 votos
Gracias por la mención; lo he arreglado
0 votos
¿Cuáles son los elementos de su matriz de entrada? Leí tu pregunta como si fueran números enteros arbitrarios. ¿O son enteros acotados?
0 votos
@RobArthan ellos sólo entero positivo sin límite
0 votos
@j4nbur53 sí, lo siento por la falta de claridad
0 votos
Así que para $n=2$ quieres un algoritmo que pueda determinar si dos enteros de tamaño arbitrario son iguales en tiempo constante? Evidentemente, no es posible.
0 votos
@HenningMakholm Quiero decir que el mejor caso se produce cuando los dos primeros enteros son duplicados, entonces el algoritmo termina al hacer la primera comparación; entonces no importa lo larga que sea la matriz, el mejor es el tiempo constante; eso es lo que yo entiendo por mejor caso de tiempo de ejecución.
1 votos
@Ellery: Sí, pero la suposición por defecto cuando hablamos de complejidad es que nos interesa la peor complejidad del caso. Y en el peor de los casos, cuando estás comparando dos números enteros, puede que necesites leer toda la entrada antes de que puedas estar seguro de si son iguales o no.
0 votos
@HenningMakholm Ah, ya veo, pero suponemos que la entrada está en la memoria; por fuerza bruta, el algoritmo dominado por el número de comparaciones.
0 votos
@ElleryL: Eso no importa. Si la entrada está en memoria, sigues necesitando inspeccionar cada bit de la entrada antes de poder estar seguro de si los dos números son iguales o no. No hay forma de evitarlo. No estoy hablando de E/S, simplemente del hecho de que tu algoritmo necesita procesar cada bit de la entrada - si no lo hace, un adversario será capaz de construir una entrada que lo engañe.
0 votos
Como dices al final, no tienes suficiente información para averiguar la probabilidad de que la primera comparación "tenga éxito" y termine el algoritmo. Se necesitan más suposiciones para imponer una distribución de probabilidad y obtener el tiempo de ejecución "esperado".