viernes, 29 de octubre de 2010

Optimizacón del algoritmo de ordenamiento SHELL

Allá por inicios de 1980 encontré el método de ordenamiento de Donald Shell que usó para su doctorado y me gustó sobremanera el algoritmo, luego de pensarlo varios días, apliqué lo que me habían enseñado en la Universidad de Piura, las derivadas para encontrar el valor óptimo (mínimo en este caso) y además el uso de logaritmos del colegio, pero tuve que aplicar un razonamiento para encontrar una ecuación nueva que luego terminó en una fórmula para optimizar el algoritmo de Shell.
Una breve descripción del algoritmo es que la comparación de los elementos se realiza a una distancia L, y luego en cada pasada de principio a fin esa distancia L se toma la mitad entera cada vez. Pues mi optimización se planteó que en vez de dividir entre 2 debería ser entre un valor D que este valor D debería dividirse entre dos cada siguiente vez para lo cual resultó que el valor inicial de
D = 2^INT[sqrt(0.25+2*LOG(L)/LOG(2))-0.5]. Para el caso de 1000 elementos D resulta en 8, entonces la distancia L es 125 (=1000/8), luego D pasa a ser 4 (la mitad) entonces L será 31 (=125/4) y para las siguientes pasadas D vale 2 y L tomará los valores 15, 7, 3 y 1.
Ahora bien, es posible que encuentre otro valor óptimo que en vez de ser ese valor D que se divida entre dos, pueda ser encontrar una serie de valores que responda mejor a determinadas cantidades a ordenar, supongamos que en vez de dividir entre 2 como originalmente planteó Donald Shell, posiblemente 2 sirva para cuando la distancia sea menor a 32, y sea 3 para distancias desde 33 hasta 1024, etc...
Al revisar las comparaciones entre los elementos, se me ocurrió preguntarme ¿Porqué tengo que comparar la misma pareja de elementos dos veces?, entonces puse unas distancias de comparación de manera que la misma pareja trate de compararse la menor cantidad de veces posible y he llegado a una serie que si es más veloz que el original de Shell (12-nov-2010) La fórmula para la primera distancia de compración ( o salto) es: L = 2^INT[LOG(N)/LOG(2)]-1, luego para cada siguiente vez es la parte entera de la mitad como usualmente es el algoritmo de Shell. He revisado en internet que esta fórmula ya había sido planteada por Hibbard o por Papernov-Stasevich en 1965; Pratt en 1971, así que me plantearé otras ecuaciones, para ver adonde llegaré.

jueves, 3 de junio de 2010

Fórmula General para obtener Triángulos Rectos

Amigos, ya deduje la fórmula general para hallar cualquier triángulo recto a partir de un cateto "a" y un valor aleatorio "n". Siendo a, b, c los tres lados del triángulo recto, y siendo "a" el lado conocido, podemos hallar el resto de lados como sigue: lado "b" = (a^2)/(2*n) - (n/2).
Luego la hipotenusa se halla como c = b + n.

Ahora sí se puede ver completo en:
http://www.alipso.com/monografias4/Triangulo-Recto-de-Pitagoras/

Un fuerte abrazo para toda la comunidad internacional.

miércoles, 28 de abril de 2010

Capicúa y Cuadrado perfecto

Pues resulta que el mismo problema del capicúa con los primos lo había complementado con los cuadrados perfectos para hacerlo un poco más largo, y resultó que sucede igual, es decir no hay cuadrados perfectos y capicúas de dos cifras, ni de cuatro cifras ni de seis cifras, ni de ocho cifras. pero sí hay de 1 cifra, de 3 cifras, de 5 cifras, de 7 y de nueve, no he revisado más allá. Lo dejaré para que me acompañen con sus comentarios.

martes, 27 de abril de 2010

capicúa y primo

Hoy 27 de abril de 2010 acabo de encontrar entre mis juegos numericos, que el número capicúa de dos cifras y que además es primo es el 11 y no hay más en dos cifras. Luego hay un mar de números capicúas y primos de 3 cifras luego de 5 cifras luego de 7 cifras y luego de 9 cifras.
La conclusión es que no hay números capicúas que sean primos de cantidad de cifras pares, salvo el 11 que es de dos cifras.
Para esto realicé un programa que vaya encontrando los capicúas primos y grande fue mi sorpresa por este hallazgo.
Si alguien desea aportar sus encuentros, me parece que empezamos con pie derecho

Triángulo recto

Ya he publicado en otros sitios mis encuentros numéricos, pero ahora voy a hacer un resumen sobre la fórmula de triángulos rectos que publiqué el 17 de julio de 2008.
En esa publicación dije que los triángulos rectos se pueden deducir a partir del cateto menor, es decir basta tener un lado y se deducen los otros dos lados.
Veamos, el cateto menor "a" se le opera y se obtiene "b" el cateto mayor, y luego "c" que es la hipotenusa. La relación que encontré en un inicio es b= (a^2 - 1)/2 se lee "a" al cuadrado menos uno entre dos, y c=b+1
Otra relación es b=(a/2)^2 - 1 y c=b+2
Otra relación es b=(a/4)^2 - 4 y c=b+8
y podría seguir indefinidamente, pero lo que quise es encontrar en ese momento una fórmula integradora de todas las relaciones que había encontrado, pero lo haré en algún otro momento.
Ese momento llegó en julio 2010.
b = (a^2)/(2*n) - (n/2)
c = b + n
donde 0 < n < a

http://www.alipso.com/monografias4/Triang_Pitagoras/