23 junio 2006

Algorítmica

La algorítmica es una de las ramas de la informática más divertidas, porque es una rama en la que se necesita (y se desarrolla) la creatividad. Consiste básicamente en crear programas, en enseñar al ordenador a hacer cosas.

Por ejemplo tu quieres saber cuanto es 111111111*111111111, si no cabe en tu calculadora puedes hacerlo a mano, pero es una cálculo aburrido ¿porqué no enseñar a un ordenador a hacerlo? Puedes escribir un algoritmo que resuelve ese problema.

Si tienes un mapa con 20 ciudades y quieres conocer cual es la forma más rápida de visitar todas las ciudades. ¿Cuál es la ruta con el mínimo número de kilómetros? Puedes ir probando a mano o dejarselo al ordenador.

A pesar de que puede resultar divertido o interesante, a mucha gente se le atraganta la programación y los algoritmos en la universidad. ¿Hay que ser superdotado para programar? NO. Pero hay que cambiar la forma de pensar cuando te pones a programar. La gente está acostumbrada a aprender "recetas" para resolver los problemas en los exámenes, la programación no es seguir unos pasos que dice el profesor y ya está, consiste en crear esos pasos.

Es necesario cambiar la mentalidad a la hora de enfrentarse a problemas de algorítmica. No es lo mismo hacer la declaración de la renta que hacer un programa que haga la declaración de la renta.

Pongo algunos enlaces sobre algorítmica para el que le puedan interesar:

Práctica de la Algorítmica de Miquel Gomila. Es un cursito introductorio a la resolución de problemas de programación. Tiene muchos problemas y sus soluciones.

Apuntes de Algoritímica de Emilio Sanchís. Apuntes de sus clases.

Apuntes de Estructuras de Datos y Algoritmos. Apuntes de las clases.

21 junio 2006

Sucesión de Fibonacci

La Sucesión de Fibonacci es una lista de número muy famosa en matemáticas:

1, 1, 2, 3, 5, 8, ...

Los 2 primeros números son 1, y luego cada números posterior es la suma de los 2 anteriores:

1, 1, 1+1, 1+2, 2+3, 3+5, ...

Si quieres saber el número de Fibonacci que está en la posición 1 millón, puedes calcularlos uno a uno hasta llegar a 999.998 y 999.999, al sumarlos tendrás el Fibonacci 1.000.000.

Pero hay una forma más rápida, encontré este algoritmo que permite calcular 3 números de Fibonacci en tiempo logarítmico. El truco está en que calculando la potencia de una cierta matriz se pueden obtener varios valores de la sucesión y cómo sí se conoce un algoritmo de coste logarítmico para exponenciar, se puede utilizar para calcular número de Fibonacci mucho más rápido que con el método simple.


// Fibonacci (Divide y vencerás)
// calcula el término f(n) utilizando en tiempo O(log n)
// Utiliza esta propiedad de las matrices y el algoritmo de
// exponenciación DyV
// | 0 1 |^n | f(n-2) f(n-1) |
// | 1 1 | = | f(n-1) f(n) |
// cuidado! sólo da el resultado correcto para n <= 93

unsigned long long fibDyV(unsigned int n) {
unsigned long long int i, h, j, k, t;
i = h = 1;
j = k = 0;
while (n > 0) {
if (n%2 == 1) {
t = j*h;
j = i*h + j*k + t;
i = i*k + t;
}
t = h*h;
h = 2*k*h + t;
k = k*k + t;
n /= 2;
}
return j;
}

19 junio 2006

Eclipse

He estado leyendo estos días en la biblioteca el libro Eclipse de Steve Holzner (ejemplares en la UPV).

Los primeros capítulos enseñan aspectos útiles de Eclipse, el resto he pasado de ellos porque explica cosas que no me interesan: SWT y SWING, Struts, Applets, programación para Apache Tomcat, desarrollo de plugins para Eclipse...

Me ha gustado especialmente estas cosas que no conocía:
- Con control+espacio aparece el autocompletado en cualquier momento
- Las jpages
- El manejo de Ant
- Los breakpoints con expresiones
- Las pruebas unitarias con Junit
- El control de versiones con CVS (aunque me gusta más Subversion, pero no conseguí instalar el plugin)

Eclipse es un gran entorno que ayuda muchísimo al desarrollo en Java, pero es lento lento lento. Estaría bien que se pudiera compilar con gcj para así tener un ejecutable nativo, quizá iría más suelto el Eclipse.

Prefiero el C/C++ o Python para programar, pero con Eclipse eso de programar en Java se lleva bastante bien...

13 junio 2006

Maths Challenge

El otro día encontré esta página Project Euler. Se trata de una página con problemas para resolver (cómo la UVa y la USACO) pero todos los problemas son matemáticos.

Se diferencia de los otros servidores con problemas en que no tienes que enviar el código fuente, sino escribir el resultado en un cuadro de texto. Puedes calcular el resultado utilizando el lenguaje que quieras, o con lápiz y papel.

He resuelto 4 problemas en unos minutos, los primeros son muy sencillos (sumar y multiplicar números), luego supongo que se irán complicando más y más.

Esta página te puede servir para practicar con problemas de tipo matemáticos o para aprender a programar desde cero porque los primeros ejercicios tienen un nivel muy básico.

07 junio 2006

The Algorithmist

He encontrado un wiki como la Wikipedia pero orientado a la programación y la algorítmica, se llama The Algorithmist y visualmente es igual que la Wikipedia.

Puedes encontrar información sobre los distintos temas relaciones con la programación. También hay información de las competiciones, y ayudas para resolver problemas.

Si por ejemplo no consigues resolver el problema 100 de la UVa, puedes leer las explicaciones que dan en este wiki, encontrar juegos de prueba y consejos.

He puesto un enlace a mi perfil en el servidor de la Universidad de Valladolid, por si alguien se aburre y quiere ver que problemas he hecho. El enlace está en la barra lateral.

06 junio 2006

666

Hoy es 6/6/06, en muchos medios de comunicaciones se comentan cosas sobre esta fecha: que si es el fin del mundo, que si el anticristo.

La historia del número 666 procede de una novela de ficción muy famosa que dice algo así:
...Y hacía que a todos, pequeños y grandes, ricos y pobres, libres y esclavos, se les pusiese una marca en la mano derecha, o en la frente; y que ninguno pudiese comprar ni vender, sino el que tuviese la marca o el nombre de la bestia, o el número de su nombre. Aquí hay sabiduría. El que tiene entendimiento, cuente el número de la bestia, pues es número de hombre. Y su número es seiscientos sesenta y seis. Apocalipsis 13:16-18
Entonces según esto, el número ha de aparecer en la mano o en la frente, no hay que preocuparse por la fecha ya que no se va a acabar el mundo hoy.

El número 666 es un número triangular (el 36º número triangular). Que quiere decir que se puede formar un triángulo con 666 puntos.

Aquí se ven los primeros números triangulares (1, 3, 6, 10... 666). Imagen extraída de aquí.

Pitágoras y sus seguidores estudiaron mucho los números triangulares y sus propiedades. También se han encontrado indicios de que el cristianismo es una fusión del judaísmo con algunas características de la religión pitagórica. Así que no es de extrañar que un número triangular tenga tanta importancia para la novela de ficción Biblia.


Nada más por hoy.

Este blog ha tenido ya más de 300 visitas y casi nadie comenta nada... que tristes sois todos.

05 junio 2006

Cómo comportarse en internet

NETIQUETA EN FOROS Y WEBLOGS

- Cuando te suscribas a una lista de discusión, guarda el mensaje de bienvenida. En él aparecen las instrucciones para borrarte. Así no tendrás que molestar a la gente, preguntando cómo, cuando quieras irte.

- Espera antes de intervenir por primera vez. Observa quiénes hablan, de qué, con qué registro.

- Cíñete al tema del foro.

- Aporta nueva información, no repitas lo que se ha dicho o respondas con un "Estoy de acuerdo", sin argumentos.

- No envíes archivos adjuntos.

- Respeta a los demás, no respondas con ira, perdona sus equivocaciones.

- Recuerda que nunca sabes dónde llegará el mensaje que envías a un foro. Puede leerlo tu jefe, tu futuro jefe, tu novia, tu familia.

- No mandes a un foro mensajes privados tuyos o de otra gente.

- No envíes publicidad.

- Sé breve y claro. No respondas a todo compulsivamente. Piensa antes de escribir y relee lo que has escrito antes de mandarlo.

- Las mayúsculas significan GRITAR


NETIQUETA EN EL CHAT Y MENSAJERÍA INSTANTÁNEA

- No molestes a los usuarios o al funcionamiento de la red atacándola, desconectando repentinamente a gente, enviando mensajes globales.

- Cuando se entra o se sale de un canal de chat, es de buena educación saludar, a no ser que sea un canal muy poblado, entonces mejor callar para no añadir ruido.

- No uses programas de chat que no sepas utilizar ya que pueden crear el caos en un canal.

- Si quieres hablar en privado con una persona, no lo hagas en la zona pública. Abre una conversación privada.

- Si quieres abrir una conversación privada con alguien y no te contesta, no insistas "ad infinitum". Hay gente que está en el chat y, a la vez, está trabajando. Responderá cuando pueda.

- No escribas frases demasiado largas en una sola línea, saturas el canal y tardan más en llegar que si las envías por fragmentos. Por ejemplo, no escribir de corrido "Hola ¿qué tal, cómo estáis? yo acabo de llegar de marcha esta noche". Escribir: "Hola, ¿qué tal?" y mandarlo. "¿Cómo estáis?" y mandarlo. Etcétera.

- En mensajería instantánea, no añadas una persona a tu lista de contactos sin su permiso.

- Recuerda que la mensajería instantánea no es un chat. Manda sólo los mensajes que sean necesarios y no bombardees a tu interlocutor.

- Si envías una dirección web o un archivo, explica qué es y revísala antes para asegurarte que es interesante y no contiene virus.

Extraído de un artículo de Mercè Molist llamado ¿Sabes cibercomunicarte?

01 junio 2006

Cuba impulsará el sistema operativo Linux

Segun informa Juventud Rebelde
Cuba impulsará el sistema operativo Linux

Amaury E. del Valle

Cuba está organizando la migración progresiva de las computadoras instaladas en los organismos de la Administración Central del Estado hacia el software libre, sobre la base del sistema operativo Linux, eliminando así la presencia casi exclusiva del Windows en las máquinas.

La noticia trascendió durante una conferencia ofrecida por Roberto del Puerto, director de la Oficina para la Informatización de la Sociedad, en el III Taller de Software Libre, el cual tuvo lugar durante la recién finalizada Convención Internacional Informática 2005.

El sistema operativo Linux, creado en la década de 1980 por Linus Torvalds, se diferencia de similares como Windows, de Microsoft, en que su código fuente es totalmente abierto, y por tanto puede ser modificado y distribuido por el usuario cuantas veces quiera.

La Isla, que posee actualmente más de 1 500 usuarios de Linux y una comunidad de desarrolladores fuerte en varias provincias del país, ya cuenta también con su propia distribución de Linux -un conjunto de programas agrupados de acuerdo a sus prestaciones y calidad- que fue presentada ayer.

Además, la Oficina para la Informatización ha diseñado una estrategia que comprende acciones de organización, técnicas, diseño de un marco legal, así como la capacitación y el cambio paulatino de los sistemas de Windows a Linux.

La política será rectoreada por un Grupo Nacional, que integran entre otros la propia Oficina, los ministerios de Justicia, del Interior, de Informática y las Comunicaciones, la Red Telemática de Salud (Infomed), la CUJAE, los Joven Club y la Universidad de las Ciencias Informáticas. Esta última, con más de 6 000 estudiantes, ya ha destinado una de sus facultades para el desarrollo de programas sobre Linux.

Extraído de laRepública.es