¿Cuál es la diferencia entre un algoritmo en línea y fuera de línea?


Estos términos fueron usados en mi libro de texto de estructuras de datos, pero la explicación fue muy concisa y poco clara. Creo que tiene algo que ver con cuánto conocimiento tiene el algoritmo en cada etapa de la computación.

(Por favor, no enlace a la página de Wikipedia: ya lo he leído y todavía estoy buscando una aclaración. Una explicación como si tuviera doce años y / o un ejemplo sería mucho más útil.)

Author: nbro, 2012-07-16

7 answers

Wikipedia

¿Qué, exactamente, no entiendes cuando miras la página de Wikipedia?

En informática, un algoritmo en línea es aquel que puede procesar su entrada pieza por pieza en forma de serie, es decir, en el orden en que el la entrada se alimenta al algoritmo, sin tener la entrada completa disponible desde el principio. En contraste, se da un algoritmo fuera de línea todos los datos del problema desde el principio y se requiere para producir un respuesta que resuelve el problema a mano. (Por ejemplo, selección ordenar requiere que se proporcione la lista completa antes de que pueda ordenarla, mientras que el tipo de inserción no lo hace.)

Permítanme ampliar lo anterior:

Un algoritmo sin conexión requiere toda la información ANTES de que comience el algoritmo. En el ejemplo de Wikipedia, selection sort es offline porque el paso 1 es Find the minimum value in the list. Para hacer esto, necesita tener toda la lista disponible-de lo contrario, ¿cómo podría saber cuál es el mínimo valor es? No puedes.

Insertion sort, por el contrario, está en línea porque no necesita saber nada sobre qué valores ordenará y la información se solicita MIENTRAS se ejecuta el algoritmo. En pocas palabras, puede obtener nuevos valores en cada iteración.

Todavía no está claro?

Pensar en los siguientes ejemplos (para niños de cuatro años!). David te pide que resuelvas dos problemas.

En el primer problema, él dice:

" Voy a dar dos bolas de diferentes masas y necesita déjalos caer al mismo tiempo desde una torre.. sólo para asegurarnos de que Galileo tenía razón. No puedes usar un reloj, sólo lo veremos."

introduzca la descripción de la imagen aquí

Si te diera solo una bola, probablemente me mirarías y te preguntarías qué se supone que estás haciendo. Después de todo, las instrucciones eran bastante claras. Necesitas ambas bolas al principio del problema. Este es un algoritmo offline.

Para el segundo problema, David dice

" Bien, eso fue bastante bien, pero ahora necesito que sigas adelante y patees un par de pelotas en un campo."

introduzca la descripción de la imagen aquí

Sigo adelante y te doy la primera bola. Patéalo. Luego te doy la segunda bola y la pateas. También podría darte una tercera y cuarta bola (sin que ni siquiera supieras que te las iba a dar). Este es un ejemplo de un algoritmo en línea. De hecho, podrías estar pateando pelotas dia.

Espero que esto esté claro: D

 58
Author: David Titarenco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-15 22:27:57

Un algoritmo en línea procesa la entrada solo pieza por pieza y no sabe sobre el tamaño real de la entrada al principio del algoritmo.

Un ejemplo de uso frecuente es la programación: tiene un conjunto de máquinas y una carga de trabajo desconocida. Cada máquina tiene una velocidad específica. Desea eliminar la carga de trabajo lo más rápido posible. Pero como no conoce todas las entradas desde el principio (a menudo puede ver solo la siguiente en la cola), solo puede estimar qué máquina es la mejor para el entrada actual. Esto puede resultar en una distribución no óptima de su carga de trabajo, ya que no puede hacer ninguna suposición sobre sus datos de entrada.

Por otro lado, un algoritmo offline solo funciona con datos de entrada completos. Toda la carga de trabajo debe conocerse antes de que el algoritmo comience a procesar los datos.

Ejemplo:

Workload:
   1. Unit (Weight: 1)
   2. Unit (Weight: 1)
   3. Unit (Weight: 3)
Machines:
   1. Machine (1 weight/hour)
   2. Machine (2 weights/hour)

Possible result (Online):
   1. Unit -> 2. Machine  // 2. Machine has now a workload of 30 minutes
   2. Unit -> 2. Machine  // 2. Machine has now a workload of one hour
  either
   3. Unit -> 1. Machine  // 1. Machine has now a workload of three hours
  or 
   3. Unit -> 2. Machine  // 1. Machine has now a workload of 2.5 hours

 ==> the work is done after 2.5 hours

Possible result (Offline):
   1. Unit -> 1. Machine  // 1. Machine has now a workload of one hour
   2. Unit -> 1. Machine  // 1. Machine has now a workload of two hours
   3. Unit -> 2. Machine  // 2. Machine has now a workload of 1.5 hours

 ==> the work is done after 2 hours

Tenga en cuenta que el mejor resultado en el algoritmo fuera de línea solo es posible ya que no usamos la mejor máquina desde el principio. Ya sabemos que habrá una unidad pesada (unidad 3), por lo que esta unidad debe ser procesada por la máquina más rápida.

 5
Author: Zeta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-15 22:23:37

Un algoritmo fuera de línea sabe todo sobre sus datos de entrada en el momento en que se invoca. Un algoritmo en línea, por otro lado, puede obtener partes o todos sus datos de entrada mientras se está ejecutando.

 2
Author: ltjax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-15 22:07:33

An se dice que el algoritmo está en línea si no lo hace conozca los datos en los que se ejecutará previamente. Un algoritmo sin conexión puede ver todos los datos por adelantado.

 0
Author: Jainendra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-16 04:33:53

Un algoritmo en línea es aquel que recibe una secuencia de solicitudes y realiza una acción inmediata en respuesta a cada solicitud.

Por el contrario,un algoritmo fuera de línea realiza una acción después de que se toman todas las solicitudes.

Este artículo de Richard Karp da más información sobre algoritmos en línea y fuera de línea.

 0
Author: getsuga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-15 06:55:14

Cache Miss problem: En un sistema informático, la caché es una unidad de memoria utilizada para evitar el desajuste de velocidad entre el procesador más rápido y la memoria primaria más lenta. El objetivo de usar caché es minimizar el tiempo de acceso promedio manteniendo algunas páginas a las que se accede con frecuencia en la caché. El supuesto es que estas páginas pueden ser solicitadas por el procesador en un futuro próximo. Por lo general, cuando el procesador realiza una solicitud de página, la página se obtiene de la página principal o secundaria la memoria y una copia de la página se almacenan en la memoria caché. Supongamos que la caché está llena, entonces el algoritmo implementado en la caché tiene que tomar la decisión inmediata de reemplazar un bloque de caché sin conocimiento de futuras solicitudes de página. Surge la pregunta: ¿qué bloque de caché debe reemplazarse? (En el peor de los casos, puede suceder que reemplace un bloque de caché y en el siguiente momento, el procesador solicite el bloque de caché reemplazado). Por lo tanto, el algoritmo debe estar diseñado de tal manera que tome decisión inmediata a la llegada de una solicitud entrante sin conocimiento previo de toda la secuencia de solicitudes. Este tipo de algoritmos se conocen como ALGORITMO EN LÍNEA

 0
Author: Debasis Dwibedy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-07 13:02:17

Podemos diferenciar los algoritmos offline y online en función de la disponibilidad de las entradas antes del procesamiento del algoritmo.

Algoritmo fuera de línea: Toda la información de entrada está disponible para el algoritmo y procesada simultáneamente por el algoritmo. Con el conjunto completo de información de entrada, el algoritmo encuentra una manera de procesar eficientemente las entradas y obtener una solución óptima.

Algoritmo en línea: Las entradas vienen sobre la marcha, es decir, todas las entradas la información no está disponible para el algoritmo simultáneamente más bien parte por parte como una secuencia o en el tiempo. Sobre la disponibilidad de una entrada, el algoritmo tiene que tomar una decisión inmediata sin ningún conocimiento de la información de entrada futura. En este proceso, el algoritmo produce una secuencia de decisiones que tendrán un impacto en la calidad final de su rendimiento general.

Eg: Enrutamiento en la red de comunicación:

Los paquetes de datos de diferentes fuentes llegan a el router más cercano. Hay más de un enlace de comunicación conectado al router. Cuando un nuevo paquete de datos llega al enrutador, entonces el enrutador tiene que decidir inmediatamente a qué enlace se enviará el paquete de datos. (Supongamos que todos los enlaces se enrutan al destino, todos los enlaces tienen el mismo ancho de banda, todos los enlaces son la parte del camino más corto hacia el destino). Aquí, el objetivo es asignar cada paquete de datos entrante a uno de los enlaces sin conocer los paquetes de datos futuros de tal manera que la carga de cada enlace será equilibrada. Ningún enlace debe estar sobrecargado. Este es un problema de equilibrio de carga.

Aquí, el planificador implementado en el router no tiene idea acerca de los futuros paquetes de datos, pero tiene que tomar la decisión de programación para cada paquete de datos entrante. En contraste, un programador fuera de línea tiene un conocimiento completo sobre todos los paquetes de datos entrantes, luego asigna eficientemente los paquetes de datos a diferentes enlaces y puede equilibrar de manera óptima la carga entre diferentes enlaces.

 0
Author: Debasis Dwibedy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-07 13:05:34