martes, 30 de agosto de 2011

Pseudocodigo

Un pseudocódigo (falso lenguaje), es una serie de normas léxicas y gramaticales parecidas a la mayoría de los lenguajes de programación, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programación, con la misma validez semántica, normalmente se utiliza en las fases de análisis o diseño de Software, o en el estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniería de software.
No hay ningún compilador o intérprete de pseudocódigo informático (en el caso de que lo hubiera serían los lectores de dicho pseudocódigo informatico, por ej. una idea de un jefe de programación a el staff de programadores), y por tanto no puede ser ejecutado en un ordenador, pero las similitudes con la mayoría de los lenguajes informáticos lo hacen fácilmente convertible.
El pseudocódigo describe un algoritmo utilizando una mezcla de frases en lenguaje común, instrucciones de programación y palabras clave que definen las estructuras básicas. Su objetivo es permitir que el programador se centre en los aspectos lógicos de la solución a un problema.
No siendo el pseudocódigo un lenguaje formal, varían de un programador a otro, es decir, no hay una estructura semántica ni arquitectura estándar. Es una herramienta ágil para el estudio y diseño de aplicaciones, veamos un ejemplo, que podríamos definir como: lenguaje imperativo, de tercera generación, según el método de programación estructurada.








Análisis de algoritmos

Como medida de la eficiencia de un algoritmo, se suelen estudiar los recursos (memoria y tiempo) que consume el algoritmo. El análisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o especifiquen) la evolución del gasto de tiempo y memoria en función del tamaño de los valores de entrada.
El análisis y estudio de los algoritmos es una disciplina de las ciencias de la computación y, en la mayoría de los casos, su estudio es completamente abstracto sin usar ningún tipo de 
lenguaje de programación ni cualquier otra implementación; por eso, en ese sentido, comparte las características de las disciplinas matemáticas. Así, el análisis de los algoritmos se centra en los principios básicos del algoritmo, no en los de la implementación particular. Una forma de plasmar (o algunas veces "codificar") un algoritmo es escribirlo enpseudocódigo o utilizar un lenguaje muy simple tal como Léxico, cuyos códigos pueden estar en el idioma del programador.
Algunos escritores restringen la definición de algoritmo a procedimientos que deben acabar en algún momento, mientras que otros consideran procedimientos que podrían ejecutarse eternamente sin pararse, suponiendo el caso en el que existiera algún dispositivofísico que fuera capaz de funcionar eternamente. En este último caso, la finalización con éxito del algoritmo no se podría definir como la terminación de éste con una salida satisfactoria, sino que el éxito estaría definido en función de las secuencias de salidas dadas durante un periodo de vida de la ejecución del algoritmo. Por ejemplo, un algoritmo que verifica que hay más ceros que unos en una secuencia
binaria infinita debe ejecutarse siempre para que pueda devolver un valor útil. Si se implementa correctamente, el valor devuelto por el algoritmo será válido, hasta que evalúe el siguiente dígito binario. De esta forma, mientras evalúa la siguiente secuencia podrán leerse dos tipos de señales: una señal positiva (en el caso de que el número de ceros sea mayor que el de unos) y una negativa en caso contrario. Finalmente, la salida de este algoritmo se define como la devolución de valores exclusivamente positivos si hay más ceros que unos en la secuencia y, en cualquier otro caso, devolverá una mezcla de señales positivas y negativas.

Técnicas de Diseño de Algoritmos


La algoritmia es uno de los pilares de la programación y su relevancia se muestra en el desarrollo de cualquier aplicación, más allá de la mera construcción de programas. Este es un libro introductorio sobre análisis y diseño de algoritmos que pretende exponer al lector las técnicas básicas para su diseño e implementación, así como presentar unas herramientas que le permitan medir su efectividad y eficiencia.
Esta obra nace con la intención de llenar un vacío en la bibliografía existente. En primer lugar ofreciendo un método de diseño general aplicable a cada una de las técnicas, y en segundo lugar proporcionando un enfoque eminentemente práctico a través de una amplia selección de ejemplos y problemas resueltos (más de 100).
El diseño del libro se ha realizado de manera que pueda ser utilizado como base para cualquiera de las asignaturas introductorias de la algoritmia. De ahí su estructura y organización, así como la didáctica con la que se desarrollan los temas. En el texto se estudian las principales técnicas de diseño: Divide y Vencerás, algoritmos ávidos, Programación Dinámica, Vuelta Atrás y Ramificación y Poda. Cada tema comienza con una breve introducción teórica en la que se exponen los fundamentos de la técnica tratada y el tipo de problemas que resuelve. A continuación se presenta el esquema general de funcionamiento de los algoritmos que produce. Finalmente, se desarrolla una colección de problemas que permiten mostrar las distintas formas de aplicación de la técnica estudiada. Conforme se avanza en los problemas se discuten los pormenores de su diseño, los detalles de implementación, y el análisis de su eficiencia.
En definitiva, una obra que puede ser de gran utilidad no sólo a los alumnos de carreras técnicas, sino a todos aquellos profesionales de la informática que deseen profundizar en el apasionante estudio de la algoritmia. 

Una amenaza en forma de vídeo afecta a 1,4 millones de usuarios de Facebook

La red social Facebook es objeto de una nueva amenaza que afecta a 1.400.000 usuarios. Llega en forma de un vídeo que promete imágenes que causaron un escándalo en Estados Unidos e invita al usuario a pinchar en el enlace. Cuando lo hace, una falsa web que simula ser Facebook obliga a compartir el enlace previa visualización del vídeo y, entre otras cosas, añade aplicaciones de casinos online chinos.

Utilizar Facebook para propagar amenazas no es una técnica nueva, pero sigue funcionando. Los piratas informáticos acuden a la red social para distribuir malware e intentar engañar a los usuarios. Los 750 millones de usuarios del servicio son un reclamo para los 'hackers', que no paran de crear amenazas distintas para conseguir sus objetivos.
Este es el caso de un supuesto vídeo que circula en la red social y que anuncia un escándalo en Estados Unidos. El vídeo se propaga a través de los muros de los contactos una vez han sido afectados y en estos momentos ha conseguido afectar a más de 1.400.000 personas, entre ellos, a "mucho usuarios con perfiles españoles", según informa ESET.
Los 'hackers' engañan a los usuarios obligando a que, si desean ver el vídeo, deban pulsar sobre su enlace. El link lleva a una web que simula ser Facebook, pero que no tiene nada que ver con la red social. En dicha web se solicita verificar que los usuarios tienen más de 13 años. Para previsualizar el vídeo, se obliga a compartir el enlace en el muro, consiguiendo de esta manera una mayor difusión. Una vez compartido, el usuario es dirigido a otra web donde se muestra el vídeo, así como multitud de botones de 'Me gusta'.
Aunque no queda clara la finalidad de esta nueva amenaza, un síntoma evidente de que el usuario ha sido afectado es que agrega una serie de enlaces en el apartado de 'Actividades e intereses' de la información del perfil de usuario, entre ellos, aplicaciones de casinos online chinos, que podrían ser los que finalmente estén sacando beneficio económico a este tipo de actividades.
Para evitar que los usuarios se vean afectados por este tipo de prácticas, desde Ontinet.com, distribuidor en exclusiva de ESET, recomiendan a los usuarios que en caso de visualizar dicho vídeo en el muro de sus amistades, hagan caso omiso del mismo y no hagan clic en el enlace para evitar males mayores.

Google realiza cambios a su algoritmo de búsqueda una vez cada 17,5 horas


No es ninguna novedad que la última gran actualización de Google, Panda, ha provocado estragos en una buena cantidad de sitios webque, finalmente, han tenido que reformular sus ideales de posicionamiento web y optimización para volver a posicionar alto para ciertas palabras claves que eran las que traían tráfico.

Con el último cambio, también, ha llegado una interesante interrogante: ¿Cada cuánto Google actualiza su algoritmo de búsqueda? Y la respuesta es realmente interesante, ya que según los propios ingenieros de búsqueda de Google, se realiza un cambio en el algoritmo de búsqueda cada 17,5 horas, lo que indica el rápido cambio que tiene dicho motor.
Y estos cambios no son en los resultados de búsqueda, sino en la manera de cómo funciona el buscador. En un vídeo de los ingenieros de Google, explican cómo funcionan dichos cambios que, aunque son mínimos, resuelven una buena parte de los problemas de los usuarios en la actualidad, principalmente con los errores ortográficos o los populares “typos”.
Aún así, los cambios más grandes del algoritmo de búsqueda han estado dándose una vez cada varios años. Algunas actualizaciones menos importantes ocurren cada 6 meses donde, anteriormente, se llamaba a dicha actualización el Google Dance, pero se nota que Google ha decidido hacer varios cambios al respecto para que los resultados siempre sean óptimos.

miércoles, 17 de agosto de 2011

Los Algo Con ritmo =)

Nuestra herramienta mental más importante para competir con la complejidad es la abstracción. Por tanto, un problema no deberá considerarse inmediatamente en términos de instrucciones de un lenguaje, sino de elementos naturales del problema mismo, abstraídos de alguna manera. [Niklaus Wirth, Creador del Lenguaje Pascal]
Definicion: Algoritmo
Podemos encontrar muchas definiciones de algoritmo en los textos de programacion, todas ellas muy similares:
  • Conjunto ordenado y finito de pasos que permite hallar la solución de un problema.
  • Una secuencia de pasos que conducen a la realización de una tarea.
  • Descripción exacta de la secuencia en que se ha de realizar un conjunto de actividades tendientes a resolver un determinado tipo de problema o procedimiento.
  • Conjunto de sentencias / instrucciones en lenguaje nativo, los cuales expresan la lógica de un programa.
  • Es un sistema por el cual se llega a una solución, teniendo en cuenta que debe de ser definido, finito y preciso.
  • Toda receta, proceso, rutina, método, procedimiento, técnica, formula que resuelven un determinado problema.
  • Conjunto de instrucciones concretas y detalladas mediante el cual se consigue una acción determinada.
  • Conjunto de reglas que permiten obtener un resultado determinado a partir de ciertas reglas definidas.
  • Descripción precisa de una sucesión de instrucciones que permite llevar a cabo un trabajo en un número finito de pasos.
  • Un conjunto de símbolos y procedimientos usados en la realización de un cálculo.
Las definiciones mas completas o formales:
  • Secuencia finita de instrucciones, reglas o pasos que describen de forma precisa las operaciones de un ordenador debe realizar para llevar a cabo un tarea en un tiempo mas finito. [Donald E. Knuth, 1968]
  • Descripcion de un esquema de comportamiento expresado mediante un reportorio finito de acciones y de informaciones elementales, identificadas, bien comprendidas y realizables a priori. Este repertorio se denomica lexico [Pierre Scholl, 1988]
  • Un algoritmo es un conjunto finito de pasos definidos, estructurados en el tiempo y formulados con base a un conjunto finito de reglas no ambiguas, que proveen un procedimiento para dar la solución o indicar la falta de esta a un problema en un tiempo determinado. [Rodolfo Quispe-Otazu, 2004]
Caracteristicas:
Las características fundamentales que debe cumplir todo algoritmo son:
  • Ser definido: Sin ambigüedad, cada paso del algoritmo debe indicar la acción a realizar sin criterios de interpretación.
  • Ser finito: Un número específico y numerable de pasos debe componer al algoritmo, el cual deberá finalizar al completarlos.
  • Tener cero o más entradas: Datos son proporcionados a un algoritmo como insumo (o estos son generados de alguna forma) para llevar a cabo las operaciones que comprende.
  • Tener una o más salidas: Debe siempre devolver un resultado; de nada sirve un algoritmo que hace algo y nunca sabemos que fue. El devolver un resultado no debe ser considerado como únicamente “verlos” en forma impresa o en pantalla, como ocurre con las computadoras. Existen muchos otros mecanismos susceptibles de programación que no cuentan con una salida de resultados de esta forma. Por salida de resultados debe entenderse todo medio o canal por el cual es posible apreciar los efectos de las acciones del algoritmo.
  • Efectividad: El tiempo y esfuerzo por cada paso realizado debe ser preciso, no usando nada más ni nada menos que aquello que se requiera para y en su ejecución.