¿Cuál es la forma más flexible de diseñar un programador para la finalización automática de tareas, que también es práctica de implementar?

Supongamos que tiene un número (C) de gatos y un número (M) de ratones y un número (H) de agujeros en los que los gatos pueden encontrar ratones. Esto es solo para generalizar un problema y, en todo caso, lo que sigue no tiene sentido en el mundo real, recuerde que es solo para dar un ejemplo tonto para que tengamos algo de qué hablar.

Suponiendo que se necesita una cantidad no despreciable de tiempo de CPU para verificar si cat c puede encontrar el mouse m en el agujero h, ¿cómo diseñaría una base de datos para realizar un seguimiento de las combinaciones que ya ha verificado? ¿Y si necesita priorizar la comprobación de determinadas combinaciones? ¿Qué sucede si desea poder programar el procesamiento de ratones M1 a M5 con gatos C4 a C9 y agujeros H3 a H7? ¿Qué sucede si primero desea procesar esto en orden de agujeros (como en, el agujero H3 se verifica para todas las combinaciones de ratones y gatos antes del agujero H4) o gatos primero (C4 para todas las combinaciones de otros antes de C5), etc.?

¿Existe alguna forma muy inteligente de generalizar esto a N número de cosas para combinar? Por ejemplo, ¿qué pasaría si tuviéramos que agregar algunos perros? ¿Existe alguna forma inteligente de permitir una priorización de programación complicada sin ser demasiado complicado? ¿Qué debería leer para solucionar este problema?

El diseño en el que estoy pensando ahora es algo como esto:

tabla: columnas de tareas_programadas: primer_gato, ultimo_gato, primer_mouse, ultimo_mouse, primer_hoyo, ultimo_hoyo, completado ?, cat_order (es decir, 1), mouse_order (es decir, 2), hole_order (es decir, 3)

las columnas _order indicarían qué bucle es el más externo, esencialmente.

table: complete_tasks columnas: gato, ratón, agujero, when_completed

o posiblemente ...

table: complete_tasks columnas: first_cat, last_cat, first_mouse, last_mouse, first_hole, last_hole que tendría first_cat = last_cat, first_mouse = last_mouse, etc. inicialmente y luego agrupar automáticamente filas adyacentes para buscar más rápidamente a través de qué tareas ya se han completado para evitar haciendo trabajo redundante.

¿Cuál sería una buena forma de generalizar esto? Quizás el programa planificador debería crear una nueva tabla si agregamos más dimensiones (es decir, perros) a la mezcla, o quizás la estructura de la tabla debería hacerse más flexible. Por ejemplo, en lugar de first_cat, last_cat, ..., habría una tabla relacionada "entity_to_cycle" (o algo así) que tendría columnas: entidad, primero, último.

De todos modos, ¿qué piensas sobre esto?

También estoy etiquetando este PHP / MySQL porque los usaré para implementar esto. Si esto afecta su respuesta, tome nota de dónde se ve afectada su respuesta.

Última nota: si hay varios cientos de miles de tareas por completar, entonces parece que dividir las tablas (generalizar y normalizar) haría que la búsqueda / inserción consumiera mucho más tiempo ...

preguntado el 28 de agosto de 11 a las 02:08

Si tres gatos tardaron tres minutos en matar a tres ratas, ¿cuánto tardarían 100 gatos en matar 100 ratas? ;pag -

2 Respuestas

bueno, parte de esta pregunta creo que se responde así:

cat
-----
cat_id
name

mouse
------
mouse_id
name

hole
------
hole_id
name

mouse_hole
-----------
moue_hole_id
mouse_id
hole_id

haga esta parte en la memoria o guarde los valores en una estructura como:

cat_task
---------
cat_id
mouse_hole_id
status(?)

Respondido 28 ago 11, 06:08

Aquí tienes una idea: almacena una tabla con columnas

Cat(Int), Mouse(Int), Hole(Int), Found(Bool)

y cree un índice en Gato, Ratón, Agujero, (Gato, Ratón), (Gato, Agujero), (Ratón, Agujero).

De esta manera, puede buscar de manera eficiente qué RatonesRatones y agujeros que has explorado para un gato determinado, o qué agujeros has explorado para un ratón + gato determinado, etc.

Respondido 28 ago 11, 06:08

Correcto, un índice de varias columnas o varios índices de varias columnas definitivamente ayuda. Me pregunto si hay alguna forma de generalizar esto en el caso en el que queramos agregar, digamos, perros y leones marinos. ¿Quizás lo mejor que puede hacer es mantener la tabla sin normalizar pero generar una tabla diferente con diferentes índices dependiendo de la tarea a programar? - Anónimo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.