Algoritmos para eliminar columnas por diferencias
Re: Algoritmos para eliminar columnas por diferencias
Sólo quería exponer mi manera de enfocar el problema, para dar un poco de luz, como programador experimentado en C#, y que tiene desarrollado un sistema de quinielas, sobre el tema de guardar y acceder a columnas de forma óptima.
Yo lo que hago es utilizar un valor entero (int de 32bits) para cada columna, en Visual Basic creo que se llama "Integer" o "Int32", ya que el procesador es lo que maneja más rápido.
Mi sistema representa cada una de esas columnas, mediante una clase indizable. Si el lenguaje de programación que utilizáis no dispone de clases indizables se puede hacer de una manera más rudimentaria mediante una función que le llegue, el int de la columna i el índice (0 a 13 por ejemplo) del signo que se quiere obtener.
Es decir, es como si transformaras un valor entero en un vector de 14 casillas. La gracia del tema es utilizar operadores lógicos (que son los más veloces para tratar números) con el índice de casilla que le llega para obtener el signo correcto, de alguna forma "desencriptar" en cualquier momento el int y obtener cualquiera de los 14 signos de la columna.
No explico como se hace exactamente, simplemente doy las pistas, tampoco digo que sea la mejor forma de hacerlo, es simplemente la que yo utilizo y os aseguro que es muy rápida y ocupa poca memoria.
Yo lo que hago es utilizar un valor entero (int de 32bits) para cada columna, en Visual Basic creo que se llama "Integer" o "Int32", ya que el procesador es lo que maneja más rápido.
Mi sistema representa cada una de esas columnas, mediante una clase indizable. Si el lenguaje de programación que utilizáis no dispone de clases indizables se puede hacer de una manera más rudimentaria mediante una función que le llegue, el int de la columna i el índice (0 a 13 por ejemplo) del signo que se quiere obtener.
Es decir, es como si transformaras un valor entero en un vector de 14 casillas. La gracia del tema es utilizar operadores lógicos (que son los más veloces para tratar números) con el índice de casilla que le llega para obtener el signo correcto, de alguna forma "desencriptar" en cualquier momento el int y obtener cualquiera de los 14 signos de la columna.
No explico como se hace exactamente, simplemente doy las pistas, tampoco digo que sea la mejor forma de hacerlo, es simplemente la que yo utilizo y os aseguro que es muy rápida y ocupa poca memoria.
Re: Algoritmos para eliminar columnas por diferencias
Probablemente te interese esto del propio Joan Duatis, él no tiene "secretos".....
http://free1x2.com/foros/viewtopic.php?t=13792
http://free1x2.com/foros/viewtopic.php?t=13792
Re: Algoritmos para eliminar columnas por diferencias
Gracias Paco por el link. He hechado un vistazo al link y he leido algo en principio sin ningún sentido, gente que dice que guarda una columna en un byte o incluso en un bit, creo que decir eso ya es pasarse de listo.
Re: Algoritmos para eliminar columnas por diferencias
...sigue leyendo... que sí es posible.
Si tienes una forma de numerar las columnas, un bit indica su posición y por la posición del bit se calcula la columna.
Si tienes una forma de numerar las columnas, un bit indica su posición y por la posición del bit se calcula la columna.
Re: Algoritmos para eliminar columnas por diferencias
No necesito seguir leyendo, no tiene sentido Paco, ya que sólo podrías guardar dos posiciones la 0 y la 1, es lo que cabe en un bit.
Otra cosa es que tengas una variable entera que indique la posición de la columna que en este momento estás analizando, y puedas deducir los signos de la columna mediante esa variable a partir de una función, que por supuesto no sería lo más eficiente, aunque se pueda, pero evidentemente donde se guarde la posición, te reitero, no será en un bit.
En un bit, lo mires como lo mires, solo caben dos estados 0 o 1. Así que no se puede sacar de donde no hay.
Otra cosa es que tengas una variable entera que indique la posición de la columna que en este momento estás analizando, y puedas deducir los signos de la columna mediante esa variable a partir de una función, que por supuesto no sería lo más eficiente, aunque se pueda, pero evidentemente donde se guarde la posición, te reitero, no será en un bit.
En un bit, lo mires como lo mires, solo caben dos estados 0 o 1. Así que no se puede sacar de donde no hay.
Re: Algoritmos para eliminar columnas por diferencias
Una columna en un bit:
- Tienes una tabla de bits, de 4782969 posiciones y cada posición representa a una columna.
- Para saber q columna corresponde con q posicion tienes una función (potencias de 3)
Una columna en 3 bytes:
- Divides cada columna en 3 partes de 5 signos:
11111 a 22222
Con un byte puedes representar 256 valores, solo necesitas 243...
COMO SE ECHA DE MENOS A JOAN :( :( :(
- Tienes una tabla de bits, de 4782969 posiciones y cada posición representa a una columna.
- Para saber q columna corresponde con q posicion tienes una función (potencias de 3)
Una columna en 3 bytes:
- Divides cada columna en 3 partes de 5 signos:
11111 a 22222
Con un byte puedes representar 256 valores, solo necesitas 243...
COMO SE ECHA DE MENOS A JOAN :( :( :(
Re: Algoritmos para eliminar columnas por diferencias
EmiliF.... pues no leas, peor para tí......
Una combinación se puede definir perfectamente con un bit por columna.
4.782.969 bits -> los 14 triples
1 -> Sí es de la combinación
0 -> No pertenece a la combinación.
Una combinación se puede definir perfectamente con un bit por columna.
4.782.969 bits -> los 14 triples
1 -> Sí es de la combinación
0 -> No pertenece a la combinación.
Re: Algoritmos para eliminar columnas por diferencias
Paco lo que ha dicho Indeciso, ya tiene sentido, lo que tu decias era que la posición se guardaba en un bit, cosa que me reconocerás no tiene ningún sentido.
Re: Algoritmos para eliminar columnas por diferencias
Gracias Jorge por acordarte de mi.Indeciso escribió: COMO SE ECHA DE MENOS A JOAN :( :( :(
Os leo porque recibo las notificaciones pero ahora mismo he cambiado mi afición a las quinielas por la afición por el biomagnetismo médico (es algo increíble pero me tiene atrapado).
Que tengáis salud i suerte los que todavía jugáis al 1x2.
Re: Algoritmos para eliminar columnas por diferencias
Has hecho muchas cosas por todos con tus utilidades y post!, como para no acordarse de ti!!! ;)
Buena suerte en todo lo que hagas Joan.
Buena suerte en todo lo que hagas Joan.
Re: Algoritmos para eliminar columnas por diferencias
Que alegría leerte por aquí, maestro.
Seguro que también estás innovando en el biomagnetismo médico, que por cierto me voy a enterar a ver que es....
Seguro que también estás innovando en el biomagnetismo médico, que por cierto me voy a enterar a ver que es....
Re: Algoritmos para eliminar columnas por diferencias
He dicho "indica" (puntero)EmiliF escribió:Paco lo que ha dicho Indeciso, ya tiene sentido, lo que tu decias era que la posición se guardaba en un bit, cosa que me reconocerás no tiene ningún sentido.
NO he dicho que la guarde.
Re: Algoritmos para eliminar columnas por diferencias
No tuve la ocasión de conocer a Joan pero todos hablan maravillas de el.
Ahora me ha dado curiosidad saber que es eso del biomagnetismo medico,hacia el google que me voy!! :-D
Ahora me ha dado curiosidad saber que es eso del biomagnetismo medico,hacia el google que me voy!! :-D
Re: Algoritmos para eliminar columnas por diferencias
Un saludo Joan, he leido muchas cosas en este foro escritas por ti, una lástima que hayas dejado el mundillo de las quinielas.
- Magnifico
- 11
- Mensajes: 842
- Registrado: Vie 12 Ago, 2005 12:37 am
- Ubicación: Estados Unidos
- Contactar:
Re: Algoritmos para eliminar columnas por diferencias
Me alegra que te encuentres bien Joan, parece que tenemos aficiones comunes.
Emilif,
Joan desarrollo los mejores programas de reducidas y la EM en la quiniela, aparte de otras utilidades, sus aportaciones son invaluables.
Saludos
Emilif,
Joan desarrollo los mejores programas de reducidas y la EM en la quiniela, aparte de otras utilidades, sus aportaciones son invaluables.
Saludos
El pensamiento ordena el caos..
http://1x2quinielas.blogspot.com
http://1x2quinielas.blogspot.com
-
- 11
- Mensajes: 827
- Registrado: Sab 29 Ago, 2009 2:33 am
Re: Algoritmos para eliminar columnas por diferencias
Joan ya no pierde el tiempo como nosotros ....
Saludos Maestro ¡¡¡
Saludos Maestro ¡¡¡
Re: Algoritmos para eliminar columnas por diferencias
Vaya, qué alegría, me paso por aquí casi de casualidad porque a mí estos temas de algoritmos se me escapan por mucho y veo el post de JoanD. Por supuesto que se te echa de menos. Espero que estés bien y que disfrutes esta nueva afición.
Ya se ha dicho arriba pero para el que no lo sepa, decir que todos los que hacemos nuestras quinielas con un enfoque de EM y no seríamos capaces de confeccionar aplicaciones informáticas, ni por conocimientos matemáticos ni de programación, no podríamos hacerlas de no ser por la prolífica actividad de Joan y su generosidad al compartir sus creaciones. Y además ha dejado poso con todo lo que nos ha enseñado con sus comentarios desde los inicios del foro.
Ya se ha dicho arriba pero para el que no lo sepa, decir que todos los que hacemos nuestras quinielas con un enfoque de EM y no seríamos capaces de confeccionar aplicaciones informáticas, ni por conocimientos matemáticos ni de programación, no podríamos hacerlas de no ser por la prolífica actividad de Joan y su generosidad al compartir sus creaciones. Y además ha dejado poso con todo lo que nos ha enseñado con sus comentarios desde los inicios del foro.
Re: Respuestas
Doctorpi escribió:1.Para saber que byte es el que corresponde a la quiniela 1.384.538 solo hemos de dividir el numero por 8.
Asi el byte 173.067 es el que contiene nuestro bit.
Para saber que bit es, hay que obtener el modulo (o resto) de 1.384.538 entre 8, o sea el bit 2.
2.Si queremos alterar un bit sin cambiar los otros 7, depende de lo que queramos hacer.
Si queremos ponerlo a 0, hay que hacer un AND logico poniendo a 1 todos los bits menos el nuestro.
Ejemplo:
Nota. los bits se leen de der. a izq. y se numeran de 0 a 7
76543210
10111101 (supongamos que este es nuestro byte)
11111011 (mascara de bits para poner a 0 el bit 2)
----------- AND
10111001 Resultado
Un AND logico solo da 1 de resultado si los dos bits son 1.Si leeis un poco sobre como funciona el AND logico lo entendereis
p q AND
-------------
0 0 0
0 1 0
1 0 0
1 1 1
Si queremos ponerlo a 1 la operacion es el OR
76543210
00101010 (supongamos que este es nuestro byte)
00000100 (mascara de bits para poner a 0 el bit 2)
----------- OR
00101110
Un OR logico da 1 si alguno de los 2 bits es 1. Por lo tanto si nuestra mascara tiene todo 0's menos el bit que queremos poner a 1, solo nuestro bit cambiara de valor.
p q OR
-------------
0 0 0
0 1 1
1 0 1
1 1 1
3.Para saber si un bit esta a 0 o a 1. Deberemos hacer un AND de nuestro bit con una mascara a 1 de ese bit precisamente. Si da 0 era 0 si da diferente de 0 era 1.
01001001
00000100
----------- AND
00000000 Nuestro bit era 0
01001101
00000100
----------- AND
00000100 Nuestro bit era 1
Un saludo
Dr.Pi
Así, en esta forma mantener cada bit en una columna. ¿Hay alguna forma para calcular la distancia entre estas columnas, ya que no estoy usando strings somente numeros
Por ejemplo, la forma de calcular la distancia entre la columna y 3 ^14 -1 y 3 ^ 9
Re: Algoritmos para eliminar columnas por diferencias
.
.
.
.
.................y cual es la solución final..????
.
.
.
.................y cual es la solución final..????
NO SE SI SE PUEDE.........!!!!!!