ESTRUCTURA DE DATOS
Árboles Splay
Son árboles Binarios de Búsqueda Equilibrados, que mantienen el balance sin
necesidad de añadir
propiedades (campos adicionales) a los nodos para verificar las condiciones de
equilibrio. Utilizan
'operaciones splay', que como se verá a continuación se
basan exclusivamente en rotaciones.
Operaciones Básicas: Splay
La idea del
esplayado (splay) de un nodo consiste en llevar el nodo a la raíz a través de
rotaciones.
Supongamos que deseamos hacer splay sobre un nodo X de un árbol; existen 3
casos posibles
Rotación Zig: El padre de X es la raíz, es el caso más sencillo, se realiza una
rotación simple a la izquierda
o derecha, según sea el caso:
rotacion zig
Rotación Zig-Zig: El padre de X no es la raíz y X y PADRE(X) son ambos hijos
izquierdos (o ambos hijos
derechos). Se realiza en dos pasos: primero se rota PADRE(X)
hasta llevarlo a la raíz, y luego se rota X.
rotacion zig-zig
200914939
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA
DICIEMBRE 2013
ESTRUCTURA DE DATOS
Rotación Zig-Zag: El padre de X no es la raíz y X es hijo izquierdo (derecho) y
PADRE(X) es hijo derecho
(izquierdo). Se realiza en dos pasos: primero se rota X hasta llevarlo a la
posición de su padre, y luego
hasta llevarlo a la raíz.
rotacion zig-zag
Para completar el splay de un nodo X, se
realizan repetidamente los casos anteriores, hasta llevarlo a la
raíz.
OperacionesBásicas: Inserción
Se inserta como
en un ABB y luego se aplica splay al nodo insertado.
arbol insertar(tipoclave valor, arbol t)
Operaciones Básicas: Eliminación
Se busca el nodo a eliminar y se hace splay sobre el. Luego, estando en la
raíz, con hijos left y right, se
elimina de la siguiente manera: se busca el mayor nodo del subárbol izquierdo y
se hace splay sobre
este. como
hijo derecho de este se transforma el subárbol derecho (right).
arbol borrar(tipoclave valor, arbol t)
else t=p->left;
LiberaNodo(p);
return(t);
}
USOS
ï‚·
ï‚·
ï‚·
ï‚·
ï‚·
Simulaciones en 3D, principalmente juegos, dibujan de forma eficiente los
escenarios.
Tablas de enrutamiento que utilizan los
routers para calcular la ruta más corta al momento de
transmitir información de un punto a otro.
En aplicaciones de inteligencia artificial para la búsqueda
de caminos. Por ejemplo, programas
que contienen información sobre una ciudad y calculan cómo llegar de una
dirección a otra
usan algoritmos de búsqueda que pueden utilizar árboles binarios.
Los compiladores crean árboles de sintaxis, que pueden ser
árboles binarios.
En algoritmos de compresión, como el utilizado en el formato
jpeg.
SERVIDORES
En informática, un servidor es un tipo de software que
realiza ciertas tareas en nombre de los usuarios.
El término servidor ahora también se utiliza para referirse al ordenador físico
en el cual funciona ese
software, una máquina cuyo propósito es proveer datos de modo que otras
máquinas puedan utilizar
esos datos.
Los archivos para cada sitio de Internet se almacenan y se
ejecutan en el servidor. Hay muchos
servidores en Internet y muchos tipos de servidores, pero comparten la función
común de proporcionar
el acceso a los archivos y servicios.
Un servidor sirve información a los ordenadores que se
conecten a él. Cuandolos usuarios se conectan a
un servidor pueden acceder a programas, archivos y
otra información del
servidor.
En la web, un servidor web es un ordenador que usa el
protocolo http para enviar páginas web al
ordenador de un usuario cuando el usuario las solicita.
Los servidores web, servidores de correo y servidores de bases de datos son a
lo que tiene acceso la
mayoría de la gente al usar Internet.
200914939
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA
DICIEMBRE 2013
ESTRUCTURA DE DATOS
APLICACIONES
El estándar J2EE permite el desarrollo de aplicaciones de empresa de una manera
sencilla y eficiente.
Una aplicación desarrollada con las tecnologías J2EE permite ser desplegada en
cualquier servidor de
aplicaciones o servidor web que cumpla con el estándar. Un
servidor de aplicaciones es una
implementación de la especificación J2EE. La arquitectura J2EE es la siguiente
Figura 1. Arquitectura J2EE.
Definimos a continuación algunos de los conceptos que aparecen en la figura 1
Cliente web (contenedor de applets): Es usualmente un navegador e interactúa
con el contenedor web
haciendo uso de HTTP. Recibe páginas HTML o XML y puede
ejecutar applets y código JavaScript.
Aplicación cliente: Son clientes que no se ejecutan dentro de un navegador y pueden utilizar cualquier
tecnología para comunicarse con el contenedor web o directamente con la base de
datos.
Contenedor web: Es lo que comúnmente denominamos servidor web. Es la parte
visible del
servidor de
aplicaciones. Utiliza losprotocolos HTTP y SSL (seguro) para
comunicarse.
200914939
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA
DICIEMBRE 2013
ESTRUCTURA DE DATOS
Servidor de aplicaciones: Proporciona servicios que soportan la ejecución y
disponibilidad de las
aplicaciones desplegadas. Es el corazón de un gran
sistema distribuido.
Frente a la tradicional estructura en dos capas de un
servidor web (ver Figura 2) un servidor de
aplicaciones proporciona una estructura en tres capas que permite estructurar
nuestro sistema de
forma más eficiente. Un concepto que debe quedar claro
desde el principio es que no todas las
aplicaciones de empresa necesitan un servidor de aplicaciones para funcionar.
Una pequeña aplicación
que acceda a una base de datos no muy compleja y que no sea distribuida
probablemente no necesitará
un servidor de aplicaciones, tan solo con un servidor
web (usando servlets y jsp) sea suficiente.
Como hemos
comentado, un servidor de aplicaciones es una
implementación de la especificación J2EE.
Existen diversas implementaciones, cada una con sus propias características que
la pueden hacer más
atractiva en el desarrollo de un determinado sistema.
Algunas de las implementaciones más utilizadas
son las siguientes:
BEA WebLogic
IBM WebSphere
Sun-Netscape IPlanet
Sun One
Oracle IAS
Borland AppServer
HP Bluestone
200914939
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA
DICIEMBRE 2013
ESTRUCTURA DE DATOS
Los dos primeros son los más utilizados en el mercado. Nosotros
vamos autilizar el servidor BEA
WebLogic. La principal ventaja de WebLogic es que podemos crear un sistema con varias máquinas con
distintos sistemas operativos: Linux, Unix, Windows NT, etc. El
sistema funciona sin importarle en qué
máquina está corriendo el servidor.
Servidor proxy: Centraliza peticiones de los clientes y las reenvía hacia otras
máquinas. Puede servir
como
nivel de indirección y seguridad. También puede ser usado
para realizar balanceo de carga.
Cortafuegos (firewall): Proporciona servicios de filtrado, autorización y autentificación.
Puede actuar
como
proxy y ayuda a manejar los ataques de los hackers.
Máquina: Representa una unidad física donde reside un
servidor. Una máquina se define como tipo Unix
o no Unix (Windows NT, etc.).
Servidor: Un servidor es una instancia de la clase
weblogic.Server ejecutándose dentro de una máquina
virtual de Java. Un servidor está alojado en una
máquina, pero una máquina puede contener varios
servidores. Si un servidor no lo declaramos en ninguna
máquina WLS asume que está en una creada por
defecto.
Dominio: Un dominio es una unidad administrativa.
Sirve para declarar varios servidores, aplicaciones
etc. y que todos ellos estén asociados mediante el nombre del dominio.
Clustering (asociación): Los clusters permiten asociar maquinas y servidores
para que actúen de forma
conjunta como
una única instancia. La creación de un cluster va a
permitir el balanceo de carga y la
recuperación frente a fallos.
Balanceo de carga: Es una técnica utilizada para distribuir laspeticiones entre
varios servidores de tal
forma que todos los servidores respondan al mismo número de peticiones.
Recuperación ante fallos (failover): Permite evitar la caída de un sistema cuando una máquina deja de
funcionar o funciona incorrectamente.
Puerto de escucha: Un servidor tiene varios puertos
por los que puede 'escuchar' las peticiones. Existen
puertos ya asignados a aplicaciones concretas, como por ejemplo el
puerto de http que suele ser el 80.
Los puertos permiten que varias aplicaciones puedan atender
distintas peticiones en la misma máquina.
Un puerto en una dirección se especifica de la siguiente manera:
https://localhost:7001/direc . Con
:7001
indicamos el puerto que estamos atacando. Los puertos del 0 al 1023 son
reservados por el sistema.
Podemos disponer de los puertos del 1024 al 65536. Hay que tener
en cuenta que dos servicios no
pueden estar escuchando en el mismo puerto.
Modo producción y modo desarrollo. Hablaremos
muy a menudo de modo desarrollo y modo
producción. El modo desarrollo es cuando nos
encontramos desarrollando nuestra aplicación y no está
disponible exteriormente. El modo producción es cuando
está funcionando a pleno rendimiento y
tenemos clientes que se encuentran utilizándola. Por defecto, un dominio se arranca en modo
desarrollo.
200914939
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA
DICIEMBRE 2013
ESTRUCTURA DE DATOS
SERVICIOS WEB
La W3C define 'Servicio web' como un sistema de software
diseñado para permitir interoperatibilidad
máquinaa máquina en una red. En general, los servicios web son sólo APIs Web
que pueden ser
accedidas en una red, como internet, y ejecutadas en un
sistema de hosting remoto.
En términos sencillos, un servicio web es cualquier
sistema de software diseñado para soportar
interacción máquina a máquina sobre una red.
Esta amplia definición abarca múltiples y diferentes
sistemas, pero en general 'servicio web' suele
referir a clientes y servidores que se comunican usando mensajes XML que siguen
el estándar SOAP.
En definitiva, permite comunicación entre diferentes máquinas, con diferentes
plataformas y entre
programas distintos. Esta comunicación se logra a través de
la adoptación de diversos estándares
abiertos.
El organismo WS-I se creó para mejorar la interoperatibilidad
entre las distintas implementaciones de
los servicios web.
Algunas especificaciones que define el servicio web
Las especificaciones que definen los servicios web son intencionalmente
modulares y esto resulta en
que no hay ni un sólo documento que las contenga a
todas ellas. Tampoco no hay ni un solo conjunto
estable de especificaciones.
SOAP, WSDL, UDDI, WS-Security, WS-ReliableMessaging,
WS-Reliability, WS-Addressing
Ventajas de los servicios web
ï‚·
ï‚·
ï‚·
ï‚·
Aumenta la interoperatibilidad entre programas independientemente de la
plataforma en
donde están instalados.
Aumenta la interoperatibilidad entre servicios y programas de
diferentes compañías y ubicados
en diferentes lugares geográficos.
Fomentan los estándares y protocolosbasados en texto,
haciendo más fácil acceder y entender
su contenido y funcionamiento (pero, en general, produciendo una baja en su
rendimiento).
Al emplear HTTP, pueden utilizar un sistema firewall
sin cambiar las reglas de filtrado.
Desventajas de los servicios web
ï‚·
ï‚·
No son tan desarrollados para realizar transacciones comparado a otros sistemas
como CORBA
(Common Object Request Broker Architecture).
Su rendimiento es bajo comparado con otros sistemas como CORBA, DCOM o RMI
especialmente por el uso de protocolos y estándares basados en texto.
200914939
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA
DICIEMBRE 2013
ESTRUCTURA DE DATOS
SOLUCIONES WEB POR EMPRESA
The PHP Group: PHP
PHP es un lenguaje de programación de uso general de
código del lado del servidor originalmente
diseñado para el desarrollo web de contenido dinámico. Fue uno de los primeros
lenguajes de
programación del lado
del servidor
que se podían incorporar directamente en el documento HTML en
lugar de llamar a un archivo externo que procese los datos. El código es
interpretado por un servidor
web con un módulo de procesador de PHP que genera la página Web resultante. PHP ha evolucionado
por lo que ahora incluye también una interfaz de línea de comandos que puede
ser usada en
aplicaciones gráficas independientes. Puede ser usado en la mayoría de
los servidores web al igual que
en casi todos los sistemas operativos y plataformas sin ningún costo.
Fue creado originalmente por Rasmus Lerdorf en 1995.
Actualmente ellenguaje sigue siendo
desarrollado con nuevas funciones por el grupo PHP.2 Este lenguaje forma parte
del software libre
publicado bajo la licencia PHP, que es incompatible con la Licencia Pública
General de GNU debido a las
restricciones del uso del término PHP.3
Django Project -> Python -> Django
Django es un framework de desarrollo web de código abierto, escrito en Python,
que respeta el
paradigma conocido como Model Template View. Fue desarrollado en origen para gestionar varias
páginas orientadas a noticias de la World Company de Lawrence, Kansas, y fue liberada
al público bajo
una licencia BSD en julio de 2005; el framework fue nombrado en alusión al
guitarrista de jazz gitano
Django Reinhardt.
En junio del
2008 fue anunciado que la recién formada Django Software Foundation se haría
cargo de
Django en el futuro.
La meta fundamental de Django es facilitar la creación
de sitios web complejos. Django pone énfasis en
el re-uso, la conectividad y extensibilidad de componentes, el desarrollo
rápido y el principio No te
repitas (DRY, del
inglés Don't Repeat Yourself). Python es usado en todas las partes del framework
incluso en configuraciones, archivos, y en los modelos de datos.
Rails Core Team -> Ruby on Rails
Ruby on Rails, también conocido como RoR o Rails, es un framework de
aplicaciones web de código
abierto escrito en el lenguaje de programación Ruby, siguiendo el paradigma de
la arquitectura Modelo
Vista Controlador (MVC). Trata de combinar la simplicidad con la posibilidad de
desarrollaraplicaciones
del
mundo real escribiendo menos código que con otros frameworks y con un mínimo de
configuración.
El lenguaje de programación Ruby permite la metaprogramación, de la cual Rails
hace uso, lo que resulta
200914939
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA
DICIEMBRE 2013
ESTRUCTURA DE DATOS
en una sintaxis que muchos de sus usuarios encuentran muy legible. Rails se distribuye a través de
RubyGems, que es el formato oficial de paquete y canal de distribución de
bibliotecas y aplicaciones
Ruby.
Los principios fundamentales de Ruby on Rails incluyen No te repitas (del inglés Don't repeat
yourself
DRY) y Convención sobre configuración.
No te repitas significa que las definiciones deberían
hacerse una sola vez. Dado que Ruby on Rails es un
framework de pila completa, los componentes están integrados de manera que no
hace falta establecer
puentes entre ellos. Por ejemplo, en ActiveRecord, las definiciones de las
clases no necesitan especificar
los nombres de las columnas; Ruby puede averiguarlos a partir de la propia base
de datos, de forma que
definirlos tanto en el código como en el programa sería
redundante.
Convención sobre configuración significa que el programador
sólo necesita definir aquella configuración
que no es convencional. Por ejemplo, si hay una clase Historia en el
modelo, la tabla correspondiente de
la base de datos es historias, pero si la tabla no sigue la convención (por
ejemplo blogposts) debe ser
especificada manualmente (set_table_name 'blogposts').Así, cuando se
diseña una aplicación
partiendo de cero sin una base de datos preexistente, el seguir las
convenciones de Rails significa usar
menos código (aunque el comportamiento puede ser configurado si el sistema debe
ser compatible con
un sistema heredado anterior)
ORACLE->JAVA->JSP
JavaServer Pages (JSP) es una tecnología que ayuda a los desarrolladores de
software a crear páginas
web dinámicas basadas en HTML, XML entre otros tipos de documentos. JSP es
similar a PHP pero usa el
lenguaje de programación Java.
Para desplegar y correr JavaServer Pages, es requerido un
servidor web compatible con contenedores
servlet como
Apache Tomcat o Jetty.
TagLibs -> JSP -> Servidor Aplicaciones (Servlets) -> Cliente
(Navegador
El rendimiento de una página JSP es el mismo que tendría el servlet
equivalente, ya que el código es
compilado como
cualquier otra clase Java. A su vez, la máquina virtual
compilará dinámicamente a
código de máquina las partes de la aplicación que lo requieran. Esto
hace que JSP tenga un buen
desempeño y sea más eficiente que otras tecnologías web que ejecutan el código
de una manera
puramente interpretada.
La principal ventaja de JSP frente a otros lenguajes es que el lenguaje Java es
un lenguaje de propósito
general que excede el mundo web y que es apto para crear clases que manejen
lógica de negocio y
acceso a datos de una manera prolija. Esto permite separar en niveles las
aplicaciones web, dejando la
parte encargada de generar el documento HTML en el archivo JSP.
DIEGO RAFAELROMERO
200914939
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA
DICIEMBRE 2013
ESTRUCTURA DE DATOS
Otra ventaja es que JSP hereda la portabilidad de Java, y es posible ejecutar
las aplicaciones en múltiples
plataformas sin cambios. Es común incluso que los
desarrolladores trabajen en una plataforma y que la
aplicación termine siendo ejecutada en otra.
Los servlets y Java Server Pages (JSPs) son dos métodos de creación de páginas
web dinámicas en
servidor usando el lenguaje Java. En ese sentido son
similares a otros métodos o lenguajes tales como el
PHP, ASP o los CGIs, programas que generan páginas web en el servidor. Sin embargo, se diferencian de
ellos en otras cosas.
Para empezar, los JSPs y servlets se ejecutan
en una máquina virtual Java, lo cual permite que, en
principio, se puedan usar en cualquier tipo de
ordenador, siempre que exista una máquina virtual Java
para él. Cada servlet (o JSP, a partir de ahora lo usaremos de forma
indistinta) se ejecuta en su propio
hilo, es decir,
en su propio contexto; pero no se comienza a ejecutar cada vez que recibe una
petición
sino que persiste de una petición a la siguiente, de forma que no se pierde
tiempo en invocarlo (cargar
programa + intérprete). Su persistencia le permite también hacer una serie de
cosas de forma más
eficiente: conexión a bases de datos y manejo de sesiones, por ejemplo.
Las JSPs son en realidad una forma alternativa de crear servlets ya que el
código JSP se traduce a código
de servlet Java la primera vez que se le invoca y en adelantees el código del
nuevo servlet el que se
ejecuta produciendo como salida el código HTML que compone la página web de
respuesta.
Perl
Perl es un lenguaje de programación diseñado por Larry
Wall en 1987. Perl toma características del
lenguaje C, del
lenguaje interpretado bourne shell (sh), AWK, sed, Lisp y, en un grado
inferior, de
muchos otros lenguajes de programación.
Estructuralmente, Perl está basado en un estilo de
bloques como los del C o AWK, y fue ampliamente
adoptado por su destreza en el procesado de texto y no tener ninguna de las
limitaciones de los otros
lenguajes de script.
La estructura completa de Perl deriva ampliamente del lenguaje C. Perl es un
lenguaje imperativo, con
variables, expresiones, asignaciones, bloques de código delimitados por llaves,
estructuras de control y
subrutinas.
Perl también toma características de la programación shell.
Todas las variables son marcadas con un
Sigilo precedente (Sigil, en inglés). Los sigilos identifican inequívocamente
los nombres de las variables
permitiendo a Perl tener una rica sintaxis. Notablemente, los sigilos permiten
interpolar variables
directamente dentro de las cadenas de caracteres (strings). Como
en los shell, Perl tiene muchas
funciones integradas para tareas comunes y para acceder a los recursos del
sistema.
Perl toma las listas del Lisp, hash (memoria
asociativa) del AWK y expresiones regulares del
sed. Todo
esto simplifica y facilita todas las formas del análisis sintáctico, manejo de texto y
tareas de gestión de
datos.