Вы находитесь на странице: 1из 13

Marco A.

Prez
Castillo

Unidad I
Generalidades de
Algortmica

1422492

1.1 Conceptos

Algortmica y Principios de
Programacin

1.2 Aplicaciones

Ing. Csar Govea

Elaborado

19-Febrero-2009

Presentado 20-Febrero-2009

1.3 Estudios afines


1.4 Formalidades

1 Generalidades de Algortmica
La historia de la informtica seala a Abu Abdullah Muhammad bin Musa al-Khwarizmi, una de las
grandes figuras de la matemtica 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 ttulo, as como "algoritmo" procede del nombre del autor, al-Khwarizmi.
Al igual que los idiomas sirven de vehculo de comunicacin entre los seres humanos, existen
lenguajes que realizan la comunicacin 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 componan en el lenguaje real de las mquinas mismas. La dificultad de
programar las mquinas de esta manera limitaba drsticamente su utilidad y proporcionaba un
fuerte incentivo para que se desarrollaran lenguajes de programacin ms orientados hacia la
expresin de soluciones con la notacin de los problemas mismos.
Los primeros lenguajes de programacin se conocieron como Lenguajes Ensambladores, un
ejemplo es: TRANSCODE, desarrollado para la computadora FERUT. En los lenguajes
ensambladores se define un cdigo especial llamado mnemnico para cada una de las operaciones
de la mquina y se introduce una notacin especial para especificar el dato con el cual debe
realizarse la operacin.
A mediados de los aos 60's aparecieron los primeros lenguajes de propsito general como
FORTRAN, FORTRAN IV, ALGOL, COBOL, BASIC, PL/I, ADA, C,C++, PASCAL, etc. pero el desarrollo de
nuevas tecnologas, tanto en arquitectura de computadoras como en lenguajes de programacin,
contina 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 programacin actuales son los conocidos como Lenguajes visuales, como por ejemplo
Visual Fox, Visual Basic, Visual C .

1.1 Conceptos
Algoritmo
Un algoritmo es la expresin de una secuencia precisa de operaciones que conduce a la resolucin
de un problema.
Sistema de reglas que permiten obtener una salida especfica a partir de una entrada especfica.
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 especfico. 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 resolucin metdica de problemas. Sin embargo, con la aparicin de los
ordenadores se comprob que era una herramienta ideal, ya que cualquier algoritmo puede
transformarse en un programa informtico.
Caractersticas del algoritmo:
Tiene que ser finito (con un final), preciso (detallar el orden de las operaciones a realizar) y
unvoco (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 accin 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 rpido.
Mtodos para escribir algoritmos:
Diagramas de Flujo y pseudocdigo

Programa
Un programa para ordenador es la expresin de un algoritmo en un lenguaje artificial formalizado.
Conjunto de Instrucciones que controlan el funcionamiento del ordenador con un conjunto de
caractersticas

Anlisis del problema: equivale a decidir qu es lo que tenemos que hacer


Diseo o desarrollo de la solucin: en esta etapa se define cmo vamos a hacerlo, los
mtodos ms eficaces se apoyan en el conocido Divide y vencers, (diseo descendente o
top down o modular)
Codificacin o construccin de la solucin en forma de programa
Pruebas
Mantenimiento

1.2 Aplicaciones
Aplicacin de un algoritmo de Split-Window para la
estimacin de la temperatura de la superficie terrestre desde
datos AVHRR-NOAA
Estimaciones de temperatura de la superficie terrestre, en das 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 satlites de la National Oceanic and
Atmospheric Administration (NOAA) por aplicacin de un algoritmo basado en el mtodo de SplitWindow

Aplicacin de Algoritmos Neurogenticos en la Planeacin de


las Trayectorias de un Robot Polar
Se presenta la estrategia desarrollada para desplazar el efecto final de un brazo robtico dentro

de un entorno productivo de forma autnoma, mediante el uso de entornos virtuales, algoritmos


genticos y redes neuronales. El objetivo es la obtencin del conjunto de posiciones y los
movimientos requeridos para conformar la estrategia de actuacin necesaria para completar una
actividad especfica. De esta forma, el sistema es capaz de guiar el efector final, evadiendo
diferentes obstculos y buscando la combinacin 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 programacin 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 diseado para representar secuencias arbitrarias de


octetos en una forma que no necesita ser humanamente legible.
Los algoritmos de codificacin y decodificacin son simples, pero los datos codificados son
sistemticamente slo alrededor del 33% ms 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 carcter adicional, "=", se utiliza para significar una funcin especfica para la
transformacin.)
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 dgito 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 lnea, espacios en blanco u otros caracteres que no se encuentra en la Tabla 1
deben de ser ignorado por el software de decodificacin.
Esta codificacin es prcticamente idntica a la utilizada en la privacidad de Correo Mayor (PEM),
tambin en la URL's de algunos sitios, PGP, Thunderbird y Evolution lo ocupan para el cifrado de
contraseas en los correos entre otros.
Base64 no es un algoritmo de compresin de datos, de hecho aumenta 25% los datos que
codificas; es un algoritmo para codificar datos binarios como texto para su transmisin o
almacenamiento en medios que no permiten transmisin de datos binarios (incluso en sistemas
viejos que manejan caracteres de 7 bits).
Se usa tambin por ejemplo en mails encriptados ya sea con certificados X509 o con PGP, as como
attachments de mail
Los certificados X509, llaves privadas y pblicas 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 ningn formato especial.
Los passwords en UNIX/Linux se guardan en base64, revisa tu /etc/passwd

1.3 Estudios a Fines


La informtica
Es la ciencia aplicada que abarca el estudio y aplicacin del tratamiento automtico de la
informacin utilizando dispositivos electrnicos y sistemas computacionales.
Tambin est definida como el procesamiento automtico de la informacin.
Conforme a ello, los sistemas informticos deben realizar las siguientes tres tareas bsicas:
Entrada: Captacin de la informacin digital.
Proceso: Tratamiento de la informacin.
Salida: Transmisin de resultados binarios.
En los inicios del procesado de informacin, con la informtica slo se facilitaba los trabajos
repetitivos y montonos del rea administrativa, gracias a la automatizacin de esos procesos, ello
trajo como consecuencia directa una disminucin de los costes y un incremento en la produccin.
En la informtica convergen los fundamentos de las ciencias de la computacin, la programacin y
las metodologas para el desarrollo de software, la arquitectura de computadores, las redes de
datos (como Internet), la inteligencia artificial y ciertas cuestiones relacionadas con la electrnica.
Se puede entender por informtica a la unin sinrgica de todo este conjunto de disciplinas.
Esta disciplina se aplica a numerosas y variadas reas del conocimiento o la actividad humana,
como por ejemplo: gestin de negocios, almacenamiento y consulta de informacin,
monitorizacin y control de procesos, industria, robtica, comunicaciones, control de transportes,
investigacin, desarrollo de juegos, diseo computarizado, aplicaciones/herramientas multimedia,
medicina, biologa, fsica, qumica, meteorologa, ingeniera, arte, etc.
Una de la aplicaciones ms importantes de la informtica es facilitar informacin 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 crticos.
Actualmente es difcil concebir un rea que no use, de alguna forma, el apoyo de la informtica; en
un enorme abanico que cubre desde las ms simples cuestiones domsticas hasta los clculos
cientficos ms complejos.
Entre las funciones principales de la informtica se cuentan las siguientes:
Creacin de nuevas especificaciones de trabajo.
Desarrollo e implementacin de sistemas informticos.
Sistematizacin de procesos.
Optimizacin de los mtodos y sistemas informticos existentes.

Inteligencia Artificial Convencional


Se conoce tambin como IA simblico-deductiva e IA dbil.
Est basada en el anlisis formal y estadstico del comportamiento humano ante diferentes
problemas:
Razonamiento basado en casos: Ayuda a tomar decisiones mientras se resuelven
ciertos problemas concretos.
Sistemas expertos: Infieren una solucin a travs del conocimiento previo del contexto
en que se aplica y de ciertas reglas o relaciones.
Redes bayesianas: Propone soluciones mediante inferencia estadstica.
Inteligencia artificial basada en comportamientos: que tienen autonoma y pueden
auto-regularse y controlarse para mejorar.

Inteligencia Artificial Computacional


La Inteligencia Computacional (tambin conocida como IA subsimblica-inductiva o IA fuerte)
implica desarrollo o aprendizaje interactivo (por ejemplo, modificaciones interactivas de los
parmetros en sistemas conexionistas).
El aprendizaje se realiza basndose en datos empricos.

Programacin
Existe una tendencia a identificar el proceso de creacin de un programa informtico con la
programacin, que es cierta cuando se trata de programas pequeos para uso personal, y que
dista de la realidad cuando se trata de grandes proyectos.
El proceso de creacin de software, desde el punto de vista de la ingeniera, incluye los siguientes
pasos:
1. Reconocer la necesidad de un programa para solucionar un problema o identificar la
posibilidad de automatizacin 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 anlisis de los requisitos del programa. Debe quedar claro cmo debe realizar el
programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa
se pueden especificar en esta fase.
4. Disear la arquitectura del programa. Se debe descomponer el programa en partes de
complejidad abordable.

5. Implementar el programa. Consiste en realizar un diseo detallado, especificando


completamente todo el funcionamiento del programa, tras lo cual la codificacin debera
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 ingeniera del software se centra en los pasos de planificacin y diseo del programa, mientras
que antiguamente (programacin artesanal) la realizacin de un programa consista nicamente
en escribir el cdigo.

Ingeniera de software
Es la disciplina o rea de la informtica que ofrece mtodos y tcnicas para desarrollar y mantener
software de calidad.
Esta ingeniera trata con reas muy diversas de la informtica y de las Ciencias de la Computacin,
tales como construccin de compiladores, Sistemas Operativos, o desarrollos Intranet/Internet,
abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de Sistema de
Informacin y aplicables a infinidad de reas (negocios, investigacin cientfica, medicina,
produccin, logstica, banca, control de trfico, meteorologa, derecho, Internet, Intranet, etc.).
Una definicin precisa an no ha sido contemplada en los diccionarios, sin embargo se pueden
citar las enunciadas por algunos de los ms prestigiosos autores:
1 - Ingeniera de Software es el estudio de los principios y metodologas para el desarrollo
y mantenimiento de sistemas software (Zelkovitz, 1978)
2 - Ingeniera de software es la aplicacin prctica del conocimiento cientfico al diseo y
construccin de programas de computadora y a la documentacin asociada requerida
para desarrollar, operar y mantenerlos. Se conoce tambin como Desarrollo de Software o
Produccin de Software ( Bohem, 1976).
3 - Ingeniera de Software trata del establecimiento de los principios y mtodos de la
ingeniera a fin de obtener software de modo rentable, que sea fiable y trabaje en
mquinas reales (Bauer, 1972).
4 - Es la aplicacin de un enfoque sistemtico, disciplinado y cuantificable al desarrollo,
operacin y mantenimiento del software; es decir, la aplicacin de la ingeniera al
software (IEEE, 1993).

1.4 Formalidades
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural,
pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros.
Las descripciones en lenguaje natural tienden a ser ambiguas y extensas.
El usar pseudocdigo y diagramas de flujo evita muchas ambigedades del lenguaje natural.
Dichas expresiones son formas ms estructuradas para representar algoritmos; no obstante, se
mantienen independientes de un lenguaje de programacin especfico.
Estructura general de un algoritmo
Algoritmo <nombre_del_algoritmo>
Inicio
definicin de constantes
declaracin de variables
Sentencia 1
Sentencia 2
.
.
.
Sentencia n
Fin
La descripcin de un algoritmo usualmente se hace en tres niveles:
1. Descripcin de alto nivel. Se establece el problema, se selecciona un modelo matemtico y
se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo
detalles.
2. Descripcin formal. Se usa pseudocdigo para describir la secuencia de pasos que
encuentran la solucin.
3. Implementacin. Se muestra el algoritmo expresado en un lenguaje de programacin
especfico o algn objeto capaz de llevar a cabo instrucciones.
Tambin es posible incluir un teorema que demuestre que el algoritmo es correcto, un anlisis de
complejidad o ambos.

Diagrama de flujo que expresa un algoritmo para calcular la raz cuadrada de un nmero x

Diagramas de Flujo
Los diagramas de flujo son descripciones grficas de algoritmos; usan smbolos conectados con
flechas para indicar la secuencia de instrucciones y estn regidos por ISO.
Los diagramas de flujo son usados para representar algoritmos pequeos, ya que abarcan mucho
espacio y su construccin es laboriosa.
Por su facilidad de lectura son usados como introduccin a los algoritmos, descripcin de un
lenguaje y descripcin de procesos a personas ajenas a la computacin.
Pseudocdigo es la descripcin de un algoritmo que asemeja a un lenguaje de programacin 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.

Pseudocdigo
El pseudocdigo no est regido por ningn estndar. pseudo viene de falso y por ende es un
cdigo al que aunque es entendible no se aplica al proceso que debe realizar la maquina.

Mquina de Turing
La mquina de Turing es un modelo matemtico, diseado por Alan Turing, que formaliza el
concepto de algoritmo. A este modelo se le refiere comnmente como la "descripcin de ms bajo
nivel" por el hecho de que no utiliza ninguna expresin coloquial.

Implementacin
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 elctrico o un aparato mecnico.
Algunos algoritmos inclusive se disean especialmente para implementarse usando lpiz y papel.
El algoritmo de multiplicacin tradicional, el algoritmo de Euclides, la criba de Eratstenes y
muchas formas de resolver la raz cuadrada son slo algunos ejemplos.

Ejemplo de algoritmo Java Base64


1 package encode;
2
3 /**
4 * @author Gabriel Mtz. Njera
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 codificacin 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

Bibliografa

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

The Art of Computer Programming, Knuth, D. E. [quien fue tambin, 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 Andrs, Homo Cybersapiens. La Inteligencia artificial y la humana, 2002, ISBN 84313-1982-8

Luis M Gonzalo, Inteligencia Humana e Inteligencia Artificial, Madrid, 1987. ISBN 84-7118490-7

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

Вам также может понравиться