GEOMETRÍA COMPUTACIONAL: EL PROBLEMA DEL CERCO



Documentos relacionados
Industrial Data ISSN: Universidad Nacional Mayor de San Marcos Perú

ALGORITMOS GEOMÉTRICOS. Análisis y diseño de algoritmos II- 2009

Funciones definidas a trozos

Relaciones entre conjuntos

1 Estática Básica Prohibida su reproducción sin autorización. CONCEPTOS DE FISICA MECANICA. Conceptos de Física Mecánica

SISTEMA DE PLANOS ACOTADOS APUNTES REALIZADOS POR ANTONIO CUESTA

Unidad 5. Aplicaciones de las derivadas. Objetivos. Al terminar la unidad, el alumno:

Algorítmica y Lenguajes de Programación. Ordenación (i)

Geometría Computacional

Geometría Tridimensional

Maximización n de la Utilidad

Capítulo 1. Vectores en el plano Introducción

Líneas Equipotenciales

(a) El triángulo dado se descompone en tres segmentos de recta que parametrizamos de la siguiente forma: (0 t 1); y = 0. { x = 1 t y = t. (0 t 1).

Geometría Computacional

Este documento ha sido generado para facilitar la impresión de los contenidos. Los enlaces a otras páginas no serán funcionales.

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Capítulo 3. Congruencias Clases residuales

Guía 2 Del estudiante Modalidad a distancia. Modulo CÁLCULO UNIVARIADO ADMINISTRACIÓN TURÍSTICA Y HOTELERA II SEMESTRE

TEMA 8: LÍMITES DE FUNCIONES. CONTINUIDAD

Unidad: Representación gráfica del movimiento

Lic. Manuel de Jesús Campos Boc

Actividades recreativas para recordar a los vectores. 1) Representa en un eje de coordenadas las siguientes sugerencias:

_ Antología de Física I. Unidad II Vectores. Elaboró: Ing. Víctor H. Alcalá-Octaviano

Traslaciones, Homotecias, Giros y Simetrías

Continuidad y ramas infinitas. El aumento A producido por cierta lupa viene dado por la siguiente ecuación: A = 2. lm í

GEOMETRÍA DESCRIPTIVA SISTEMAS DE PROYECCIÓN

TEORÍA TEMA Definición de ESFUERZOS CARACTERÍSTICOS ( Mf.; Q; N)

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES

SISTEMAS DE COORDENADAS SISTEMA COORDENADO UNIDIMENSIONAL

VECTORES. Módulo, dirección y sentido de un vector fijo En un vector fijo se llama módulo del mismo a la longitud del segmento que lo define.

Tema 07. LÍMITES Y CONTINUIDAD DE FUNCIONES

UNIDAD 4: PLANO CARTESIANO, RELACIONES Y FUNCIONES. OBJETIVO DE APRENDIZAJE: Representar gráficamente relaciones y funciones en el plano cartesiano.

VECTORES: VOCABULARIO 1. Abscisa de un punto. 2. Ordenada de un punto. 3. Concepto de vector. 4. Coordenadas o componentes de un vector. 5.

Apuntes de Matemática Discreta 1. Conjuntos y Subconjuntos

Gráficas. Funciones Reales. Variable Real

ALGEBRA DE VECTORES Y MATRICES VECTORES

NÚMEROS NATURALES Y NÚMEROS ENTEROS

Movimientos en el plano

Tema 2 Límites de Funciones

Muchas veces hemos visto un juego de billar y no nos percatamos de los movimientos de las bolas (ver gráfico 8). Gráfico 8

Teoría del Juego - Juegos Combinatoriales Imparciales

Gráfica de una función

6. VECTORES Y COORDENADAS

EXPRESIONES ALGEBRAICAS. POLINOMIOS

a < b y se lee "a es menor que b" (desigualdad estricta) a > b y se lee "a es mayor que b" (desigualdad estricta)

ESTÁTICA 2. VECTORES. Figura tomada de

n es la ordenada en el origen, el punto de corte de la recta con el eje de ordenadas (el vertical, y)

Soluciones a los problemas Olimpiada de Matemáticas Fase local Extremadura Enero de 2015

NOCIONES BÁSICAS DE LA GEOMETRÍA ANALÍTICA

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Matemática I Extremos de una Función. Definiciones-Teoremas

2 año secundario. Función Lineal MINISTERIO DE EDUCACIÓN. Se llama función lineal porque la potencia de la x es 1. Su gráfico es una recta.

Te damos los elementos básicos de los vectores para que puedas entender las operaciones básicas.

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación

Una desigualdad se obtiene al escribir dos expresiones numéricas o algebraicas relacionadas con alguno de los símbolos

REPRESENTACIÓN DE FUNCIONES

Economía - IN2C1. Otoño 2008 Auxiliar 3

Introducción. La geometría analítica es el estudio de la geometría mediante un sistema de coordenadas que lleva asociada un álgebra.

A.2. Notación y representación gráfica de vectores. Tipos de vectores.

La derivada de y respecto a x es lo que varía y por cada unidad que varía x. Ese valor se designa por dy dx.

Usando los Codificadores Cuadráticos

2. GRAFICA DE FUNCIONES

9. Lección 9: Cambios de Fase

Descripción: dos. función. decreciente. Figura 1. Figura 2

3.1 DEFINICIÓN. Figura Nº 1. Vector

Tema 2. Software. Informática (1º Ingeniería Civil)

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

requerido). vectoriales, y operan según el Álgebra a continuación Vector. dirección. representados.

MATEMÁTICAS para estudiantes de primer curso de facultades y escuelas técnicas

Curso 0 de Informática

FUNCIONES Y GRÁFICAS.

PROGRAMACIÓN LINEAL Introducción Inecuaciones lineales con 2 variables

TRABAJO Y ENERGÍA. W = F d [Joule] W = F d cos α. Donde F y d son los módulos de la fuerza y el desplazamiento, y α es el ángulo que forman F y d.

a. Dibujar los paralelogramos completos, señalar los vértices con letras.

Tema 1: Fundamentos de lógica, teoría de conjuntos y estructuras algebraicas: Apéndice

UNIVERSIDAD NACIONAL DE ASUNCIÓN FACULTAD DE INGENIERÍA CURSO PREPARATORIO DE INGENIERÍA (CPI) EJERCITARIO TEÓRICO DE GEOMETRÍA ANALÍTICA

Sesión 3 - Movimiento Diferencial

Fundamentos del trazado electrocardiográfico

Unidad 5 Estudio gráfico de funciones

AUTOR CARLOS EDUARDO BUENO VERGARA JORGE ARMANDO BUENO VERGARA USO DE LOS OBJETOS DEL PROGRAMA. Dfd INFORMÁTICA II PROFESOR. JOSÉ FRANCISCO AMADOR

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Matrices Invertibles y Elementos de Álgebra Matricial

GEOMETRÍA 1.- INTRODUCCIÓN:

VALUACIÓN DE BONOS. 4 Valuación de un bono en una fecha entre cupones

FUNCIONES. Funciones. Qué es una función? Indicadores. Contenido

Capítulo 4 Procesos con estructuras de repetición

Operaciones con vectores y matrices ECONOMETRÍA I OPERACIONES CON VECTORES Y MATRICES. Ana Morata Gasca

mcd y mcm Máximo Común Divisor y Mínimo Común múltiplo José de Jesús Angel Angel jjaa@math.com.mx

Lección 2. Objetivo: Interpretar una fracción como división. Lección Problema de aplicación (8 minutos) Estructura de lección sugerida

Unidad 6 Cálculo de máximos y mínimos

PROBLEMAS MÉTRICOS. Página 183 REFLEXIONA Y RESUELVE. Diagonal de un ortoedro. Distancia entre dos puntos. Distancia de un punto a una recta

Lección 1-Introducción a los Polinomios y Suma y Resta de Polinomios. Dra. Noemí L. Ruiz Limardo 2009

Ecuación ordinaria de la circunferencia

UNIDAD 4 PROCESOS DE MARKOV

Modulo 1 El lenguaje Java

QUÉ ES Y PARA QUÉ SIRVE UML? VERSIONES DEL LENGUAJE UNIFICADO DE MODELADO. TIPOS DE DIAGRAMAS. INGENIERÍA DEL SOFTWARE (DV00205D)

Escuela Técnica Superior de Ingeniería Universidad de Sevilla. GradoenIngenieríadelas Tecnologías de Telecomunicación EJERCICIOS DE MATEMÁTICAS II

Nombre del polinomio. uno monomio 17 x 5 dos binomio 2x 3 6x tres trinomio x 4 x 2 + 2

INTRODUCCIÓN A VECTORES Y MAGNITUDES

Transcripción:

Ind. Revista data de 8(), la Facultad 005 de Ingeniería Industrial Vol. (8) :. 69-76 (005) UNMSM ISSN: 560-946 (imreso) / ISSN: 80-9993 (electrónico) GEOMETRÍA COMPUTACIONAL: EL PROBLEMA DEL CERCO CONVEXO Receción: Noviembre de 005 / Acetación: Diciembre de 005 () Edgar Ruiz Lizama () Eduardo Raffo Lecca RESUMEN El artículo tiene or objetivo resentar los concetos fundamentales de la geometría comutacional mostrar una solución al roblema del cerco convexo, utilizando el algoritmo de Graham. Para la imlementación de la solución, los autores usan el lenguaje de rogramación Java. Palabras Clave: Geometría comutacional, diagramas de Voronoi, laneamiento de movimiento, roblema del cerco convexo, algoritmo de Graham. COMPUTATIONAL GEOMETRY: THE CONVEX HULL PROBLEM ABSTRACT The objective of this work is to show fundamental concets of comutational geometr and one solution for the convex hull roblem, using the Graham algorithm. The authors use the Java language rogramming in order to imlement the solution. Ke words: Comutational geometr, Voronoi diagrams, motion lanning, convex hull roblem, Graham algorithm. INTRODUCCIÓ N La geometría comutacional es una rama de la ciencia de la comutación emergió en la década de 970. Estudia los algoritmos que resuelven roblemas geométricos. Su alicación, va desde el diseño de los VLSI, hasta el CAD (Comuter-Aided Design), el CAM, comutación gráfica GIS (sistemas de información geográfica)[]. Imagine los teléfonos úblicos en una urbanización como contar con un maa que muestre las regiones en donde se encuentre el teléfono más cercano. Una distribución osible se resenta en la Figura. A la subdivisión de un área o localidad en regiones, se conoce como diagrama de Voronoi; ara hacer esto se hace uso de algoritmos geométricos. Sea un conjunto de obstáculos geométricos (como los mostrados en la Figura ), asuma que se desea encontrar la conexión más corta entre dos untos geométricos, salvando obstáculos. Este roblema que es crucial en robótica se conoce como laneamiento del movimiento (motion lanning), el cual hace uso de algoritmos geométricos. Un clásico roblema en CG (del ingles Comutational Geometr) es el cerco convexo o CH (Convex Hull); este crea un subconjunto S de un lano denominado convexo si solo sí, cualquier ar de untos, q S; es decir el segmento q está contenido comletamente en S (ver Figura 3). El Cerco convexo CH(S) (se lee CH de S) es el más equeño conjunto convexo en S. Veamos el siguiente ejemlo: () Ingeniero Industrial. Profesor del Deartamento de Ingeniería de Sistemas e Informática, UNMSM. E-mail: eruizl@unmsm.edu.e () Ingeniero Industrial. Profesor del Deartamento de Ingeniería de Sistemas e Informática, UNMSM. E-mail: eraffol@unmsm.edu.e entrada :,, 3, 4, 5, 6 salida : 4, 5, 6, (ver Figura 4) MÉTODOS GEOMÉTRICOS ELEMENTALES Las alicaciones en geometría comutacional actúan sobre objetos geométricos simles: unto, línea olígono []. Puntos. Es el objeto fundamental, es considerado como un ar de enteros: las coordenadas habituales en el lano cartesiano. 69

>>> Geometría comutacional: el roblema del cerco convexo Figura. Área dividida en regiones Figura. Esquema del laneamiento del movimiento 4 S 5 3 q 7 6 Figura 3. El roblema del cerco convexo Figura 4. Un cerco convexo + 3 Figura 5. Una línea Figura 6. Vectores el roducto cruz (Positivo) anti horario horario (Negativo) 0 0 0 Figura 7. Sentido horario x Figura 8. Producto cruzado negativo 70

Ind. data 8(), 005 Edgar Ruiz L. Eduardo Raffo L. >>> Línea. Una línea es un ar de untos, que se suone están unidos or un segmento de línea recta. Para esecificar las roiedades de un segmento de línea recta, se define la combinación convexa de = (x, ) = (x, ), como un unto 3 = (x 3, 3 ); existiendo un α, tal que 0 α, 3 = α + (- α), siendo 3 un unto que está contenido en el segmento de línea (ver figura 5). x 3 = α x + (-α) x 3 = α + (-α) Considere los vectores ; su roducto cruzado x se interreta como el área del aralelogramo formado or (0,0),, + (ver figura 6); se define como: x x = det = x x x Si es ositivo, entonces es sentido horario de en caso que el roducto cruzado sea cero, se dice que son colineales. El roblema de determinar si dos segmentos consecutivos se encuentran a la izquierda o a la derecha: 0 con resecto a ; equivale a encontrar el ángulo entre 0. Utilizando el roducto cruzado se tiene que ( 0 ) x ( 0 ) En caso que el roducto cruzado sea negativo 0 es antihorario con resecto a 0 se encuentra a la izquierda. Un roducto cruzado ositivo es tomado como sentido horario con resecto a 0 es a la derecha. Al resecto ver la Figura 8. Se uede clasificar el unto P con resecto a una región. Así uede un unto P, encontrarse: a la izquierda, derecha, origen, destino, entre los dos untos, arriba o abajo (véase la Figura 9). SEGMENTOS DE LÍNEA Un segmento de línea 0, consiste de los untos finales 0 (véase Figura 0). Si o es el origen de un segmento de línea es el destino, entonces es un segmento de línea dirigido 0 ; denominado arco o borde (edge). Un arco osee dos untos finales: origen destino; or defecto el unto 0 es (0,0) destino es (,0). La rotación de un arco es mover a 90 en sentido horario los untos finales (véase la Figura ). donde: m = 0.5* ( - 0 ) = - 0 como n.( - 0 ) = 0, con - 0 = (x,) n = (,-x) origen = m - 0.5*n destino = m + 0.5*n Se observa que una doble notación o twice es la rotación de una rotación (Ver figura ) Para determinar el unto en t, se tiene que este es igual a 0 + t *( 0) Para ínter seccionar un objeto arco con otro denominado f, se tiene que: P(t) - C coincide con n.(p(t) - c) = 0 cd arriba destino destino izquierda entre derecha 0 origen origen abajo o Figura 9. Clasificación de P Figura 0. Segmento de línea 0 7

>>> Geometría comutacional: el roblema del cerco convexo, t = m (t) o n o, t = 0 Figura. Rotación o arco Figura. Rotación de rotación n.((a + t(b-a)) - c) = 0 n.(a - c) + tn.(b - a) = 0 dición es o.x sea diferente a.x (orque en otro caso es!): Si n.(b-a) es cero; se tiene que b-a d-c son erendiculares al vector n. Al clasificar el arco f, si este es LEFT o RIGHT retorna PARALELO; en otro caso COLINEAL. El valor de t es n.( a c) t = n.( b a) n.( a c) n.( b a) que indica que ha intersección, retornando INTER- SECCION (véase la Figura 3). Para evaluar la endiente (o sloe, en inglés), la con- endiente =. 0.. x 0. x El valor de la ordenada en base a la abscisa x (según la figura 4), es: = endiente *( x 0. x) + 0. EL PROBLEMA DEL CERCO CONVEXO Un olígono convexo[5], es un olígono con la roiedad de que cualquier segmento de recta cuos extremos estén en el olígono cae or comleto dentro d (t) = a + t(b-a) (x,) n objeto b arco f endiente a c o Figura 3. Intersección Figura 4. El conceto de endiente de una recta 7

Ind. data 8(), 005 Edgar Ruiz L. Eduardo Raffo L. >>> 5 3 6 4 0 8 5 9 6 7 L Figura 5. P 6 no forma arte del cerco Figura 6. Un cerco convexo del olígono. El roblema del cerco convexo consiste en encontrar el área más equeña de un olígono convexo que encierre un conjunto de untos en el lano. Como se vio anteriormente, las figuras 3 4 resentan un cerco convexo, así también la Figura 6. Sea un conjunto S en el lano; P un unto en S. Se dice que P es un unto del cerco, si existe una línea L a través de P, tal que todos los untos en S exceto P, se encuentran a un lado de L (exceto P, ninguno ertenece a la línea). En la Figura 5, 6 no es un unto del cerco or encontrarse a un lado de L. El cerco convexo de un conjunto finito de untos S, consiste de untos del cerco ordenados que se encuentran en el borde de S. Para la Figura 6 el cerco convexo es la secuencia de los untos,, 3, 4, 5. El cerco convexo de un conjunto finito de untos S en el lano, es la secuencia,,..., n de untos de cercos de S en el siguiente orden:. El unto es el unto con la coordenada mínima ( es un unto de cerco).. Para i, sea α i el ángulo desde la horizontal al segmento de línea, i. Los untos, 3,..., n están ordenados tal que α i, α i,..., α n están en una secuencia ordenada. (Ver figura 7) En la Figura 8; tiene la mínima coordenada ; entonces este es el rimer unto listado en el cerco convexo. Como se muestra, los ángulos desde la horizontal a las líneas segmentos, ;, 3 ;, 4 ;, 5 crecen. ALGORITMO DE GRAHAM En el algoritmo de Graham (R.L. Graham, An efficient algorithm for determining the convex hull of a finite lanar set, Information Processing letters, 3-33; 97) los untos son ordenados de acuerdo al ángulo tomando un unto inicial. La secuencia o asos del algoritmo se resentan a continuación. a. Primero encontrar el unto con mínima coordenada ; en el caso que varios untos tengan el mismo valor, tomar el del mínimo valor de x. b. Ordenar todos untos de P de S de acuerdo al ángulo desde la horizontal al segmento de línea,. 4 α i i 5 6 0 8 9 7 α 3 α 3 α 4 α 5 Figura 7. P 6 no forma arte del cerco Figura 8. Un cerco convexo 73

>>> Geometría comutacional: el roblema del cerco convexo < 80º 0 > 80º 0 q izquierda derecha Figura 9. Comaración de ángulos Figura 0. Comarando: >q c. Finalmente examinar los untos en orden descartar aquellos que no están en el cerco convexo. Para imlementar la estrategia usada en el algoritmo, se desarrolla un camino ara comarar ángulos. El roducto cruzado determina cuando un unto no se encuentra en cerco convexo deberá ser descartado. Suonga que visita, 0 en ese orden los segmentos de línea 0, 0, tienen ángulos menores que 80º entonces 0 se mueve a la izquierda, en otro caso se mueve a la derecha. El roducto cruz de 0,, es: cross ( 0,, ) = ( - 0 ) (x - x 0 ) - ( - 0 ) (x - x 0 ) esto, imlica que se mueve a la izquierda si cross ( 0,, ) < 0. De igual manera 0,, se mueve a la derecha si cross ( 0,, ) > 0. Cuando cross ( 0,, ) = 0, entonces los untos 0,, son colineales. El algoritmo Graham toma sistemáticamente los untos q en el ordenamiento comara q. Si el roducto cross (,, q ) es < 0 entonces,, q se mueven a la izquierda; es decir > q. Al resecto examine el seudo código de la Figura. Sea el conjunto S ordenado de acuerdo a sus ángulos (véase Figura ). El algoritmo examina, 3, 4, moviéndose hacia la izquierda, luego es retenido. Desués se examina, 3, 4, reteniéndose 3 (ver Figura 3). Graham (, n, k ) if (n = ) then k = retorno min = for i = to n if ( [ i ]. < [ min ]. ) then min = i for i = to n if ( [ i ]. < [ min ]. ) and ( [ i ].x < [ min ].x) then min = i Intercambiar ( [ i ], [ min ] ) Ordenar,..., n de acuerdo al ángulo [ 0 ] = [ n ] k = for i = 3 to n while ( cross ( [ k ], [ k- ], [ i ] ) > 0 ) k = k k = k + Intercambiar ( [ i ], [ k ] ) End. Graham 0 9 8 7 6 5 4 3 Figura. Seudo código ara el algoritmo de Graham Figura. Conjunto S de untos 74

Ind. data 8(), 005 Edgar Ruiz L. Eduardo Raffo L. >>> 4 4 3 5 3 Figura 3. Encontrando, 3, 4 Figura 4. Examinando 3, 4, 5 6 4 3 Figura 5. Obteniendo 6 Figura 6. Salida ara Graham.java /*** * Autor :E.Raffo Lecca E. Ruiz Lizama * Fecha :/05/004 ***/ imort PointD; ublic class Graham rivate int n; rivate int k; rivate PointD untos[];// untos en el conjunto S ublic static PointD[] hull; ublic Graham(int m) untos=new PointD[m+]; untos[m]=new PointD(); ublic Graham() this(0);// or defecto ublic void add(pointd ) if(n<untos.length-) untos[n++]=; rivate void swato(pointd,pointd q) PointD tem=new PointD();.assign(q); q.assign(tem); ublic void convexhull() int i,j; PointD ; if(n==) return; // encontrar el unto inicial int min=; for(i=;i<n;i++) if(untos[i].gety()<untos[min].gety()) Figura 7a. Código del archivo7 Graham.java 75

>>> Geometría comutacional: el roblema del cerco convexo min=i; for(i=0;i<n;i++) if(untos[i].gety()<untos[min].gety() untos[i].getx()<untos[min].getx()) min=i; // intercambiar swato(untos[0],untos[min]); // ordenar for(i=0;i<n-;i++) for(j=i+;j<n;j++) =PointD.resta(untos[i],untos[0]); double angi=.olar(); ]), =PointD.resta(untos[j],untos[0]); double angj=.olar(); && if(angj<angi) swato(untos[i],untos[j]); // iteracion untos[n].assign(untos[0]); k=; for(i=;i<=n;i++) while(pointd.cross(pointd.resta(untos[k],untos[k- PointD.resta(untos[i],untos[k- ]))<0) PointD[k]; PointD(untos[i]); k--; k++; swato(untos[i],untos[k]); // leer Puntos ublic PointD[] getpuntos() return untos; // hull: la solucion ublic PointD[] hull() int i; PointD[] hull=new for(i=0;i<k;i++) hull[i]=new return hull; Figura 76. Código del archivo7 Graham.java En la siguiente iteración examina 3, 4, 5 se retiene 4 (ver figura 4). Al examinar 4, 5, 6 se descarta 5 se regresa a 3, 4, 6, se retiene 4. Al examinar 4, 6, 7 se retiene 6. En la siguiente se examinan 6, 7, 8 se retiene 7. En 7, 8, 9 se descarta 8. El algoritmo regresa a 6, 7, 9 se descarta 7. El algoritmo regresa a 4, 6, 9 se retiene 6. A continuación se resenta el código JAVA ara el archivo Graham.java (Figura 7: a b). La animación desde un alet, se resenta en la Figura 6. Los archivos: PointD.java, JgrahamShow.java, JgrahamShow.html, se encuentran en [3]. CONCLUSIONES El artículo resenta los concetos fundamentales de la geometría comutacional una solución a uno de los roblemas clásicos en este camo: el cerco convexo. La solución es imlementada en un alet de Java, el mismo que arovecha la interfase grafica ara resentar una animación de un olígono (cerco convexo) en la salida estándar. BIBLIOGRAFÍA. Laszlo, M. J. (996). Comutational Geometr and Comuter Grahics in C++. Prentice-Hall, Inc, U.S.A.. Prearata, F. P.; Michael Ian Shanos. (988). Comutational Geometr An Introduction. Sringer- Verlag. U.S.A. 3. Raffo Lecca, E. (005). Curso: Mi Primer Java. En: htt://industrial.unmsm.edu.e/org/aa/daisi/ eraffol/website/index.htm 4. Cormen, Thomas; Leiserson, Charles; Rivest, Ronald, and Stein, Clifford. (00). Introduction To Algorithms. Second Edition. McGraw-Hill Book Coman and MIT Press. U.S.A. 5. Weiss, Mark A. (00). Data Structures and Problem Solving Using Java. Second Edition. Adisson-Wesle. U.S.A. 76