En la teoría de la complejidad computacional , el problema de distinción de elementos o el problema de unicidad de elementos es el problema de determinar si todos los elementos de una lista son distintos.
Es un problema bien estudiado en muchos modelos diferentes de computación. El problema puede resolverse ordenando la lista y luego verificando si hay elementos iguales consecutivos; también puede resolverse en tiempo esperado lineal mediante un algoritmo aleatorio que inserta cada elemento en una tabla hash y compara solo aquellos elementos que se colocan en la misma celda de la tabla hash. [1]
Se demuestran varios límites inferiores en la complejidad computacional reduciendo el problema de distinción de elementos al problema en cuestión, es decir, demostrando que la solución del problema de unicidad de elementos se puede encontrar rápidamente después de resolver el problema en cuestión.
El número de comparaciones necesarias para resolver el problema de tamaño , en un modelo de cálculo basado en comparación, como un árbol de decisión o un árbol de decisión algebraico , es . Aquí, invoca la notación theta grande , lo que significa que el problema se puede resolver en un número de comparaciones proporcional a (una función lineal-ítmica ) y que todas las soluciones requieren esta cantidad de comparaciones. [2] En estos modelos de cálculo, los números de entrada no se pueden usar para indexar la memoria de la computadora (como en la solución de la tabla hash), sino que solo se puede acceder a ellos calculando y comparando funciones algebraicas simples de sus valores. Para estos modelos, un algoritmo basado en la clasificación por comparación resuelve el problema dentro de un factor constante del mejor número posible de comparaciones. El mismo límite inferior se aplica también al número esperado de comparaciones en el modelo de árbol de decisión algebraico aleatorio . [3] [4]
Si los elementos del problema son números reales , el límite inferior del árbol de decisiones se extiende al modelo de máquina de acceso aleatorio real con un conjunto de instrucciones que incluye la suma, resta y multiplicación de números reales, así como la comparación y la división o el resto ("floor"). [5] De ello se deduce que la complejidad del problema en este modelo también es . Este modelo RAM cubre más algoritmos que el modelo de árbol de decisiones algebraico, ya que abarca algoritmos que utilizan la indexación en tablas. Sin embargo, en este modelo se cuentan todos los pasos del programa, no solo las decisiones.
Una máquina de Turing determinista de cinta única puede resolver el problema, para n elementos de m ≥ log n bits cada uno, en un tiempo O ( n 2 m ( m +2–log n )) , mientras que en una máquina no determinista la complejidad temporal es O ( nm ( n + log m )) . [6]
Los algoritmos cuánticos pueden resolver este problema más rápidamente, en consultas. El algoritmo óptimo es de Andris Ambainis . [7] Yaoyun Shi fue el primero en demostrar un límite inferior estricto cuando el tamaño del rango es suficientemente grande. [8] Ambainis [9] y Kutin [10] de forma independiente (y mediante diferentes pruebas) ampliaron su trabajo para obtener el límite inferior para todas las funciones.
Los elementos que aparecen más de veces en un conjunto múltiple de tamaño se pueden encontrar mediante un algoritmo basado en comparación, el algoritmo de Misra-Gries Heavy Hitters , en el tiempo . El problema de distinción de elementos es un caso especial de este problema donde . Este tiempo es óptimo según el modelo de cálculo del árbol de decisiones. [11]