Un algoritmo de transmisión es un algoritmo para procesar una secuencia de datos en uno o en un pequeño número de pases.
Los algoritmos de flujo resuelven problemas en los que los datos llegan secuencialmente y en gran volumen. Un ejemplo es el análisis del tráfico de red del lado del enrutador . Estos problemas imponen restricciones naturales sobre la memoria disponible (mucho menos que el tamaño de los datos de entrada) y el tiempo de procesamiento de cada elemento de la secuencia en los algoritmos de transmisión. A menudo, el procesamiento de datos solo es posible en una pasada.
Las restricciones estrictas de tiempo y memoria a menudo hacen que sea imposible resolver exactamente el problema en estudio. Los algoritmos de flujo suelen ser probabilísticos y dan una aproximación a la respuesta exacta.
Aunque tales algoritmos se consideraron en los trabajos de la primera mitad de la década de 1980 [1] [2] , el concepto de un algoritmo de transmisión se formalizó por primera vez en el trabajo de Alon , Matias ( ing. Yossi Matias ) y Szegedi ( ing. Mario Szegedy ) en 1996 [3] . En 2005, los autores recibieron el Premio Gödel por su contribución fundamental a los algoritmos de transmisión .
En 2005, se introdujo el concepto de un algoritmo de semitransmisión [ 4 ] como algoritmos que procesan el flujo entrante de forma constante o logarítmica .[ aclarar ] número de pases.
En el modelo de flujo de datos, se considera que parte o la totalidad del conjunto de datos de entrada que deben procesarse no está disponible para el acceso aleatorio : los datos de entrada llegan de forma secuencial y continua en uno o más flujos. Los flujos de datos se pueden representar mediante una secuencia ordenada de puntos ("actualizaciones"), a los que se puede acceder en orden y solo una vez o un número limitado de veces.
Muchas publicaciones de subprocesos consideran la tarea de las estadísticas informáticas sobre una distribución de datos que es demasiado grande para un almacenamiento eficiente.[ especificar ] . Para esta clase de problemas, se supone que el vector (inicializado en cero ) tiene una cierta cantidad de "actualizaciones" en el hilo. El objetivo de tales algoritmos es calcular funciones utilizando significativamente menos espacio del que requeriría una representación completa del vector . Existen dos modelos generales para actualizar dichos datos: " caja registradora " y "torniquete" ( ing . torniquete ).
En el modelo "cash", cada "actualización" se representa en el formulario y se modifica el vector de tal manera que aumenta en algún número entero positivo . Un caso especial es el caso (solo se permite insertar una unidad).
En el modelo "torniquete", cada "actualización" se representa en el formulario y se modifica el vector de tal manera que aumenta en algún número entero positivo o negativo . En un modelo estricto, en un momento dado no puede ser negativo.
En varias fuentes, también se considera el modelo de "ventana deslizante". En este modelo, la función de interés se calcula sobre una ventana de dimensionalidad limitada a partir de los datos del flujo, los elementos del final de la ventana no se tienen en cuenta hasta que los nuevos datos del flujo ocupan su lugar.
Estos algoritmos consideran no solo cuestiones relacionadas con las características de frecuencia de los datos, sino también una serie de otras. Muchos problemas de gráficos se resuelven bajo las condiciones de que la matriz de adyacencia del gráfico se cargue de antemano en un orden desconocido. A veces, por el contrario, es necesario resolver el problema de estimar el orden de los datos, por ejemplo, para contar el número de valores inversos en el flujo y encontrar la secuencia creciente más grande.
Las principales características de los algoritmos de transmisión:
Estos algoritmos tienen mucho en común con los algoritmos en línea , ya que el algoritmo debe tomar una decisión antes de que todos los datos estén disponibles, pero existen diferencias. En particular, los algoritmos en línea tienen la capacidad de retrasar la toma de decisiones hasta que llega un grupo de puntos en una secuencia de datos, mientras que los algoritmos en línea deben tomar decisiones a medida que llega cada nuevo punto en una secuencia.
Si el algoritmo es aproximado, la precisión de la respuesta es otro indicador. La precisión de un algoritmo a menudo se representa como un valor , lo que significa que el algoritmo logrará menos errores con una probabilidad de .
Los algoritmos de flujo son de gran importancia en las tareas de monitoreo y administración de redes informáticas, por ejemplo, por medio de ellos es posible prevenir rápidamente desbordamientos (seguimiento de flujos gigantes estimación del número y duración esperada de los desbordamientos) [ ] Además, los algoritmos de transmisión se pueden usar en bases de datos, por ejemplo, para estimar el tamaño después de una operación de unión de tablas .
El momento de frecuencia en el vector se define como .
El primer momento es la simple suma de las frecuencias (es decir, el número total). El segundo punto es útil para calcular parámetros estadísticos de los datos, como el coeficiente de Gini . definida como la frecuencia del elemento que ocurre con mayor frecuencia.
También se estudian las cuestiones de estimación de momentos de frecuencia.
La tarea es encontrar el elemento que ocurre con más frecuencia en el flujo de datos. Aquí se aplican los siguientes algoritmos:
La tendencia en un flujo de datos generalmente se realiza en el siguiente orden: los elementos más frecuentes y sus frecuencias se determinan en función de uno de los algoritmos anteriores.[ aclarar ] <--¿algoritmos para encontrar elementos pesados? y si esta sección se mueve hacia abajo?-->, y luego el mayor aumento en relación con el punto anterior en el tiempo se observa como una tendencia. Para ello se utiliza una media móvil exponencial y varias normalizaciones [6] . Utiliza el espacio O(ε² + log d) y la actualización del peor de los casos O(1) para una función hash universal de la familia de funciones hash independientes de r-smart con r = Ω(log(1/ε)/log log(1 / ε))[ especificar ] .
Una estimación de entropía empírica sobre un conjunto de frecuencias se define como , donde [7] .
La tarea principal del aprendizaje automático en línea es entrenar un modelo (por ejemplo, un clasificador) en un solo paso a través del conjunto de entrenamiento; El hashing predictivo y el gradiente para
Contar el número de elementos únicos en el flujo de datos (momento ) es otra[ aclarar ] un problema bien estudiado. El primer algoritmo fue propuesto por Flajolet y Martin [2] . En 2010, se encontró un algoritmo asintóticamente óptimo [8] .