• Lunes 29 de Abril de 2024, 02:18

Autor Tema:  Problema: algoritmo con miles de comparaciones...  (Leído 2635 veces)

eolith

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Problema: algoritmo con miles de comparaciones...
« en: Miércoles 24 de Diciembre de 2008, 18:23 »
0
Hola! para un proyecto personal me surge un problema, les comento (más abajo están mis "ideas" para resolverlo):

Tengo una tabla digamos de 6 columnas y 30.000 filas, de tal manera que todos los elementos son enteros del 1 al 50, y además en cada fila están ordenados ascendentemente, y no puede haber ninguno repetido. Ejemplo:
Código: Text
  1.   1  15  16  25  31  44
  2.  3   5  10  12  28  41
  3.  8  14  17  28  33  49
  4. ...
  5.  

Yo lo que quiero es saber el número de elementos coincidentes que hay entre cualquier pareja de filas... Guardar ese dato de forma fácilmente accesible después ya es otro problema, pero bueno eso ya para otro día... :)

El problema en sí es sencillo, mi mayor dificultad viene a la hora de buscar una solución lo más rápida posible ya que comparar 30.000 filas con todas las demás son unos 450 millones de comparaciones solo a nivel de fila con fila... Más luego las comparaciones de los números dentro de cada pareja de filas... vamos, una burrada de comparaciones y por ello una burrada de tiempo.

Me gustaría que me orientaran sobre algun método o algún algoritmo para solucionar mi "pequeño" problema :) Muchísimas gracias por su ayuda!! :)

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Problema: algoritmo con miles de comparaciones...
« Respuesta #1 en: Miércoles 24 de Diciembre de 2008, 21:05 »
0
en las columnas se pueden repetir los numeros? ejemplo la primer columna:
Código: Text
  1. 1 2 3 4 5 6
  2. 1 3 4 5 6 7
  3. 1 4 5 6 7 8
  4.  


eolith

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Problema: algoritmo con miles de comparaciones...
« Respuesta #2 en: Jueves 25 de Diciembre de 2008, 04:51 »
0
Sí claro, de hecho lo que tengo que encontrar son las coincidencias entre filas, sea cual sea la posición de la columna. Los datos de cada fila son independientes de los de otras filas, y cada fila simplemente son 6 enteros distintos del 1 al 50 y ordenados.

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Problema: algoritmo con miles de comparaciones...
« Respuesta #3 en: Jueves 25 de Diciembre de 2008, 04:57 »
0
otra pregunta!

los numeros son generados al azar o son cargados por un usuario o de que modo!


eolith

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Problema: algoritmo con miles de comparaciones...
« Respuesta #4 en: Viernes 26 de Diciembre de 2008, 03:58 »
0
Hola, en principio los numeros provienen de unas estadísticas, más o menos digamos que al azar, pero no se en qué afecta al algoritmo...

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Problema: algoritmo con miles de comparaciones...
« Respuesta #5 en: Viernes 26 de Diciembre de 2008, 04:01 »
0
es verdad! jaja no se en que estaba pensando me lo puse a pensar! asi que en un rato volveras a saber de mi!


m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema: algoritmo con miles de comparaciones...
« Respuesta #6 en: Lunes 5 de Enero de 2009, 09:58 »
0
Yo lo haría de la siguiente manera:

Primero tendría un array de 50 elementos, que corresponden a los 50 números distintos. Iría recorriendo todas las filas y apuntando en el array en la la posición que corresponda en qué filas se encuentra dicho número. Es evidente que esta solución consume bastante memoria, pero ya se sabe el eterno dilema: el gasto de memoria es inversamente proporcional a la velocidad de ejecución.

Salud

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Problema: algoritmo con miles de comparaciones...
« Respuesta #7 en: Sábado 10 de Enero de 2009, 16:22 »
0
Cita de: "eolith"
una tabla de 6 columnas y 30.000 filas,
todos los elementos son enteros del 1 al 50,
cada fila están ordenados ascendentemente, y no puede haber ninguno repetido.

quiero saber el número de elementos coincidentes que hay entre cualquier pareja de filas...
dificultad viene a la hora de buscar una solución lo más rápida posible ya que comparar 30.000 filas con todas las demás son unos 450 millones de comparaciones solo a nivel de fila con fila...
Más luego las comparaciones de los números dentro de cada pareja de filas....


Particularmente este tipo de problemas tratándose de números enteros tiene una fácil solución, más cuando se conoce el número mayor de la serie y especialmente si es lo más pequeño posible, en tu caso concurren las 3 situaciones. La solución no lleva más de una décima de segundo para las 30.000 filas, he utuilizado algoritmos similares para varios cientos de millones y llevaba aproximadamente unos 20 minutos, creo recordar que la última vez utilicé uno de unos 10 millones y tardó unos 35 segundos (en mi equipo de casa que va a 1500Mhz.).

No obstante para ponerte un ejemplo de código debo entender exactamente que tratas de decir con: 'número de elementos coincidentes que hay entre cualquier pareja de filas', ya que es obvio que no está claramente especificado que pretendes hacer, hay un puñado de cosas diferentes y parecidas entre sí que se 'acoplan' a ese concepto de forma generalizada. Esto es:
1  tu quieres recorrer todas las filas y desechar primero todas las repetidas (que haya una única copia de cada una de ellas si/no).
2 recorrer todas las filas y encontrar todas las coincidencias de al menos 1 elemento (columna) con respecto a  1 fila concreta si/no.
3 Ordenar todas las filas en orden ascendente/descendente si/no.
4 Cuando varía un elemento     se considera una variación sólo si está en la misma posición, o en cualquier posición si/no, ...
5 ,6 , 7 etc...

Responde a esto y te expongo un par de ejemplos que resuelven lo 1º y lo 3º a la vez en sólo 1 recorrido y lo 2º y/o lo 4º en otro recorrido. Si tienes 30.000 filas un recorrido es un bucle de 30.000 filas.
«Ma non troppo»
----> ModoVacaciones = False<----