<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d9665506\x26blogName\x3dMi+blog!\x26publishMode\x3dPUBLISH_MODE_BLOGSPOT\x26navbarType\x3dBLUE\x26layoutType\x3dCLASSIC\x26searchRoot\x3dhttps://zirrus.blogspot.com/search\x26blogLocale\x3des_ES\x26v\x3d2\x26homepageUrl\x3dhttp://zirrus.blogspot.com/\x26vt\x3d-115589409851095307', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe", messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER, messageHandlers: { 'blogger-ping': function() {} } }); } }); </script>

martes, enero 04, 2005

Aleatoriedad imposible

Vivimos en un mundo en el que gracias al libre albedrío que se nos otorga, las cosas que ocurren suelen ser debidas a una cierta aleatoriedad, siempre que sean cosas en las que intervengan las personas humanas. No caben dentro de estas cosas aquellas relativas a los efectos naturales, reacciones químicas, etc.

La mayoría de las acciones que realizamos tienen un cierto grado de aleatoriedad. Aunque quizás una aleatoriedad un poco influenciada por nuestros gustos, estado de ánimo y otros factores que nos afectan.

Pasemos al terreno electrónico, el mundo de las máquinas. En este mundo, no existe aleatoriedad, es todo determinista. El simple hecho de generar un número aleatorio en un ordenador es falso, se llama número pseudo-aleatorio. Y es que en la máquina, la aleatoriedad es imposible, la máquina se rige por reglas y funciones que al final se reducen en simples sumas, comparaciones y movimientos de memoria, ¿cómo implantar ahí el azar?.

Sin embargo, las aplicaciones de los números aleatorios (pseudo-aleatorios) en las máquinas son muy variadas, y muy útiles. En el terreno de la criptografía es fundamental para la generación de claves, aunque más fundamentales son los test de primalidad que se realizan, aunque para eso ya hablaré en otro post. En los juegos de ordenador son muy útiles, así como en aplicaciones multimedia. Muchas veces, para la generación de números aleatorios he visto que el programa hacia uso del ratón para capturar los movimientos, se pedía al usuario que lo moviera un tiempo determinado, y el programa capturaba coordenadas. Ese método puede ser efectivo, pero seguro que estadísticamente no es aleatorio (seguro que todos acabamos moviendo el ratón más o menos igual ;)).

Actualemente, para generar números aleatorios en la máquinas se hacen uso de funciones matemáticas específicas, las cuales deben ser inicializadas asiduamente para su correcto funcionamiento. Al proceso de inicializarlas se le suele llamar alimentar la semilla aleatoria, puesto que a partir de la semilla se van generando los números. De esta manera, no es de extrañar que durante la generación de los números pseudo-aleatorios se generen número iguales, o de manera creciente, decreciente, etc. Al fin y al cabo, lo que se intenta es emular el azar!

Es fácil pensarlo, pero difícil implementarlo. ¿Como hacer una función que te devuelva un número aleatorio? Complicado es, y estudiándose está.

Nos vemos!