Anda di halaman 1dari 13

Marco A. Pérez Unidad I Ing.

César Govea
Castillo Generalidades de
Algorítmica
1.1 Conceptos Elaborado 19-Febrero-2009
1422492
1.2 Aplicaciones Presentado 20-Febrero-2009
Algorítmica y Principios de
Programación
1.3 Estudios afines

1.4 Formalidades

1 Generalidades de Algorítmica

La historia de la informática señala a Abu Abdullah Muhammad bin Musa al-Khwarizmi, una de las
grandes figuras de la matemática árabe medieval como descubridor del concepto de algoritmo.

En su obra "aljabar wa-al-muqabala" sienta las bases del algebra, cuyo nombre procede del
comienzo del título, así como "algoritmo" procede del nombre del autor, al-Khwarizmi.

Al igual que los idiomas sirven de vehículo de comunicación entre los seres humanos, existen
lenguajes que realizan la comunicación entre los seres humanos y las computadoras. Estos
lenguajes permiten expresar los programas o el conjunto de instrucciones que el operador
humano desea que la computadora ejecute.

Los lenguajes de computadoras toman diferentes formas; los de las primeras computadoras, como
la ENIAC y la EDSAC, se componían en el lenguaje real de las máquinas mismas. La dificultad de
programar las máquinas de esta manera limitaba drásticamente su utilidad y proporcionaba un
fuerte incentivo para que se desarrollaran lenguajes de programación más orientados hacia la
expresión de soluciones con la notación de los problemas mismos.

Los primeros lenguajes de programación se conocieron como Lenguajes Ensambladores, un


ejemplo es: TRANSCODE, desarrollado para la computadora FERUT. En los lenguajes
ensambladores se define un código especial llamado mnemónico para cada una de las operaciones
de la máquina y se introduce una notación especial para especificar el dato con el cual debe
realizarse la operación.

A mediados de los años 60's aparecieron los primeros lenguajes de propósito general como
FORTRAN, FORTRAN IV, ALGOL, COBOL, BASIC, PL/I, ADA, C,C++, PASCAL, etc. pero el desarrollo de
nuevas tecnologías, tanto en arquitectura de computadoras como en lenguajes de programación,
continúa a paso acelerado, cada vez con mayor velocidad, el panorama está cambiando de una
etapa de sistemas y lenguajes especialmente desarrollados para aplicaciones individuales. Los
lenguajes de programación actuales son los conocidos como Lenguajes visuales, como por ejemplo
Visual Fox, Visual Basic, Visual C .
1.1 Conceptos
Algoritmo

Un algoritmo es la expresión de una secuencia precisa de operaciones que conduce a la resolución


de un problema.

Sistema de reglas que permiten obtener una salida específica a partir de una entrada específica.
Cada paso debe estar definido exactamente, de forma que pueda traducirse a lenguaje de
computadora.

Conjunto de operaciones que se utilizan para resolver un problema específico. En este conjunto de
instrucciones se indica la secuencia de operaciones que se deben realizar para, a partir de los
datos de entrada, obtener el resultado buscado.

El concepto de algoritmo es anterior a los ordenadores, y ampliamente utilizado en el mundo de la


ciencia para la resolución metódica de problemas. Sin embargo, con la aparición de los
ordenadores se comprobó que era una herramienta ideal, ya que cualquier algoritmo puede
transformarse en un programa informático.

Características del algoritmo:

Tiene que ser finito (con un final), preciso (detallar el orden de las operaciones a realizar) y
unívoco (al aplicar el algoritmo a los mismos datos de entrada, siempre se obtendrá el mismo
resultado a la salida).

Toda regla debe definir perfectamente la acción a desarrollar


Todos sus pasos deben ser simples y tener un orden definido.
Un Algoritmo no debe resolver un solo problema particular sino una clase de problemas.
Un Algoritmo debe ser eficiente y rápido.

Métodos para escribir algoritmos:

Diagramas de Flujo y pseudocódigo

Programa

Un programa para ordenador es la expresión de un algoritmo en un lenguaje artificial formalizado.

Conjunto de Instrucciones que controlan el funcionamiento del ordenador con un conjunto de


características
 Análisis del problema: equivale a decidir qué es lo que tenemos que hacer
 Diseño o desarrollo de la solución: en esta etapa se define cómo vamos a hacerlo, los
métodos más eficaces se apoyan en el conocido Divide y vencerás, (diseño descendente o
top down o modular)
 Codificación o construcción de la solución en forma de programa
 Pruebas
 Mantenimiento

1.2 Aplicaciones

Aplicación de un algoritmo de Split-Window para la


estimación de la temperatura de la superficie terrestre desde
datos AVHRR-NOAA

Estimaciones de temperatura de la superficie terrestre, en días parciales a completamente


despejados, fueron realizadas a partir de los datos proporcionados por el sensor Advanced Very
High Resolution Radiometer (AVHRR), a bordo de la serie de satélites de la National Oceanic and
Atmospheric Administration (NOAA) por aplicación de un algoritmo basado en el método de Split-
Window

Aplicación de Algoritmos Neurogenéticos en la Planeación de


las Trayectorias de un Robot Polar

Se presenta la estrategia desarrollada para desplazar el efecto final de un brazo robótico dentro
de un entorno productivo de forma autónoma, mediante el uso de entornos virtuales, algoritmos
genéticos y redes neuronales. El objetivo es la obtención del conjunto de posiciones y los
movimientos requeridos para conformar la estrategia de actuación necesaria para completar una
actividad específica. De esta forma, el sistema es capaz de guiar el efector final, evadiendo
diferentes obstáculos y buscando la combinación espacial y articular que permita una cantidad
reducida de movimientos, así como la menor distancia entre ellos. El proceso se torna una
herramienta viable de programación y entrenamiento que reduce sustancialmente el tiempo
promedio requerido por el factor humano para entrenar el robot.
Algoritmo para aplicar Base64
http://www.javamexico.com/blogs/gabo/algoritmo_para_aplicar_base64

El Base64 Content-Transfer-Encoding está diseñado para representar secuencias arbitrarias de


octetos en una forma que no necesita ser humanamente legible.

Los algoritmos de codificación y decodificación son simples, pero los datos codificados son
sistemáticamente sólo alrededor del 33% más grande que los datos sin codificar.

Está compuesta por un subconjunto 65 de caracteres US-ASCII, permitiendo 6 bits para ser
representados por caracteres imprimibles.
(El 65° carácter adicional, "=", se utiliza para significar una función específica para la
transformación.)

Aquí 3 Bytes se representan con una cadena de texto de 4 caracteres, en total estos 24 bits se
subdividen en agrupaciones de 6 bits, cada uno de los cuales se traduce en un solo dígito en el
alfabeto base64.

En otras palabras estos 6 bits se usan como índice en una matriz de 64 caracteres imprimibles.

Todos los saltos de línea, espacios en blanco u otros caracteres que no se encuentra en la Tabla 1
deben de ser ignorado por el software de decodificación.

Esta codificación es prácticamente idéntica a la utilizada en la privacidad de Correo Mayor (PEM),


también en la URL's de algunos sitios, PGP, Thunderbird y Evolution lo ocupan para el cifrado de
contraseñas en los correos entre otros.

Base64 no es un algoritmo de compresión de datos, de hecho aumenta 25% los datos que
codificas; es un algoritmo para codificar datos binarios como texto para su transmisión o
almacenamiento en medios que no permiten transmisión de datos binarios (incluso en sistemas
viejos que manejan caracteres de 7 bits).

Se usa también por ejemplo en mails encriptados ya sea con certificados X509 o con PGP, así como
attachments de mail
Los certificados X509, llaves privadas y públicas de RSA o DSA (por ejemplo para SSH o PGP) se
almacenan en base 64, precisamente para poder enviarlas en un mail y que se puedan guardar en
un archivo de texto simple sin ningún formato especial.

Los passwords en UNIX/Linux se guardan en base64, revisa tu /etc/passwd


1.3 Estudios a Fines

La informática

Es la ciencia aplicada que abarca el estudio y aplicación del tratamiento automático de la


información utilizando dispositivos electrónicos y sistemas computacionales.

También está definida como el procesamiento automático de la información.

Conforme a ello, los sistemas informáticos deben realizar las siguientes tres tareas básicas:

 Entrada: Captación de la información digital.


 Proceso: Tratamiento de la información.
 Salida: Transmisión de resultados binarios.

En los inicios del procesado de información, con la informática sólo se facilitaba los trabajos
repetitivos y monótonos del área administrativa, gracias a la automatización de esos procesos, ello
trajo como consecuencia directa una disminución de los costes y un incremento en la producción.

En la informática convergen los fundamentos de las ciencias de la computación, la programación y


las metodologías para el desarrollo de software, la arquitectura de computadores, las redes de
datos (como Internet), la inteligencia artificial y ciertas cuestiones relacionadas con la electrónica.

Se puede entender por informática a la unión sinérgica de todo este conjunto de disciplinas.

Esta disciplina se aplica a numerosas y variadas áreas del conocimiento o la actividad humana,
como por ejemplo: gestión de negocios, almacenamiento y consulta de información,
monitorización y control de procesos, industria, robótica, comunicaciones, control de transportes,
investigación, desarrollo de juegos, diseño computarizado, aplicaciones/herramientas multimedia,
medicina, biología, física, química, meteorología, ingeniería, arte, etc.

Una de la aplicaciones más importantes de la informática es facilitar información en forma


oportuna y veraz, lo cual, por ejemplo, puede tanto facilitar la toma de decisiones a nivel gerencial
(en una empresa) como permitir el control de procesos críticos.

Actualmente es difícil concebir un área que no use, de alguna forma, el apoyo de la informática; en
un enorme abanico que cubre desde las más simples cuestiones domésticas hasta los cálculos
científicos más complejos.

Entre las funciones principales de la informática se cuentan las siguientes:


 Creación de nuevas especificaciones de trabajo.
 Desarrollo e implementación de sistemas informáticos.
 Sistematización de procesos.
 Optimización de los métodos y sistemas informáticos existentes.
Inteligencia Artificial Convencional

Se conoce también como IA simbólico-deductiva e IA débil.

Está basada en el análisis formal y estadístico del comportamiento humano ante diferentes
problemas:
 Razonamiento basado en casos: Ayuda a tomar decisiones mientras se resuelven
ciertos problemas concretos.
 Sistemas expertos: Infieren una solución a través del conocimiento previo del contexto
en que se aplica y de ciertas reglas o relaciones.
 Redes bayesianas: Propone soluciones mediante inferencia estadística.
 Inteligencia artificial basada en comportamientos: que tienen autonomía y pueden
auto-regularse y controlarse para mejorar.

Inteligencia Artificial Computacional

La Inteligencia Computacional (también conocida como IA subsimbólica-inductiva o IA fuerte)


implica desarrollo o aprendizaje interactivo (por ejemplo, modificaciones interactivas de los
parámetros en sistemas conexionistas).

El aprendizaje se realiza basándose en datos empíricos.

Programación

Existe una tendencia a identificar el proceso de creación de un programa informático con la


programación, que es cierta cuando se trata de programas pequeños para uso personal, y que
dista de la realidad cuando se trata de grandes proyectos.

El proceso de creación de software, desde el punto de vista de la ingeniería, incluye los siguientes
pasos:
1. Reconocer la necesidad de un programa para solucionar un problema o identificar la
posibilidad de automatización de una tarea.
2. Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el
programa y para qué se necesita.
3. Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el
programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa
se pueden especificar en esta fase.
4. Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de
complejidad abordable.
5. Implementar el programa. Consiste en realizar un diseño detallado, especificando
completamente todo el funcionamiento del programa, tras lo cual la codificación debería
resultar inmediata.
6. Implantar (instalar) el programa. Consiste en poner el programa en funcionamiento junto
con los componentes que pueda necesitar (bases de datos, redes de comunicaciones,
etc.).

La ingeniería del software se centra en los pasos de planificación y diseño del programa, mientras
que antiguamente (programación artesanal) la realización de un programa consistía únicamente
en escribir el código.

Ingeniería de software

Es la disciplina o área de la informática que ofrece métodos y técnicas para desarrollar y mantener
software de calidad.

Esta ingeniería trata con áreas muy diversas de la informática y de las Ciencias de la Computación,
tales como construcción de compiladores, Sistemas Operativos, o desarrollos Intranet/Internet,
abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de Sistema de
Información y aplicables a infinidad de áreas (negocios, investigación científica, medicina,
producción, logística, banca, control de tráfico, meteorología, derecho, Internet, Intranet, etc.).

Una definición precisa aún no ha sido contemplada en los diccionarios, sin embargo se pueden
citar las enunciadas por algunos de los más prestigiosos autores:
 1 - Ingeniería de Software es el estudio de los principios y metodologías para el desarrollo
y mantenimiento de sistemas software (Zelkovitz, 1978)
 2 - Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y
construcción de programas de computadora y a la documentación asociada requerida
para desarrollar, operar y mantenerlos. Se conoce también como Desarrollo de Software o
Producción de Software ( Bohem, 1976).
 3 - Ingeniería de Software trata del establecimiento de los principios y métodos de la
ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en
máquinas reales (Bauer, 1972).
 4 - Es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo,
operación y mantenimiento del software; es decir, la aplicación de la ingeniería al
software (IEEE, 1993).
1.4 Formalidades
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural,
pseudocódigo, diagramas de flujo y lenguajes de programación entre otros.

Las descripciones en lenguaje natural tienden a ser ambiguas y extensas.


El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural.
Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se
mantienen independientes de un lenguaje de programación específico.

Estructura general de un algoritmo

Algoritmo <nombre_del_algoritmo>

Inicio

definición de constantes

declaración de variables

Sentencia 1

Sentencia 2

Sentencia n

Fin

La descripción de un algoritmo usualmente se hace en tres niveles:

1. Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y


se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo
detalles.
2. Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que
encuentran la solución.
3. Implementación. Se muestra el algoritmo expresado en un lenguaje de programación
específico o algún objeto capaz de llevar a cabo instrucciones.

También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de
complejidad o ambos.
Diagrama de flujo que expresa un algoritmo para calcular la raíz cuadrada de un número x

Diagramas de Flujo

Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con
flechas para indicar la secuencia de instrucciones y están regidos por ISO.

Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan mucho
espacio y su construcción es laboriosa.

Por su facilidad de lectura son usados como introducción a los algoritmos, descripción de un
lenguaje y descripción de procesos a personas ajenas a la computación.
Pseudocódigo es la descripción de un algoritmo que asemeja a un lenguaje de programación pero
con algunas convenciones del lenguaje natural.

Tiene varias ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco
espacio que se requiere para representar instrucciones complejas.

Pseudocódigo

El pseudocódigo no está regido por ningún estándar. pseudo viene de falso y por ende es un
código al que aunque es entendible no se aplica al proceso que debe realizar la maquina.
Máquina de Turing

La máquina de Turing es un modelo matemático, diseñado por Alan Turing, que formaliza el
concepto de algoritmo. A este modelo se le refiere comúnmente como la "descripción de más bajo
nivel" por el hecho de que no utiliza ninguna expresión coloquial.

Implementación
Muchos algoritmos son ideados para implementarse en un programa.

Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal,
un circuito eléctrico o un aparato mecánico.

Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel.

El algoritmo de multiplicación tradicional, el algoritmo de Euclides, la criba de Eratóstenes y


muchas formas de resolver la raíz cuadrada son sólo algunos ejemplos.
Ejemplo de algoritmo Java Base64

1 package encode;
2
3 /**
4 * @author Gabriel Mtz. Nájera
5 */
6 public class Base64Encoder {
7 private static StringBuilder sb = new StringBuilder();
8
9 public static String[] mapInt2Str = {
10 "a","b","c","d","e","f","g","h",
11 "i","j","k","l","m","n","o","p",
12 "q","r","s","t","u","v","w","x",
13 "y","z","A","B","C","D","E","F",
14 "G","H","I","J","K","L","M","N",
15 "O","P","Q","R","S","T","U","V",
16 "W","X","Y","Z","0","1","2","3",
17 "4","5","6","7","8","9","+","/"
18 };
19
20 /**
21 * @param data un array de 3 bytes con los datos a codificar
22 * @param ioff
23 * @return String
24 * @throws java.lang.Exception
25 */
26 public static String encodeBase64(byte[] data, int ioff)throws Exception{
27 sb = new StringBuilder("");
28 if (ioff > 0) {
29
/*
30-32
*/
33 int i0 = (data[0] & 0x3f);
34 sb.append(mapInt2Str[i0]);
35 if (ioff > 1) {
/*36-42*/
43 int i1 = ((data[1] & 0x0f) << 2) | ((data[0] & 0xc0) >> 6);
44 sb.append(mapInt2Str[i1]);
45 if (ioff > 2) {
46
/*47-52*/
53 int i2 = ((data[2] & 0x03) << 4) | ((data[1] & 0xf0) >>
4);
54 sb.append(mapInt2Str[i2]);
55
/*56-58*/
59 int i3 = ((data[2] & 0xfc) >> 2);
60 sb.append(mapInt2Str[i3]);
61 }
62 }
63 }
64 return sb.toString();
65 }
66 /**
67 * Codifica
68 * Se leen 3 bytes y se obtiene la cadenas de texto de 4 caracteres
69 * @param sInputFilePath La ruta de binario
70 * @return String codificación del archivo
71 */
72 public static String encodeBinaryData(String sInputFilePath){
73 String sBase64Data = ""; //codificada
74 java.io.BufferedInputStream bis = null; //lectura
75 StringBuilder strb = new StringBuilder();//escritura
76 try{
77 bis = new java.io.BufferedInputStream(
78 new java.io.FileInputStream(sInputFilePath)
79 );
80 int iReadBytes = 0;
81 byte data[] = new byte[3];
/*82-85*/
85 while( (iReadBytes = bis.read(data, 0,3)) != -1){
86 strb.append( Base64Encoder.encodeBase64(data, iReadBytes) );
87 //System.out.println("Escribe:"+strb);
88 }
89 sBase64Data = strb.toString();
90 }catch(Exception ex){
91 sBase64Data = null;
92 System.out.println( ex.getMessage() );
93 }finally{
94 try {
95 if (bis != null) bis.close();
96 } catch (java.io.IOException ex) {
97 System.out.println( ex.getMessage() );
98 }
99 }
100 return sBase64Data;
101 }
102
103 }
104
105
Bibliografía

• Fundamentos de Algoritmia, G. Brassard y P. Bratley. (ISBN 848966000)

• The Art of Computer Programming, Knuth, D. E. [quien fue también, el creador del TeX]

• Introduction to Algorithms (2nd ed), Cormen, T. H., Leiserson, C. E., Rivest, R. L. y Stein, C.

• Introduction to Algorithms. A Creative Approach, Mamber, U.

• Tirso de Andrés, Homo Cybersapiens. La Inteligencia artificial y la humana, 2002, ISBN 84-
313-1982-8

• Luis Mª Gonzalo, Inteligencia Humana e Inteligencia Artificial, Madrid, 1987. ISBN 84-7118-
490-7

• http://www.javamexico.com/blogs/gabo/algoritmo_para_aplicar_base64

Anda mungkin juga menyukai