laboratorio de hipergrafosde nici on. una clase de complejidad es un conjunto de problemas...

94
Universidad de Concepci´ on Facultad de Ingenier´ ıa Departamento Ingenier´ ıa Inform´ atica y Ciencias de la Computaci´ on Laboratorio de Hipergrafos Memoria de T´ ıtulo Autor: Fabi´ an Riquelme Cs´ ori Profesor Patrocinante: Andreas Polym´ eris Paravicini Concepci´on, Marzo de 2008

Upload: others

Post on 01-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Universidad de ConcepcionFacultad de Ingenierıa

Departamento Ingenierıa Informaticay Ciencias de la Computacion

Laboratorio de Hipergrafos

Memoria de Tıtulo

Autor:

Fabian Riquelme Csori

Profesor Patrocinante:

Andreas Polymeris Paravicini

Concepcion, Marzo de 2008

Page 2: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

A mi familiay muy en particular

...a mis padres

Page 3: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Agradecimientos

Quiero agradecer a mi profesor patrocinante, Andreas Polymeris, por su

guıa indispensable y constante a lo largo de todo este trabajo; al profesor

Pablo Saez, por sus valiosos comentarios sobre la estructuracion del Informe;

a mis amigos, por brindarme agradables momentos de ocio cuando la in-

spiracion no llegaba; y a mi familia, por su enorme paciencia cuando la

Memoria no avanzaba, y su respetuoso silencio, cuando sı lo hacıa.

II

Page 4: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Cuando el agua te llega al cuello, no te preocupes si no es potable.Stanislaw Jerzy Lec

Page 5: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Resumen

En esta Memoria de Tıtulo se describe todo el proceso de desarrollo de

HiperLab, un software que implementa, por un lado, los operadores y algo-

ritmos basicos para la definicion del Problema de Dualidad de Hipergrafos

(el cual sabemos es sub-exponencial y CoNP , pero se desconoce hasta ahora

si es P o incluso NP ); y por el otro, ineditos Generadores de estructuras

de hipergrafos duales, las cuales, almacenadas como archivos de texto plano,

corresponden a inputs no triviales para la ejecucion de planes de testing sobre

los nuevos algoritmos creados.

HiperLab facilita el diseno e implementacion de nuevos algoritmos orien-

tados a la resolucion del Problema de Dualidad, ası como de otros problemas

relacionados. En efecto, los mismos Generadores fueron construidos utilizan-

do unicamente las herramientas proporcionadas por HiperLab, por lo que se

constituyen ası como una prueba exitosa de los alcances de las funcionali-

dades del software.

Palabras clave: Estructuras de hipergrafos; Problema de dualidad;

Complejidad computacional.

IV

Page 6: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Summary

This report describes the entire development process of HyperLab, a soft-

ware that implements, on the one hand, the basic operators and algorithms

for the definition of Hypergraph Duality Problem (which we know is sub-

exponential and CoNP , but it is unknown so far if it is P or NP ); on the

other hand, unpublished dual hypergraph structures Generators, which ones,

recorded as textfiles, are not trivial inputs for the execution of testing plans

about the new created algorithms.

HyperLab facilitates the design and implementation of new algorithms

aimed to resolving the Duality Problem, as well as other issues. In fact,

the generators were constructed using only the tools provided by HyperLab,

there for it is constituted a successful test of the scope of the features of the

software.

Keywords: Hypergraph structures; Duality problem; Computational

complexity

V

Page 7: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Indice general

Indice de Figuras VIII

Indice de Tablas IX

Lista de Sımbolos X

Introduccion XI

1. Dualidad de Hipergrafos 11.1. Complejidad algorıtmica . . . . . . . . . . . . . . . . . . . . . 11.2. Estructuras de Hipergrafos . . . . . . . . . . . . . . . . . . . . 21.3. Operadores basicos . . . . . . . . . . . . . . . . . . . . . . . . 5

1.3.1. El clutter de H: ν(H) . . . . . . . . . . . . . . . . . . . 51.3.2. El blocker de H: τ(H) . . . . . . . . . . . . . . . . . . 61.3.3. El minimal de H: µ(H) . . . . . . . . . . . . . . . . . . 71.3.4. El critical de H: σ(H) . . . . . . . . . . . . . . . . . . 81.3.5. Los slices de H: λ(H) . . . . . . . . . . . . . . . . . . . 91.3.6. Otros operadores . . . . . . . . . . . . . . . . . . . . . 10

1.4. El Problema de Dualidad . . . . . . . . . . . . . . . . . . . . . 101.4.1. Coherencia . . . . . . . . . . . . . . . . . . . . . . . . 111.4.2. Completitud . . . . . . . . . . . . . . . . . . . . . . . . 111.4.3. Dualidad . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.5. El Laboratorio de Hipergrafos . . . . . . . . . . . . . . . . . . 13

2. Especificacion de Requisitos 152.1. Requerimientos funcionales . . . . . . . . . . . . . . . . . . . . 152.2. Creacion y manipulacion de estructuras . . . . . . . . . . . . . 162.3. Operadores a implementar . . . . . . . . . . . . . . . . . . . . 162.4. Algoritmos a implementar . . . . . . . . . . . . . . . . . . . . 17

VI

Page 8: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

2.4.1. Coherencia . . . . . . . . . . . . . . . . . . . . . . . . 172.4.2. Completitud . . . . . . . . . . . . . . . . . . . . . . . . 172.4.3. Semi-completitud . . . . . . . . . . . . . . . . . . . . . 182.4.4. Lema de Chvatal . . . . . . . . . . . . . . . . . . . . . 182.4.5. Algoritmo de Khachiyan . . . . . . . . . . . . . . . . . 19

2.5. Generacion de estructuras duales . . . . . . . . . . . . . . . . 202.6. Requerimientos de HW y SW . . . . . . . . . . . . . . . . . . 212.7. Entorno de programacion . . . . . . . . . . . . . . . . . . . . . 21

3. Diseno de HiperLab 233.1. Clases del sistema . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.1.1. La clase Harista . . . . . . . . . . . . . . . . . . . . . . 233.1.2. La clase ParHarista . . . . . . . . . . . . . . . . . . . . 243.1.3. La clase Hgrafo . . . . . . . . . . . . . . . . . . . . . . 253.1.4. La clase Estruct . . . . . . . . . . . . . . . . . . . . . . 263.1.5. Diagrama de Clases . . . . . . . . . . . . . . . . . . . . 28

3.2. Operadores implementados . . . . . . . . . . . . . . . . . . . . 283.3. Algoritmos implementados . . . . . . . . . . . . . . . . . . . . 403.4. Generadores de Estructuras Duales . . . . . . . . . . . . . . . 45

3.4.1. Generador-A . . . . . . . . . . . . . . . . . . . . . . . 463.4.2. Generador-B . . . . . . . . . . . . . . . . . . . . . . . . 49

4. Metodologıa de desarrollo 524.1. Organizacion de HiperLab . . . . . . . . . . . . . . . . . . . . 52

4.1.1. Organizacion general . . . . . . . . . . . . . . . . . . . 524.1.2. Organizacion del codigo fuente . . . . . . . . . . . . . . 53

4.2. Gestion y configuracion de cambios . . . . . . . . . . . . . . . 554.3. Plan de Testing . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.3.1. Plan de Testing General . . . . . . . . . . . . . . . . . 564.3.2. Plan de Testing de Generadores . . . . . . . . . . . . . 58

5. Testing 605.1. Testing General . . . . . . . . . . . . . . . . . . . . . . . . . . 605.2. Testing de Generadores . . . . . . . . . . . . . . . . . . . . . . 60

6. Conclusiones 70

Bibliografıa 75

A. Manual de usuario 77A.1. Como utilizar HiperLab . . . . . . . . . . . . . . . . . . . . . 77A.2. Algoritmos y Operadores de HiperLab . . . . . . . . . . . . . 78

Page 9: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Indice de Figuras

1.1. Diagrama de Hasse (P(A),⊆) e hipergrafo H′. . . . . . . . . . 31.2. Diagrama de Venn para H′. . . . . . . . . . . . . . . . . . . . 3

3.1. Diagrama de clases de HiperLab. . . . . . . . . . . . . . . . . 28

4.1. Arbol de directorios de HiperLab. . . . . . . . . . . . . . . . . 534.2. Prueba de ejecucion del Algoritmo de Khachiyan. . . . . . . . 574.3. Captura de pantalla de una generacion de estructura dual. . . 58

5.1. Comparacion de distribuciones de frecuencia. . . . . . . . . . . 615.2. Eficiencia algorıtmica. . . . . . . . . . . . . . . . . . . . . . . 64

VIII

Page 10: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Indice de Tablas

3.1. Operadores implementados en Estruct. . . . . . . . . . . . . . 313.2. Operadores implementados en Hgrafo. . . . . . . . . . . . . . 353.3. Operadores implementados en ParHarista. . . . . . . . . . . . 363.4. Operadores implementados en Harista. . . . . . . . . . . . . . 403.5. Algoritmos implementados en HiperLab. . . . . . . . . . . . . 45

5.1. Resultados promedio para ambos Generadores. . . . . . . . . . 645.2. Testing de Generador-A para |A| = 3, 5, 7. . . . . . . . . . . 665.3. Testing de Generador-A para |A| = 9, 11. . . . . . . . . . . . 675.4. Testing de Generador-B para |A| = 3, 5, 7. . . . . . . . . . . 685.5. Testing de Generador-B para |A| = 9, 11. . . . . . . . . . . . 69

IX

Page 11: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Lista de Sımbolos

| · | Cardinalidad de · Composicion[ · ] Conjunto de atomos de ·∅ Conjunto vacıoA Conjunto baseP(A) Conjunto potencia de A(P(A),⊆) Conjunto potencia ordenado segun la inclusionDom Dominioa, b, c Elementos del conjunto baseW , Z Elementos del conjunto potenciaxij Elemento de una matriz ubicado en fila i y columna jG Estructura generica de hipergrafos H y KH, K Hipergrafos genericosX, Y Hiperaristas de hipergrafos H y K, respectivamente0|A| Hiperarista vacıa1|A| Hiperarista igual a A=, 6= Igualdad; desigualdadν, τ , µ, σ, λ Operadores basicos: clutter, blocker, minimal, critical y

slice, respectivamente∃ Operador existencial “existe”@ Operador existencial negado “no existe”∀ Operador universal “para todo”∈, /∈ Pertenencia; no pertenencia× Producto cartesianoκ Tamano de un hipergrafo o estructura∪, ∩ Union; interseccion (de conjuntos)t, u Union; interseccion (de hipergrafos y estructuras)⊇, ⊃ “Contiene a”; “contiene estrictamente a” (conjuntos)w, A “Contiene a”; “contiene estrictamente a” (hipergrafos)⊆, ⊂ “Incluye a”; “incluye estrictamente a” (conjuntos)v, @ “Incluye a”; “incluye estrictamente a” (hipergrafos)6⊇, 6⊃ “No contiene a”; “no contiene estrictamente a”6⊆, 6⊂ “No incluye a”; “no incluye estrictamente a”ssi “si y solo si”

X

Page 12: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Introduccion

Un hipergrafo es un objeto matematico que puede entenderse como ungrafo cuyas aristas (aquı llamadas hiperaristas) pueden relacionar a mas dedos nodos. Su nombre fue acunado por el matematico frances Claude Berge[1], y desde entonces se ha desarrollado una extensa teorıa sobre ellos, apli-cada en distintas areas como la logica, optimizacion, teorıa de juegos, basesde datos, inteligencia artificial, entre otras [17].

Algunos problemas de hipergrafos se asemejan mucho a los de la teorıade grafos. Los problemas de coloracion, camino mas corto, cobertura, pornombrar algunos, tambien son aplicables a este contexto. Sin embargo, estamemoria esta orientada especıficamente a apoyar los intentos por resolverel llamado Problema de Dualidad de Hipergrafos, para el cual no existe unaanalogıa con la teorıa de grafos, por lo cual nos distanciaremos de los op-eradores y notaciones de esta. En [4] se demostro que este problema puederesolverse en tiempo sub-exponencial, pero se desconoce hasta ahora algunalgoritmo que pueda resolverlo en tiempo polinomial. De hecho, del punto devista de la complejidad, lo unico que se sabe es que este problema pertenecea la clase CoNP . Esto, sumado a algunas reducciones polinomiales que lohan relacionado con otros problemas interesantes, lo convierten en un desafıoimportante en la ciencia de la computacion.

Esta memoria de tıtulo describe todo el proceso de desarrollo para laobtencion del Laboratorio de Hipergrafos llamado HiperLab, un softwareque, mediante la implementacion de algoritmos y operadores matematicosrelacionados con el Problema de Dualidad, permite a los investigadores-programadores tanto la reproduccion de los algoritmos ya existentes en elarea, como el diseno de otros nuevos, concibiendo estas funcionalidades pro-porcionadas por el Software como cajas negras. Ademas, como aporte teorico-practico, incluye dos ineditos generadores de inputs para la elaboracion deplanes de testing no triviales.

XI

Page 13: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

La estructura del informe es la siguiente: el Capıtulo 1 define formalmenteel Problema de Dualidad, los objetos matematicos y operadores basicos rela-cionados con este, y explica ademas concretamente la finalidad del Labo-ratorio y lo que se espera de el; los Capıtulos 2 y 3 describen, respectiva-mente, la especificacion de requisitos y el diseno del Software; el Capıtulo 4,la metodologıa de desarrollo utilizada; y el Capıtulo 5, la etapa de Testingen detalle. Por ultimo, se presentan las conclusiones finales de este trabajo.

Page 14: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1Dualidad de Hipergrafos

1.1. Complejidad algorıtmica

Todos los algoritmos se pueden clasificar segun su eficiencia. Una sub-

rama de la informatica teorica, la de complejidad computacional, se encarga

de analizar el comportamiento global de cada algoritmo, para representar su

eficiencia en funcion del tamano del input con que se ejecute, y ası poder

asociarlo a una o mas clases de complejidad.

Definicion. Una clase de complejidad es un conjunto de problemas com-

putacionales cuyos tiempos de ejecucion estan acotados superiormente por

una misma funcion. Las clases mas conocidas son P y NP , conformadas por

los problemas de decision que pueden ser verificados en tiempo polinomial,

respectivamente, por maquinas de Turing deterministas y no-deterministas.

Definicion. Un problema pertenece a la clase NP -completa si es NP y

ademas NP -hard o NP -difıcil, es decir, todo problema NP es reducible a

el, o bien otro problema NP -completo lo es. La clase CoNP -completa es la

clase complementaria a la NP -completa; un problema de decision pertenece

a ella si todos los problemas CoNP son reducibles a el, y ademas si su prob-

lema planteado negativamente (con sus instancias positivas ahora negativas,

y viceversa) pertenece a NP .

El problema NP -completo por antonomasia es el Problema de Satisfabil-

1

Page 15: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 2

idad de Formulas Booleanas o SAT, para el cual no se sabe si exista algun

algoritmo capaz de resolverlo en tiempo polinomial (en efecto, aun no se

sabe si P = NP ). Actualmente, los algoritmos mas eficientes conocidos para

resolver este problema son los llamados SAT-solvers1, los cuales son todos

exponenciales, o bien solo devuelven respuestas parciales.

Definicion. Un algoritmo es exponencial si su tiempo de ejecucion esta aco-

tado por una funcion exponencial, y es sub-exponencial, si la funcion que

lo acota tiene un crecimiento menor al exponencial. Comunmente, se llama

algoritmo sub-exponencial a uno que ademas es super-polinomial.

Para resolver determinısticamente los problemas NP -completos solo se

conocen algoritmos exponenciales. De encontrarse al menos un algoritmo sub-

exponencial que resuelva un problema NP -completo, todos los demas NP -

completos pasarıan automaticamente a poder ser resueltos por algoritmos

sub-exponenciales. Sin embargo, sı existen algoritmos sub-exponenciales para

resolver problemas NP que no son NP -completos. Es por esto que a los NP -

completos se les considera los problemas mas difıciles de los NP .

Es importante senalar que el problema en el cual se basa esta Memoria

de Tıtulo pertenece a la clase CoNP y que, aunque se conoce un algoritmo

que lo resuelve en tiempo sub-exponencial, no se ha podido aun demostrar

si es NP (ni menos si es P ). Todo esto sera explicado con mas detencion en

lo que sigue.

1.2. Estructuras de Hipergrafos

Definicion. Dado un conjunto finito A, que llamaremos conjunto base, un

hipergrafo H es una familia de subconjuntos de A, de manera que H ⊆ P(A),

donde P(A) es el conjunto potencia de A. Los elementos X ∈ H se llaman

hiperaristas. El tamano de H es κ(H) := |A| · |H| ∈ N.

Segun la definicion original de [1], un hipergrafo H debe cumplir estas dos

caracterısticas:

1http://www.satlive.org

Page 16: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 3

1. Ser propio: H 6= ∅ y ∅ /∈ H.

2. Tener dominio total: Dom(H) = ∪X ∈ H = A.

Sin embargo, para efectos de este trabajo no exigiremos necesariamente

estas restricciones.

Ejemplo. Sea A = a, b, c, podemos representar el conjunto P(A) como

un grafo dirigido o Diagrama de Hasse ordenado segun la inclusion [15], y al

hipergrafo H′ = c, b, c, a, b como la familia destacada en la figura:

Figura 1.1: Diagrama de Hasse (P(A),⊆) e hipergrafo H′.

Otra representacion mas simple es mediante Diagramas de Venn, como se

muestra a continuacion:

Figura 1.2: Diagrama de Venn para H′.

Page 17: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 4

Sin embargo, una forma mas conveniente para representar hipergrafos

(pensando en su eventual manipulacion computacional) es utilizando una

matriz [2]:

H′ =

a b c∣∣∣∣∣∣∣0 0 1

0 1 1

1 1 0

∣∣∣∣∣∣∣donde cada fila corresponde a una hiperarista Xi ∈ H′ definida sobre el

conjunto base A := a1, ..., a|A|, tal que ∀i = 1, ..., |H′| y ∀j = 1, ..., |A|:

xij =

0 si aj /∈ Xi

1 si aj ∈ Xi

Definicion. Dado un conjunto base A, una estructura (de hipergrafos) es un

par ordenado G := (H,K) de dos hipergrafos H y K bajo el mismo conjunto

A [2]. G es propio si H y K son propios. G tiene dominio unico [4] y total si

Dom(H) = ∪X ∈ H = A = ∪Y ∈ K = Dom(K). El tamano de G es

κ(G) := |A| · (|H|+ |K|) ∈ N.

Ejemplo. Si del ejemplo anterior tomamos ahora K′ = b, c, a, c, A,entonces la estructura G ′ = (H′,K′) queda:

H′ =

a b c∣∣∣∣∣∣∣0 0 1

0 1 1

1 1 0

∣∣∣∣∣∣∣K′ =

∣∣∣∣∣∣∣0 1 1

1 0 1

1 1 1

∣∣∣∣∣∣∣Estas estructuras son muy utiles para comparar realidades o instancias en

paradigmas dinamicos, bajo un mismo dominio discreto de aplicacion (vease,

por ejemplo, en teorıa de juegos [2]). Ademas, sobre ellas se centra el problema

de dualidad de hipergrafos, que veremos mas adelante y que constituye la

Page 18: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 5

principal motivacion de este trabajo.

1.3. Operadores basicos

Para manipular estos objetos matematicos, se han definido diversos op-

eradores, que ayudan en la obtencion de resultados interesantes, y en la

simplificacion de definiciones y notaciones.

Definicion. Llamaremos operador a una transformacion matematica que

puede implementarse (utilizando algun lenguaje de programacion) como un

metodo que actua sobre una o mas estructuras, hipergrafos y/o hiperaristas.

Tecnicamente, para todos los operadores que seran definidos en este tra-

bajo se conocen algoritmos que pueden mecanizarlos (en algunos casos, no

polinomialmente). Sin embargo, distinguiremos estos conceptos de aquı en

adelante, refiriendonos a los algoritmos solo como procedimientos mas com-

plejos, no definibles como transformaciones matematicas.

Existen muchısimos operadores relacionados con la teorıa de hipergrafos,

no obstante, para el problema particular al que estamos abocados, destacan

cinco operadores basicos, que a continuacion explicaremos en detalle y que

podemos denotar con las letras griegas ν, τ , µ, σ y λ [2].

Considere de aquı en adelante, que G := (H,K) es una estructura de

hipergrafos H y K, sobre un conjunto base A.

1.3.1. El clutter de H: ν(H)

Definicion. El operador ν es el que aplicado sobre un hipergrafo H, genera

como salida el hipergrafo que es respondido [3] por las hiperaristas de H; es

decir:

ν(H) := W ⊆ A; ∃X ∈ H, X ⊆ W (1.1)

Page 19: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 6

Ejemplo.

a b c a b c

Sea H′ =

∣∣∣∣∣∣∣0 0 1

0 1 1

1 1 0

∣∣∣∣∣∣∣ entonces ν(H′) =

∣∣∣∣∣∣∣∣∣∣∣∣

0 0 1

0 1 1

1 1 0

1 0 1

1 1 1

∣∣∣∣∣∣∣∣∣∣∣∣Note que H ⊆ ν(H) ⊆ P(A) y que siempre A ∈ ν(H). Por otra parte,

de la matriz de H′ puede obtenerse (informal y nemotecnicamente) ν(H′),anadiendo a H′ las hiperaristas obtenidas de ir cambiando todos los 0’s por

1’s, de uno en vez y consumando todas las posibilidades hasta alcanzar la

hiperarista A.

De esto ultimo se deduce que este operador no es polinomialmente

acotable, pues en el peor caso, es decir, cuando H no es propio y ∅ ∈ H,

a partir de la hiperarista vacıa 0A es necesario anadir un numero de

hiperaristas para alcanzar el clutter que crece exponencialmente en funcion

de κ(H).

Definicion. Sean dos hipergrafos H y K, se dice que H es respondido por

K, lo que se denota H v K, si H ⊆ ν(K).

Definicion. Dada una estructura G := (H,K), se define la estructura que es

respondida por G como ν(G) := (ν(H), ν(K)).

Definicion. Sean dos estructuras G := (H,K) y G ′ := (H′,K′), se dice que

G es respondida por G ′, lo que se denota G v G ′, si H v H′ y K w K′.

1.3.2. El blocker de H: τ(H)

Definicion. El operador τ es el que aplicado sobre un hipergrafo H, genera

como salida el hipergrafo transversal a las hiperaristas de H; es decir:

τ(H) := Z ⊆ A; ∀X ∈ H, X ∩ Z 6= ∅ (1.2)

Page 20: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 7

Ejemplo.

a b c a b c

Sea H′ =

∣∣∣∣∣∣∣0 0 1

0 1 1

1 1 0

∣∣∣∣∣∣∣ entonces τ(H′) =

∣∣∣∣∣∣∣0 1 1

1 0 1

1 1 1

∣∣∣∣∣∣∣Note que τ(H) ⊆ P(A) y que, siempre y cuando H sea propio, A ∈ τ(H),

pues A es el maximo de (P(A),⊆).

Este operador tampoco es polinomialmente acotable, pues el numero de

comparaciones que el operador debe hacer para obtener todos los Z ∈ P(A)

que pertenecen a τ(H), crece exponencialmente en funcion de κ(H).

Definicion. Dada una estructura G := (H,K), se define la estructura

transversal a los hipergrafos de G como τ(G) := (τ(K), τ(H)) (y no

(τ(H), τ(K)), para favorecer la propiedad de antitonıa de τ , que no

detallaremos aquı).

1.3.3. El minimal de H: µ(H)

Definicion. El operador µ es aquel que aplicado sobre un hipergrafo H, gen-

era como salida un hipergrafo con las hiperaristas minimales o irredundantes

de H; es decir:

µ(H) := X ∈ H; ∀X ′ ∈ H, X ′ 6⊂ X (1.3)

Ejemplo.

a b c a b c

Sea H′ =

∣∣∣∣∣∣∣0 0 1

0 1 1

1 1 0

∣∣∣∣∣∣∣ entonces µ(H′) =

∣∣∣∣∣ 0 0 1

1 1 0

∣∣∣∣∣Note que µ(H) ⊆ H, y que A ∈ µ(H) ssi H = A. Por definicion, este

operador se limita a minimizar el hipergrafo H sobre el cual se aplica, sin

Page 21: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 8

interesarse (al contrario de los demas operadores de esta seccion) en los demas

W ⊆ A distintos de sus hiperaristas.

µ(H′) corresponde a los X ∈ H′ minimales de H′, segun (P(A),⊆). Ev-

identemente, µ se puede calcular con un algoritmo eficiente; en efecto, es el

unico operador basico polinomialmente acotable que se implementara.

Definicion. Dada una estructura G := (H,K), se conoce como el kernel o

nucleo minimal de G a la estructura µ(G) := (µ(H), µ(K)).

Este operador es muy util, por su polinomialidad y porque las propiedades

estructurales que nos ocuparan en la siguiente seccion se comportan de igual

manera tanto para la estructura G original como para su kernel minimal µ(G).

Definicion. Dado un hipergrafo H, si µ(H) ⊂ H, entonces decimos que Hes no-minimal o redundante.

1.3.4. El critical de H: σ(H)

Definicion. El operador σ es el que aplicado sobre un hipergrafo H, genera

como salida el hipergrafo crıtico sujeto a las hiperaristas de H; es decir:

σ(H) := Z ⊆ A; ∀a ∈ Z, ∃X ∈ H con X ∩ Z = a (1.4)

Ejemplo.

a b c a b c

Sea H′ =

∣∣∣∣∣∣∣0 0 1

0 1 1

1 1 0

∣∣∣∣∣∣∣ entonces σ(H′) =

∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣

0 0 0

0 0 1

0 1 0

0 1 1

1 0 0

1 0 1

∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣Note que σ(H) ⊆ P(A), y que siempre ∅ ∈ σ(H′), pues como ∅ carece de

elementos, no se requiere verificar el operador universal de la definicion (1.4).

Ademas, si ∪X ∈ H = Z ⊆ A, entonces ∀Y ⊆ Z, con |Y | = 1, Y ∈ σ(H);

Page 22: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 9

ası como tambien ∀Z ∈ σ(H), si Y ⊆ Z, entonces Y ∈ σ(H). Esto ultimo,

porque ∀Z ∈ σ(H), si a ∈ Z, entonces Z ′ := Z\a ∈ σ(H).

Este operador tampoco es polinomial, y al igual que τ , es un operador

antıtono.

Definicion. Dada una estructura G := (H,K), se define la estructura crıtica,

sujeta a los hipergrafos de G, como σ(G) := (σ(K), σ(H)).

1.3.5. Los slices de H: λ(H)

Definicion. El operador λ es aquel que aplicado sobre un hipergrafo H,

genera como salida el hipergrafo de slices o transversales minimales de H; es

decir:

λ(H) := (τ µ)(H) := µ(τ(H)) (1.5)

Ejemplo.

a b c a b c

Sea H′ =

∣∣∣∣∣∣∣0 0 1

0 1 1

1 1 0

∣∣∣∣∣∣∣ entonces λ(H′) =

∣∣∣∣∣ 0 1 1

1 0 1

∣∣∣∣∣Note que λ(H) ⊆ τ(H) ⊆ P(A). Este operador devuelve las hiperaristas

mınimas que tienen interseccion no vacıa con cada X ∈ H, entendiendo por

mınimas a que ∀(Z ∈ λ(H)), @Y ⊂ Z tal que Y ∈ τ(H).

Existen algoritmos no-deterministas que calculan este operador en tiem-

po polinomial. En [2], por ejemplo, se menciona uno de ellos, basado en la

asignacion de ordenes a los a ∈ A.

Definicion. Dada una estructura G := (H,K), se define la estructura de

slices o transversales minimales de G, como λ(G) := (λ(K), λ(H)).

Page 23: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 10

1.3.6. Otros operadores

Todos estos operadores pueden ser implementados mediante algoritmos

con distintas complejidades especıficas. Lo mismo ocurre con otros operadores

como v, t, u, o los atomos de una hiperarista.

Definicion. Dadas dos estructuras G := (H,K) y G ′ := (H′,K′), se define el

join o union H y K como H t K := µ(ν(H) ∪ ν(K)) := µ(H ∪ K), y el join

de G y G ′, como G t G ′ := (H tH′,K u K′) [20].

Definicion. Dadas dos estructuras G := (H,K) y G ′ := (H′,K′), se define

el meet o interseccion de H y K como H u K := µ(ν(H) ∩ ν(K)) := µ(X ∪Y ; (X, Y ) ∈ H ×K), y el meet de G y G ′, como G u G ′ := (H uH′,K t K′)[20].

Definicion. Dada una hiperarista Z ⊆ A, se definen sus atomos como el

conjunto [Z] := a; a ∈ Z. Si Z = [Z], entonces Z es atomico.

Es preciso aclarar, sin embargo, que a pesar de la no polinomialidad de ν,

τ , σ y λ, el decidir si una hiperarista pertenece o no al hipergrafo resultante

de la aplicacion de cualquiera de ellos, sı resulta polinomial. Por ejemplo,

para decidir si un Z ∈ σ(H), basta ∀a ∈ Z, recorrer linealmente H (y no

P(A)) buscando algun X ∈ H que intersecte a Z solo en a.

Estos problemas de decision tambien seran considerados operadores, ya

que cumplen la definicion dada al comienzo de la seccion.

1.4. El Problema de Dualidad

Definicion. El hypergraph duality decision problem [2] [4] [10] es un problema

de decision que consiste en verificar si dada una estructura G, esta es o no

dual. Una estructura es dual ssi es coherente y completa.

A continuacion explicaremos en detalle cada uno de estos conceptos.

Page 24: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 11

1.4.1. Coherencia

Definicion. Una estructura G es coherente si ∀(X, Y ) ∈ H×K, X ∩ Y 6= ∅;es decir, si todas las hiperaristas de H se intersectan con todas las de K.

Evidentemente, esta propiedad es polinomialmente decidible, pues basta

recorrer linealmente cada X ∈ H e ir verificando inmediatamente su inter-

seccion con cada Y ∈ K.

Ejemplo. La estructura G ′ del ejemplo de la seccion 1.2 es coherente.

Definicion. Dado un conjunto A, se define una particion sobre A como un

par (W,Z) de subconjuntos de A, tal que W ∪ Z = A y W ∩ Z = ∅.

Existen adicionalmente varias definiciones equivalentes [2], que utilizan

los operadores basicos vistos en el apartado anterior; a saber, G tambien es

coherente, ssi:

– ∀ particion (W,Z) de A, W /∈ ν(H) ∨ Z /∈ ν(K).

– ∀ particion (W,Z) de A, W ∈ τ(K) ∨ Z ∈ τ(H).

– τ(H) ⊇ ν(K), o bien ν(H) ⊆ τ(K).

– G ⊆ τ(G), o bien µ(G) ⊆ τ(G).

Por ultimo, tambien se sabe que G es coherente ssi ν(G) es coherente ssi

µ(G) es coherente.

1.4.2. Completitud

Definicion. Una estructura G es completa [2], si para toda particion (W,Z)

de A, W ∈ ν(H) ∨ Z ∈ ν(K); es decir, si al menos el W o el Z contienen

hiperaristas de G.

Este problema de decision —dado un G, ¿G es completa?— es CoNP-

completo [3] pues todos los problemas CoNP son reducibles a el, y el prob-

lema de decision de incompletitud de hipergrafos pertenece a la clase NP.

Este es el mayor obstaculo del problema de dualidad, sin embargo, como

veremos en la siguiente sub-seccion, el restringirnos a estructuras coherentes

Page 25: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 12

proporciona una ayuda importante, que mantiene hasta ahora el problema

vigente y en boga para los investigadores.

Ejemplo. La estructura G ′ del ejemplo visto en la seccion 1.2 es completa.

Decimos que G tambien es completa ssi [2] (note las semejanzas con la

propiedad anterior):

– ∀ particion (W,Z) de A, W /∈ τ(K) ∨ Z /∈ τ(H).

– τ(H) ⊆ ν(K), o bien ν(H) ⊇ τ(K).

– ν(G) ⊇ λ(G).

Ademas, tambien se sabe que G es completa ssi ν(G) es completa ssi µ(G)

es completa ssi τ(G) es coherente ssi λ(G) es coherente.

Muchos esfuerzos se han puesto en esta ultima equivalencia: en el trabajo

con las transversales minimales de las estructuras coherentes.

1.4.3. Dualidad

Como dijimos anteriormente, una estructura es dual ssi es coherente y

completa; luego, las definiciones anteriores pueden juntarse, para referirnos

a una estructura G := (H,K) como dual, ssi [1]:

– ∀ particion (W,Z) de A, W ∈ ν(H) o (exclusivo) Z ∈ ν(K).

– ∀ particion (W,Z) de A, W ∈ τ(K) o (exclusivo) Z ∈ τ(H).

– τ(G) = ν(G) (ν(H) = τ(K) y τ(H) = ν(K)).

– µ(G) = λ(G) (λ(H) = µ(K) y µ(H) = λ(K)).

Ademas, G sera dual ssi ν(G) (µ(G), τ(G), λ(G)) es dual.

De estos resultados quizas lo primero que salta a la vista es la ventaja de

trabajar con estructuras minimales, que evidentemente resultan mas sencil-

las de manipular que las originales, pueden determinarse siempre en tiempo

polinomial, y para efectos del problema, este se mantiene inalterable.

Page 26: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 13

Ejemplo. La estructura G ′ del ejemplo visto en la seccion 1.2 es coherente

y completa. Luego, es dual, y bastarıa quitar cualquier hiperarista de H o Kpara que dejara de serlo (pues dejarıa de ser completa).

En [4] se demostro que este problema es resoluble en tiempo sub-

exponencial. El desafıo actual consiste en demostrar si el problema pertenece

a la clase P, o al menos a la clase NP, lo cual tambien se desconoce.

1.5. El Laboratorio de Hipergrafos

Pero el objetivo de esta Memoria de Tıtulo no es intentar resolver el Prob-

lema de Dualidad, sino construir un Laboratorio de Hipergrafos que apoye

su investigacion.

Definicion. Entenderemos por Laboratorio a una herramienta-software que

implementa los operadores fundamentales que giran en torno a un problema

u objeto matematico particular, para a partir de ellos construir, ejecutar y

testear tanto algoritmos nuevos como otros ya existentes, que pueden o no

estar relacionados con dicho problema u objeto.

En este sentido, MATLAB1, por ejemplo, el famoso software cuyo nombre

significa justamente Matrix Laboratory (Laboratorio de Matrices), tiene como

objeto matematico particular las matrices, y sus operadores son las opera-

ciones basicas sobre estas matrices, que proporcionan el poder computacional

necesario para la resolucion de problemas, que en su caso, escapan al contexto

matricial.

HiperLab, el Laboratorio de Hipergrafos que aquı se propone, implementa

operadores que toman como objeto matematico a las estructuras de hiper-

grafos, pero intentando apoyar exclusivamente el problema particular de Du-

alidad de Hipergrafos. En efecto, los operadores del Capıtulo 1 no han sido

pensados para definir otros conocidos problemas que escapan al tema de es-

ta Memoria, como la cobertura o coloracion de hipergrafos, por mencionar

1The MathWorks - MATLABrThe Language of Technical Computing. http://www.mathworks.com/products/matlab

Page 27: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 1. Dualidad de Hipergrafos 14

algunos.

Page 28: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 2Especificacion de Requisitos

2.1. Requerimientos funcionales

El Laboratorio debera hacer lo siguiente:

1. Permitir la creacion y manipulacion de hipergrafos y estructuras.

2. Permitir la aplicacion de los operadores vistos en la seccion 1.3 tanto a

hipergrafos como a estructuras de hipergrafos.1

3. Permitir la ejecucion de algoritmos importantes para el Problema de

Dualidad, desplegando sus resultados en pantalla. Estos se describen

en detalle en la seccion 2.4.

4. Permitir la generacion de estructuras duales, que sirvan como inputs

no triviales para los algoritmos ya implementados y aquellos que even-

tualmente se implementaran. Este punto, como veremos mas adelante,

constituye un aporte teorico nuevo en el area.

Profundizaremos estos puntos en los siguientes apartados.

1Excluiremos de aquı solo al operador λ, por estar basado actualmente en el Algoritmode Khachiyan, que es el que justamente se desea mejorar.

15

Page 29: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 2. Especificacion de Requisitos 16

2.2. Creacion y manipulacion de estructuras

HiperLab debe permitir la creacion de estructuras de hipergrafos ingre-

sadas como inputs a partir de archivos de texto plano. Otras formas de

creacion con intervencion del usuario son prescindibles, dada la naturaleza

batch del sistema (ver seccion 2.6).

Esta creacion de estructuras, no obstante, implica la necesidad de crear

otros objetos matematicos mas elementales, como son los hipergrafos y las

hiperaristas. Ademas, sera necesario para el diseno de algunos algoritmos

y operadores la creacion de pares de hiperaristas que, como veremos mas

adelante, podran utilizarse tambien como particiones del conjunto base A.

Los archivos de entrada deberan tener una extension distinguible que los

diferencie de un archivo de texto cualquiera, y cada uno de ellos debera con-

tener una y solo una estructura de hipergrafos, codificada de alguna manera

analoga a la notacion matricial descrita en la seccion 1.2.

2.3. Operadores a implementar

Se implementaran los mismos operadores descritos en la seccion 1.3, en

sus versiones para hipergrafos y estructuras; es decir, µ, ν, σ, τ y λ. Adi-

cionalmente, como apoyo a estos cinco operadores, se deberan implemen-

tar otros operadores elementales, como por ejemplo, aquellos que permitan

el despliegue en pantalla de cada objeto, la comparacion entre hiperaristas

comparables, y determinar el complemento de una hiperarista.

Definicion. Dos hiperaristas X e Y bajo un mismo conjunto base A, son

comparables ssi X ⊆ Y o bien X ⊇ Y .

Definicion. Sean X e Y dos hiperaristas comparables, diremos que X ≤ Y

ssi X ⊆ Y , y que X = Y ssi X ⊆ Y y ademas X ⊇ Y .

Definicion. Dada una hiperarista X bajo un conjunto base A, el comple-

mento de X esta definido como ∼X := A\X.

Es importante recordar que cada uno de estos operadores responde a un

Page 30: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 2. Especificacion de Requisitos 17

algoritmo con una complejidad temporal especıfica, las cuales fueron expli-

citadas en la seccion 1.3.

Un requisito primordial es que la complejidad de cada operador imple-

mentado responda a su verdadera complejidad teorica. Ası, por ejemplo, el

operador µ debe ejecutarse en tiempo polinomial, y ademas lo mas eficiente-

mente posible; lo mismo que los operadores de despliegue, y de comparacion

y complemento para las hiperaristas. Los operadores ν, σ y τ , en cambio,

responden a algoritmos cuyo tiempo de ejecucion es exponencial, por lo que

es mejor optar con ellos por una implementacion clara a una que busque

ser un poco mas eficiente, ya que en estos casos cualquier pequena mejora,

para efectos de investigacion, sera despreciable. El operador λ corresponde

a un caso muy particular que esta estrechamente relacionado con el algorit-

mo sub-exponencial de Khachiyan [4] y el Problema de Dualidad, para el

cual no se sabe si exista una cota polinomial; por lo tanto, en estos casos

nos remitiremos a la mejor solucion conocida hasta ahora, y de ser posible,

procuraremos mejorarla.

2.4. Algoritmos a implementar

2.4.1. Coherencia

Ya vimos que verificar la coherencia de una estructura es un problema

que pertenece a la clase P (ver seccion 1.4.1); por lo tanto, este algoritmo

se intentara implementar de la forma mas eficiente posible. No obstante, no

bastara con retornar un SI o un NO, como se espera de cualquier problema

de decision. A los investigadores les interesa ademas que el algoritmo retorne,

en caso que la estructura NO sea coherente, cual es el par de hiperaristas

cuya interseccion es vacıa, y a que hipergrafos pertenece cada una de ellas.

2.4.2. Completitud

Verificar la completitud de una estructura, en cambio, es un problema

CoNP -completo (ver seccion 1.4.2), ası que se buscara en este caso sobre todo

una implementacion clara y lo mas analoga posible a la definicion teorica.

Page 31: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 2. Especificacion de Requisitos 18

Al igual que con la coherencia, el algoritmo debera retornar informacion

adicional, cuando la estructura NO sea completa; en este caso, cual es la

particion (W,Z) del conjunto base que no es respondida por la estructura

G := (H,K), es decir, tal que W /∈ ν(H) y Z /∈ ν(K).

2.4.3. Semi-completitud

La semi-completitud [20] es condicion necesaria (pero no suficiente) para la

completitud. Puede determinarse en tiempo polinomial, por lo que es de gran

ayuda para la construccion de algoritmos que buscan resolver el Problema

de Dualidad.

Definicion. Una estructura G := (H,K) es semi-completa ssi µ(G) ∩ τ(G)

⊆ λ(G), es decir, si µ(H)∩ τ(K) ⊆ λ(K), y ademas µ(K)∩ τ(H) ⊆ λ(H). En

una estructura completa, en cambio, µ(G) ∩ τ(G) = λ(G).

Ademas, de [20] sabemos que si G es una estructura coherente y minimal,

entonces el problema de semi-completitud para G se reduce a verificar si

G ⊆ λ(G), y puesto que λ(G) = σ(G) ∩ τ(G) (ver seccion 1.3.5), esto es

equivalente a G ⊆ σ(G), es decir, H ⊆ σ(K) y K ⊆ σ(H).

En resumen, entonces, una forma de decidir polinomialmente la semi-

completitud de una estructura, es verificando primero su minimalidad y co-

herencia, y luego si cada uno de sus hipergrafos esta contenido en el crıtico

del otro. En caso de que la respuesta sea NO, sera necesario conocer cual es

el par de hiperaristas que impide que se cumpla alguna de las condiciones

expuestas en el parrafo anterior.

2.4.4. Lema de Chvatal

Otra condicion necesaria (pero no suficiente) para la completitud es la del

Lema de Chvatal [4], que afirma que en toda estructura G := (H,K) com-

pleta, debe existir por lo menos una hiperarista X ∈ H∪K con cardinalidad

suficientemente pequena, esto es, tal que |X| ≤ Log(|H|+ |K|).Este Lema evidentemente puede ser implementado como un algoritmo

polinomial, y en caso que tal hiperarista exista, puede resultar interesante

Page 32: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 2. Especificacion de Requisitos 19

conocerla, y saber a que hipergrafo pertenece.

2.4.5. Algoritmo de Khachiyan

El Algoritmo de Descomposicion de Khachiyan, descrito en [4] y explici-

tado en [20], desde el punto de vista de la complejidad teorica, constituye la

mejor solucion hasta ahora conocida para resolver el Problema de Dualidad.

Es un algoritmo sub-exponencial, pero super-polinomial, basado en la

construccion de un arbol binario, cuyos nodos representan estructuras de

hipergrafos coherentes. El nodo raız es la estructura original, y cada par

de nodos intermedios son estructuras mas pequenas (tambien coherentes)

formadas a partir de una descomposicion de la estructura de su respectivo

nodo padre. Si en algun momento se verifica que todas las hojas del arbol

actual son completas, entonces la estructura original tambien es completa.

Si en algun momento se verifica que al menos una hoja del arbol actual es

incompleta, entonces la estructura original tambien es incompleta.

Para descomponer cada estructura, se debe elegir un a ∈ A, que cumpla

con alguna caracterıstica particular que la haga mas provechosa que las

demas. Por ejemplo, se puede elegir un a que este presente en una hiper-

arista X de cardinalidad pequena. Por el Lema de Chvatal, sabemos que si

la estructura es completa, tal X existe (de no existir, automaticamente la

estructura original es incompleta). Una vez hecha la descomposicion de un

nodo, se debe aplicar µ a las nuevas estructuras.

Las condiciones de parada del algoritmo, vale decir, de la construccion

del arbol binario (que puede hacerse recursivamente recorriendolo en profun-

didad), pueden ser variadas. Por ejemplo, la condicion de semi-completitud

puede ser suficiente para verificar incompletitud, y cuando la cardinalidad de

alguna hiperarista es igual a 1 o 0, resulta sencillo (polinomial) verificar la

completitud.

Al igual que con los algoritmos anteriores, no nos bastara con averiguar

si una estructura dada es o no dual, sino que ademas querremos saber, en

caso de una respuesta negativa, que impide que ella lo sea; esto es, querremos

conocer el par de hiperaristas que la hace incoherente, o bien la particion del

conjunto base que la hace incompleta.

Page 33: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 2. Especificacion de Requisitos 20

2.5. Generacion de estructuras duales

Actualmente no existen algoritmos polinomiales para la generacion de

estructuras de hipergrafos duales. De hecho, de existir un algoritmo tal, serıa

facil probar que el Problema de Dualidad pertenece a NP , puesto que dada

una estructura cualquiera, esta serıa siempre polinomialmente verificable.

El mejor generador de estructuras duales conocido hasta ahora, es uno

que utilizando el operador µ genera aleatoriamente hipergrafos H minimales,

para luego, mediante el Algoritmo de Khachiyan, generar un K = λ(H), de

manera que G := (H,K) sea dual.

Por una parte, la complejidad temporal de este algoritmo (que se cree

es sub-exponencial, aunque nunca polinomial) no es un problema crıtico,

pues no tiene que ver con el Problema de Dualidad propiamente tal, sino

solo con una forma de generar los inputs que despues seran utilizados por

otros algoritmos, que sı estaran destinados a esa finalidad. Por otro lado, sin

embargo, este metodo carece de parametros de control en la generacion, y no

garantiza en ningun caso la obtencion, en un tiempo acotado, de todas las

estructuras duales posibles para un conjunto base dado.

Necesitamos, entonces, de un Generador Aleatorio de Estructuras Duales

(en adelante, simplemente Generador), que garantice la obtencion de todas

las estructuras duales posibles, con una probabilidad (estrictamente) positiva,

para un conjunto base dado.

Especıficamente, nuestro Generador ideal deberıa poseer las siguientes car-

acterısticas:

Dado un conjunto base A ingresado como input, el Generador debe

devolver como output una estructura dual generada al azar, definida

sobre A (no necesariamente con dominio total) y almacenada en un

archivo de texto plano, que sirva como entrada para los operadores y

algoritmos de HiperLab.

Toda estructura dual existente debe tener una probabilidad positiva de

ser obtenida mediante el Generador.

Mientras mas homogenea sea la probabilidad de obtencion de las dis-

tintas estructuras, se considerara mejor el Generador implementado.

Page 34: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 2. Especificacion de Requisitos 21

Esta distribucion de probabilidades sera, entonces, el principal factor

de calidad del Generador.

Aunque la complejidad temporal, como ya se menciono, no es clave en

este contexto, es deseable que el Generador no tenga un comportamien-

to marcadamente ineficiente; mas aun, serıa deseable que su comple-

jidad fuera igual o mejor a la del algoritmo sub-exponencial descrito

anteriormente.

2.6. Requerimientos de HW y SW

HiperLab es un software orientado exclusivamente a la investigacion, por

lo que no tiene fines comerciales. Por lo mismo, se ha desarrollado como un

software libre2 que debe funcionar bajo el sistema operativo Linux (gratuito

y preferido por los investigadores), y sin restricciones de permisos para sus

usuarios.

Dado que la informacion mas valiosa que queremos obtener corresponde a

los tiempos de ejecucion de los algoritmos que mas tarde se implementen, el

sistema debera ejecutarse como sistema batch o por lotes, es decir, de manera

que durante toda la ejecucion del programa, este no tenga interaccion alguna

con el usuario. Solo ası es posible medir experimentalmente cuanto tarda

cada algoritmo en ejecutarse.

Por esta misma razon, tanto la ejecucion de los algoritmos como la visu-

alizacion de los resultados deberan realizarse a traves de la Shell3 de Linux,

haciendose innecesario el uso de algun otro programa de visualizacion.

2.7. Entorno de programacion

HiperLab se implementara utilizando el lenguaje de programacion C++,

por las siguientes razones:

Su paradigma de orientacion a objetos favorece el trabajo modular,

2De libre uso, estudio, distribucion y posibilidad de mejoras por parte de terceros.3Shell: interprete de comandos, terminal o consola

Page 35: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 2. Especificacion de Requisitos 22

permitiendo encapsular los operadores en metodos que se pueden rela-

cionar entre sı.

Permite trabajar con la STL (Standard Template Library)4, un conjunto

de clases parametrizadas que contienen las estructuras de datos mas

utilizadas en programacion (vectores, listas enlazadas, strings, entre

otros), junto con sus principales metodos de manipulacion, lo que nos

significa un ahorro de esfuerzos de programacion.

Al no depender de una maquina virtual como la del lenguaje Java, los

tiempos de ejecucion de los algoritmos implementados en general son

menores a los de este.

Existen muchos IDE’s (Entorno Integrado de Desarrollo) para C++, y

varios de ellos comparten el paradigma de desarrollo OpenSource que

buscamos. De todos ellos, nos hemos decidido por Code::Blocks5, por

su interfaz comoda, por ser multiplataforma y por poseer el compilador

GCC en sus versiones para Linux y Windows.

4Standard Template Library Programmer’s Guide. http://www.sgi.com/tech/stl5The Open Source, Cross-platform, Free C/C++ IDE. http://www.codeblocks.org

Page 36: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3Diseno de HiperLab

3.1. Clases del sistema

El diseno de HiperLab consta de las siguientes cuatro clases: Estruct,

Hgrafo, ParHarista y Harista, las que se relacionan segun el diagrama de

clases de la seccion 3.1.5.

3.1.1. La clase Harista

En esta clase se implementan todos los metodos (operadores y algoritmos)

relacionados con las hiperaristas. Corresponde a la clase de mas bajo nivel

del sistema, en el sentido que no incluye a ninguna de las demas clases y, en

cambio, todas ellas pueden utilizarla, directa o indirectamente.

Cada objeto1 de esta clase posee un unico atributo privado: un vector de

valores booleanos, cuyas posiciones corresponden a cada elemento del conjun-

to base con el que estemos trabajando. Esta estructura vector esta definida

en la STL2 ası que posee metodos personales para manipularla.

Ası, de forma analoga a la notacion matricial de hipergrafos descrita en

la seccion 1.2, una estructura vector definida sobre un conjunto base A :=

a0, ..., an−1 poseera los siguientes valores xi, ∀i = 0, ..., n− 1:1Instancia de una clase.2Standard Template Library.

23

Page 37: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 24

xi =

false(0) , si ai /∈ Atrue (1) , si ai ∈ A

Existen cuatro tipos de constructores de hiperaristas, uno de los cuales

solo sirve como apoyo para la creacion de estructuras de hipergrafos, que

veremos mas adelante.

Los tres constructores restantes son los siguientes:

1. Constructor basico: es el constructor por defecto, que simplemente

crea un objeto de la clase Harista, sin ningun valor para su atributo

privado de tipo vector.

2. Constructor seteado: crea un objeto con un vector booleano ingre-

sado como parametro.

3. Constructor de hiperarista vacıa o llena: crea un objeto con un

vector de un cierto tamano ingresado como parametro. Este vector

podra ser solo de 0’s (hiperarista vacıa) o solo de 1’s (hiperarista igual

al conjunto base), segun se ingrese el valor 0 o 1, respectivamente, como

segundo parametro. Por defecto, la hiperarista construida sera la vacıa.

3.1.2. La clase ParHarista

A esta clase conciernen los metodos relacionados con los pares de hiper-

aristas, una estructura de datos artificial utilizada para representar ademas

particiones3 del conjunto base, que como veremos en la seccion 3.3, son out-

puts usuales en la implementacion de algoritmos.

ParHarista es una clase que incluye a la clase Harista, y que es utilizada

directamente por la clase Hgrafo.

Cada uno de sus objetos posee tambien un unico atributo privado: un

par de punteros a hiperaristas, representado mediante el par ordenado

pair<Harista*, Harista*>. Esta estructura de datos tambien esta defini-

da en la STL, y en nuestro contexto puede representar dos cosas: dos

3Particion: division de un conjunto en dos conjuntos disjuntos.

Page 38: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 25

hiperaristas de los hipergrafos H y K, respectivamente; o bien una particion

(W,Z) de un conjunto base A.

El unico constructor de esta clase toma como parametros dos punteros

a objetos de la clase Harista y los situa, respectivamente, en la primera y

segunda ubicacion del par.

El destructor, por su parte, elimina los punteros que apuntan a cada

hiperarista, para ası liberar el espacio de memoria utilizado.

3.1.3. La clase Hgrafo

Esta clase esta destinada a los hipergrafos. Incluye a la clase ParHarista,

utiliza indirectamente a traves de esta ultima a la clase Harista, y es uti-

lizada directamente por la clase Estruct. Constituye el engranaje principal

de las clases de HiperLab, pues ademas de sus propios metodos, aquı se im-

plementan metodos de apoyo para los operadores y algoritmos de la clase

Estruct.

Los objetos de Hgrafo poseen un unico atributo privado: una lista de

punteros a hiperaristas, es decir, una estructura de datos list<Harista*>,

que esta definida en la STL y permite ingresar y eliminar dinamicamente los

elementos, de manera mas eficiente que la estructura vector. Esta distincion

con respecto a la estructura de datos usada para las hiperaristas, se debe a

que aquellas se definen sobre un conjunto base fijo, en cambio, el tamano de

los hipergrafos es variable.

Existen cuatro constructores de hipergrafos, pero uno de ellos solo sirve

de apoyo en la creacion de estructuras de hipergrafos. Los otros tres con-

structores son los siguientes:

1. Constructor basico: constructor por defecto, que simplemente crea

un objeto de la clase Hgrafo, sin ningun valor para su atributo privado.

2. Constructor seteado: crea un objeto con una lista de punteros a

hiperaristas ingresada como parametro.

3. Constructor seteado con una Harista: hace que la lista del atributo

privado apunte a una unica hiperarista, ingresada como parametro.

Page 39: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 26

El destructor de esta clase elimina todos los punteros que apuntan a las

hiperaristas ligadas a la lista, para ası liberar el espacio de memoria utilizado.

3.1.4. La clase Estruct

Esta es la clase destinada a las estructuras de hipergrafos. Es la clase de

mas alto nivel del sistema, pues incluye a la clase Hgrafo, y utiliza indirec-

tamente a traves de ella a las otras dos. Se comporta de manera similar a

ParHarista, en la medida que su unico atributo privado es un par de punteros

a hipergrafos, es decir, una estructura de datos pair<Hgrafo*,Hgrafo*>.

Los constructores de esta clase son los siguientes:

1. Constructor basico: constructor por defecto, analogo a todos los an-

teriores.

2. Constructor seteado: crea un objeto con un par de punteros a hiper-

grafos ingresado como parametro.

3. Constructor seteado con dos Hgrafo: hace que ambas componentes

del par ordenado que conforma el atributo privado apunten, respecti-

vamente, a dos hipergrafos ingresados como parametros.

4. Constructor desde archivo: recibe como input una estructura de

hipergrafos codificada, en un archivo de texto plano, de manera analoga

a la representacion matricial indicada en la seccion 1.2. Este constructor

se apoya, como ya se menciono, en algunos pertenecientes a otras clases.

Ejemplo. Codificacion de un archivo de entrada.

Estructura de ejemplo

3

001

011

110

#

010

101

Page 40: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 27

111

#

La primera lınea del archivo corresponde al tıtulo de la estructura,

que es desplegado en pantalla por el constructor; la segunda, es el

tamano del conjunto base, |A|; y las lıneas siguientes, corresponden

a las hiperaristas de los hipergrafos H y K, respectivamente, los cuales

se diferencian mediante los separadores #.

El constructor va leyendo secuencialmente cada una de estas lıneas:

entre la tercera y el primer #, construye el primer hipergrafo del par,

llamando al constructor correspondiente de la clase Hgrafo, el cual a

su vez llama en cada nueva lınea al constructor de Harista. Se procede

de la misma manera para el hipergrafo siguiente.

El destructor de esta clase, por su parte, elimina los punteros que apuntan

a cada hipergrafo, liberando ası el espacio de memoria utilizado.

Page 41: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 28

3.1.5. Diagrama de Clases

Figura 3.1: Diagrama de clases de HiperLab.

3.2. Operadores implementados

A continuacion se describen los operadores que se implementaron para

HiperLab, clasificados por clase, y excluyendo a aquellos metodos que no

Page 42: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 29

fueron disenados para ser utilizados por los usuarios finales del sistema, sino

solo como apoyo a otros metodos.

En los apendices de este informe, y como parte del Manual de Usuario

de HiperLab que se proporcionara como parte del Software, se puede ver

una lista resumida con todas las funcionalidades presentes en el sistema, que

contiene tanto estos operadores, como los algoritmos que se describiran en la

seccion siguiente.

Clase Estruct

1. GetE() : pair<Hgrafo*,Hgrafo*>

Descripcion Retorna el atributo privado del objeto que llama al

metodo.

Pseudocodigo Retornar “estruct”

Complejidad O(|A|) := k (constante)

2. GetH(bool b) : Hgrafo*

Descripcion Si b es falso, retorna el primer hipergrafo de la es-

tructura que llama al metodo; sino, retorna el se-

gundo.

Pseudocodigo Dada G := (H,K)

Si b=false, retornar HSino retornar K

Complejidad O(|A|) := k (constante)

3. Mu() : Estruct* 4

Descripcion Retorna la estructura minimal µ(G) de la estruc-

tura G que llama al metodo.

Pseudocodigo Dada G := (H,K)

Redefinir H := µ(H)

Redefinir K := µ(K)

Retornar G := (H,K)

Complejidad O(|A|) := κ(H2 +K2) (polinomial)

4. Nu() : Estruct* 4

Descripcion Retorna la estructura ν(G) respondida por los

hipergrafos de la estructura G que llama al metodo.

Pseudocodigo Dada G := (H,K)

Page 43: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 30

Redefinir H := ν(H)

Redefinir K := ν(K)

Retornar G := (H,K)

Complejidad O(|A|) := 2|A| (exponencial)

5. Sigma() : Estruct* 4

Descripcion Retorna la estructura crıtica σ(G), sujeta a los

hipergrafos de la estructura G que llama al metodo.

Pseudocodigo Dada G := (H,K)

Redefinir H := σ(H)

Redefinir K := σ(K)

Retornar G := (H,K)

Complejidad O(|A|) := 2|A| (exponencial)

6. swap(pair<Hgrafo*,Hgrafo*> est) : Estruct*

Descripcion Cambia el atributo privado del objeto que llama al

metodo.

Pseudocodigo Redefinir “estruct” = est

Complejidad O(|A|) := k (constante)

7. Tau() : Estruct* 4

Descripcion Retorna la estructura τ(G), transversal a los hiper-

grafos de la estructura G que llama al metodo.

Pseudocodigo Dada G := (H,K)

Redefinir H := τ(H)

Redefinir K := τ(K)

Retornar G := (H,K)

Complejidad O(|A|) := 2|A| (exponencial)

8. <<(ostream& output, Estruct& G) : ostream& 4 5

Descripcion Despliega la estructura en pantalla.

Pseudocodigo Dada G := (H,K)

Escribir “H= ” + H + “K= ” + KComplejidad O(|A|) := κ(H +K) (polinomial)

9. +(Estruct& G1, Estruct& G2) : Estruct& 4 5

Descripcion Retorna el join o union G ′ t G ′′ de dos estructuras

G ′ y G ′′ ingresadas como parametro.

Page 44: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 31

Pseudocodigo Dadas G ′ := (H′,K′) y G ′′ := (H′′,K′′)Definir H := H′ tH′′

Definir K := K′ u K′′

Retornar G := (H,K)

Complejidad O(|A|) := κ((H +K)2) (polinomial)

10. *(Estruct& G1, Estruct& G2) : Estruct& 4 5

Descripcion Retorna el meet o interseccion G ′ u G ′′ de dos es-

tructuras G ′ y G ′′ ingresadas como parametro.

Pseudocodigo Dadas G ′ := (H′,K′) y G ′′ := (H′′,K′′)Definir H := H′ uH′′

Definir K := K′ t K′′

Retornar G := (H,K)

Complejidad O(|A|) := κ((H +K)2) (polinomial)

Tabla 3.1: Operadores implementados en Estruct.

Clase Hgrafo

1. GetH() : list<Harista*>

Descripcion Retorna el atributo privado del objeto que llama al

metodo.

Pseudocodigo Retornar “hgrafo”

Complejidad O(|A|) := k (constante)

2. is in(Harista* Z) : bool 6

Descripcion Retorna true si la hiperarista Z ingresada como

parametro pertenece al hipergrafo H que llama al

metodo (es decir, si Z ∈ H); en caso contrario,

retorna false.

Pseudocodigo Dados H, Z ⊆ A

∀X ∈ HSi X = Z

Retornar true

4Estos operadores utilizan operadores de la clase Hgrafo.5Estos son operadores sobrecargados de la clase Estruct.

Page 45: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 32

Retornar false

Complejidad O(|A|) := κ(H) (polinomial)

3. is in nu(Harista* Z) : bool 6

Descripcion Retorna true si la hiperarista Z ingresada como

parametro es respondida por el hipergrafo H que

llama al metodo (es decir, si Z ∈ ν(H)); en caso

contrario, retorna false.

Pseudocodigo Dados H, Z ⊆ A

∀X ∈ HSi X ≤ Z

Retornar true

Retornar false

Complejidad O(|A|) := κ(H) (polinomial)

4. is in sigma(Harista* Z) : bool 6

Descripcion Retorna true si la hiperarista Z ingresada como

parametro es crıtica con respecto al hipergrafo Hque llama al metodo (es decir, si Z ∈ σ(H)); en

caso contrario, retorna false.

Pseudocodigo Dados H, Z ⊆ A

Definir Z ′ = Z

(∀X ∈ H)(∀a ∈ A)

Si a ∈ Z y a′ ∈ X; a′ ∈ Z = aRedefinir Z := Z\a

Si |Z ′| = 0, Retornar true

Sino Retornar false

Complejidad O(|A|) := κ(H) (polinomial)

5. is in sigma(Harista* Z, bool b) : int 6

Descripcion Retorna −1 si la hiperarista Z ingresada como

parametro es crıtica con respecto al hipergrafo Hque llama al metodo (es decir, si Z ∈ σ(H)); en

caso contrario, retorna a ∈ Z tal que (Z\a) ∈σ(H).

Pseudocodigo Dados H, Z ⊆ A

Page 46: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 33

Definir Z ′ = Z

(∀X ∈ H)(∀a ∈ A)

Si a ∈ Z y a′ ∈ X; a′ ∈ Z = aRedefinir Z := Z\a

Si |Z ′| = 0, Retornar −1

Sino Retornar a ∈ Z ′

Complejidad O(|A|) := κ(H) (polinomial)

6. is in tau(Harista* Z) : bool 6

Descripcion Retorna true si la hiperarista Z ingresada como

parametro es transversal del hipergrafo H que lla-

ma al metodo (es decir, si Z ∈ τ(H)); en caso con-

trario, retorna false.

Pseudocodigo Dados H, Z ⊆ A

∀X ∈ HSi (X ∩ Z) = ∅

Retornar false

Retornar true

Complejidad O(|A|) := κ(H) (polinomial)

7. Mu() : Estruct* 6

Descripcion Retorna el hipergrafo minimal µ(H) del hipergrafo

H que llama al metodo.

Pseudocodigo Dado H∀(X, Y ) ∈ H

Si X ≤ Y

Redefinir H := H\Y Retornar H

Complejidad O(|A|) := κ(H2) (polinomial)

8. Nu() : Estruct* 6 7

Descripcion Retorna el hipergrafo ν(H) respondido por las

hiperaristas del hipergrafo H que llama al meto-

do.

Pseudocodigo Dado HDefinir Hν := ∅

Page 47: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 34

∀Z ∈ P(A)

Si Z ∈ ν(H)

Redefinir Hν := Hν ∪ ZRetornar Hν

Complejidad O(|A|) := 2|A| (exponencial)

9. Sigma() : Estruct* 6 7

Descripcion Retorna el hipergrafo crıtico σ(H), sujeto a las

hiperaristas del hipergrafo H que llama al meto-

do.

Pseudocodigo Dado HDefinir Hσ := ∅∀Z ∈ P(A)

Si Z ∈ σ(H)

Redefinir Hσ := Hσ ∪ ZRetornar Hσ

Complejidad O(|A|) := 2|A| (exponencial)

10. swap(list<Harista*> hg) : Hgrafo*

Descripcion Cambia el atributo privado del objeto que llama al

metodo.

Pseudocodigo Redefinir “hgrafo” = hg

Complejidad O(|A|) := k (constante)

11. Tau() : Estruct* 6 7

Descripcion Retorna el hipergrafo τ(H), transversal a las hiper-

aristas del hipergrafo H que llama al metodo.

Pseudocodigo Dado HDefinir Hτ := ∅∀Z ∈ P(A)

Si Z ∈ τ(H)

Redefinir Hτ := Hτ ∪ ZRetornar Hτ

Complejidad O(|A|) := 2|A| (exponencial)

12. <<(ostream& output, Hgrafo& H) : ostream& 6 8

Descripcion Despliega el hipergrafo en pantalla.

Page 48: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 35

Pseudocodigo Dado H∀X ∈ H

Escribir X

Complejidad O(|A|) := κ(H) (polinomial)

13. +(Hgrafo& H, Hgrafo& K) : Hgrafo& 7 8

Descripcion Retorna el join o union H t K de dos hipergrafos

H y K ingresados como parametro.

Pseudocodigo Dados H y KRedefinir H := H ∪KRetornar µ(H)

Complejidad O(|A|) := κ((H +K)2) (polinomial)

14. *(Hgrafo& H, Hgrafo& K) : Hgrafo& 6 7 8

Descripcion Retorna el meet o interseccion HuK de dos hiper-

grafos H y K ingresados como parametro.

Pseudocodigo Dados H y KDefinir J ⊆ P(A), con J := ∅∀X ∈ H∀Y ∈ K

Definir Z ⊆ A, con Z := X ∪ YRedefinir J := J ∪ Z

Retornar µ(J )

Complejidad O(|A|) := κ((H · K)2) (polinomial)

Tabla 3.2: Operadores implementados en Hgrafo.

Clase ParHarista

1. GetHa(bool b) : Harista*

Descripcion Si b es falso, retorna la primera hiperarista del par

de hiperaristas que llama al metodo; sino, retorna

el segundo.

6Estos operadores utilizan operadores de la clase Harista.7Estos operadores utilizan otros operadores de su misma clase.8Estos son operadores sobrecargados de la clase Hgrafo.

Page 49: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 36

Pseudocodigo Dado (W,Z) ⊆ A× ASi b=false, retornar W

Sino retornar Z

Complejidad O(|A|) := k (constante)

2. <<(ostream& output, ParHarista& W Z) : ostream& 9 10

Descripcion Despliega el par de hiperaristas en pantalla.

Pseudocodigo Dado (W,Z) ⊆ A× ASi (W 6= ∅)

Si (Z 6= ∅)Escribir “H= (W=)” + W + “K= (Z=)” + Z

Sino Escribir “H= ” + W

Sino si (Z 6= ∅)Escribir “K= ” + Z

Complejidad O(|A|) := |A| (lineal)

Tabla 3.3: Operadores implementados en ParHarista.

Clase Harista

1. Atomos() : list<Harista*> 11

Descripcion Retorna la lista de hiperaristas (atributo privado

de un objeto Hgrafo) correspondientes a los atomos

de la hiperarista Z que llama al metodo, es decir,

retorna [Z] := a; a ∈ ZPseudocodigo Dada Z ⊆ A

Definir [Z] := ∅∀a ∈ A

Si a ∈ ZDefinir W ⊆ A, con W := ∅Redefinir W := W ∪ aRedefinir [Z] := [Z] ∪W

Retornar [Z]

9Este operador utiliza operadores de la clase Harista.10Este es un operador sobrecargado de la clase ParHarista.

Page 50: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 37

Complejidad O(|A|) := |A| (lineal)

2. Card() : int

Descripcion Retorna la cardinalidad de la hiperarista que llama

al metodo, vale decir, el numero de 1’s en el vector

de su atributo privado.

Pseudocodigo Dada Z ⊆ A

Definir i := 0

∀a ∈ ASi a ∈ Z Redefinir i := i+ 1

Retornar i

Complejidad O(|A|) := |A| (lineal)

3. GetHa() : list<Harista*>

Descripcion Retorna el atributo privado del objeto que llama al

metodo.

Pseudocodigo Retornar “harista”

Complejidad O(|A|) := k (constante)

4. Intersecta(Harista* Z) : bool 11

Descripcion Verifica si la hiperarista W que llama al metodo se

intersecta o no con la hiperarista Z ingresada como

parametro. Si W ∩ Z = ∅, retorna false; en caso

contrario, retorna true.

Pseudocodigo Dadas (W,Z) ⊆ A× A∀a ∈ A

Si a ∈ W y a ∈ ZRetornar true

Retornar false

Complejidad O(|A|) := |A| (lineal)

5. Neg(int a) : Harista*

Descripcion Incluye o elimina un elemento de la hiperarista X.

Si a ∈ X, entonces el metodo hace a /∈ X; y vicev-

ersa.

Pseudocodigo Dados a ∈ A y X ⊆ A

Si a ∈ X

Page 51: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 38

Redefinir X := X\aSino Redefinir X := X ∪ a

Complejidad O(|A|) := k (constante)

6. swap(vector<bool> ha) : Harista*

Descripcion Cambia el atributo privado del objeto que llama al

metodo.

Pseudocodigo Redefinir “harista” = ha

Complejidad O(|A|) := k (constante)

7. swap(int a) : Harista*

Descripcion Cambia el atributo privado del objeto que llama

al metodo, por otro seteado aleatoriamente. Op-

cionalmente, puede setearse aleatoriamente hasta

la posicion a del vector, y lo restante, con 0’s.

Pseudocodigo Dados Z := (x0, x1, ..., xn−1) y a ∈ A∀xi ∈ Z, 0 ≤ xi < a

Si P1/2(xi) = 0 Redefinir xi = 0

Sino Redefinir xi = 1

∀xi ∈ Z, a ≤ xi ≤ n− 1

Redefinir xi = 0

Complejidad O(|A|) := |A| (lineal)

8. <<(ostream& output, Harista& Z) : ostream& 11 12

Descripcion Despliega la hiperarista en pantalla.

Pseudocodigo Dada Z ⊆ A

∀a ∈ AEscribir a

Complejidad O(|A|) := |A| (lineal)

9. <=(Harista& W, Harista& Z) : bool 11 12

Descripcion Verificador de relacion “menor o igual” entre dos

hiperaristas W y Z ingresadas como parametro, en

funcion del orden usual del conjunto base A (de

menor a mayor). Si W ≤ Z, retorna true; en caso

contrario, retorna false.

Pseudocodigo Dadas (W,Z) ⊆ A× A

Page 52: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 39

∀a ∈ ASi a ∈ W y a /∈ Z

Retornar false

Retornar true

Complejidad O(|A|) := |A| (lineal)

10. ==(Harista& W, Harista& Z) : bool 11 12

Descripcion Verificador de relacion “igualdad” entre dos hiper-

aristas W y Z ingresadas como parametro. Si W =

Z, retorna true; en caso contrario, retorna false.

Pseudocodigo Dadas (W,Z) ⊆ A× A∀a ∈ A

Si (a ∈ W y a /∈ Z) o (a /∈ W y a ∈ Z)

Retornar false

Retornar true

Complejidad O(|A|) := |A| (lineal)

11. !=(Harista& W, Harista& Z) : bool 11 12

Descripcion Verificador de relacion “desigualdad” entre dos

hiperaristas W y Z ingresadas como parametro. Si

W 6= Z, retorna true; en caso contrario, retorna

false.

Pseudocodigo Dadas (W,Z) ⊆ A× ASi (W == Z) Retornar false

Sino Retornar true

Complejidad O(|A|) := |A| (lineal)

12. ++(Harista& Z) : Harista& 11 12

Descripcion Incrementa en 1 la codificacion numerica del vec-

tor binario que conforma el atributo privado de la

hiperarista que llama al metodo.

Pseudocodigo Dada Z := (x0, x1, ..., xn−1), con |A| = n

∀i := n− 2, n− 3, ..., 1, 0Si xi = 0

Redefinir xi = 1

break

Page 53: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 40

Sino Redefinir xi = 0

Retornar Z

Complejidad O(|A|) := |A| (lineal)

13. (Harista& Z) : Harista& 11 12

Descripcion Retorna el complemento de la hiperarista Z que

llama al metodo; esto es, la hiperarista A\Z.Pseudocodigo Dada Z ⊆ A

∀a ∈ ASi a ∈ Z Redefinir Z := Z\aSino Redefinir Z := Z ∪ a

Retornar Z

Complejidad O(|A|) := |A| (lineal)

14. +(Harista& W, Harista& Z) : Harista& 11 12

Descripcion Retorna la union de las dos hiperaristas W y Z

que llaman al metodo; esto es, la hiperarista X :=

W ∪ Z.

Pseudocodigo Dadas (W,Z) ⊆ A× ADefinir X ⊆ A, con X := ∅∀a ∈ A

Si (a ∈ W ) o (a ∈ Z)

Redefinir X := X ∪ aRetornar X

Complejidad O(|A|) := |A| (lineal)

Tabla 3.4: Operadores implementados en Harista.

3.3. Algoritmos implementados

En esta seccion se describen los algoritmos (no operadores) que se imple-

mentaron para HiperLab, clasificados por orden alfabetico, y excluyendo a

11Estos operadores utilizan operadores de su misma clase.12Estos son operadores sobrecargados de la clase Harista.

Page 54: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 41

aquellos metodos que no fueron disenados para ser utilizados por los usuar-

ios finales del sistema, sino solo como apoyo a otros metodos. Todos estos

algoritmos fueron disenados para ser llamados como metodos desde la clase

Estruct, sin argumentos, apoyados directamente por la clase Hgrafo y los

operadores existentes, y retornando objetos de la clase ParHarista.

Tal como se dijo en la seccion anterior, en los apendices de este informe,

y como parte del Manual de Usuario de HiperLab que se proporcionara como

parte del Software, figura una lista resumida con todos los operadores ya

mencionados, mas estos algoritmos.

Algoritmos de HiperLab

1. Chvatal() : ParHarista*

Descripcion Verificador del Lema de Chvatal (ver seccion

2.4.4), para la estructura G := (H,K) que llama

al metodo. Si ∃X ∈ (H∪K), con |X| ≤ Log(|H|+|K|), retorna el par de hiperaristas (X,NULL) o

(NULL,X), segun X ∈ H o X ∈ K, respectiva-

mente; en caso contrario, retorna NULL.

Pseudocodigo Dado G := (H,K)

Definir (W,Z) ⊆ A× ADefinir m := Log(|H|+ |K|)∀X ∈ H

Si |X| ≤ m

Definir W := X

Definir Z := NULL

Retornar (W,Z)

∀Y ∈ KSi |Y | ≤ m

Definir W := NULL

Definir Z := Y

Retornar (W,Z)

Retornar NULL

Complejidad O(|A|) := κ(H +K) (polinomial)

2. Coherencia() : ParHarista*

Page 55: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 42

Descripcion Verificador de coherencia (ver seccion 1.4.1), para

la estructura G := (H,K) que llama al metodo. Si

G es coherente, retorna NULL; en caso contrario,

retorna un par (X, Y ) ∈ (H,K) tal que X ∩Y = ∅.Pseudocodigo Dado G := (H,K)

∀X ∈ H∀Y ∈ K

Si X ∩ Y = ∅Retornar (X, Y )

Retornar NULL

Complejidad O(|A|) := κ(H · K) (polinomial)

3. Completitud() : ParHarista*

Descripcion Verificador de completitud (ver seccion 1.4.2),

para la estructura G := (H,K) que llama al meto-

do. Si G es completa, retorna NULL; en caso con-

trario, retorna una particion (W,Z) de A, tal que

W /∈ ν(H) y Z /∈ ν(K).

Pseudocodigo Dado G := (H,K)

Si H = ∅ y K = ∅Retornar (∅, ∅)

∀Z ∈ P(A)

Definir W := A\ZSi W /∈ ν(H) y Z /∈ ν(H)

Retornar (W,Z)

Retornar NULL

Complejidad O(|A|) := 2|A| (exponencial)

4. Dualidad() : ParHarista*

Page 56: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 43

Descripcion Verificador de dualidad (ver seccion 1.4.3), para la

estructura G := (H,K) que llama al metodo. Cor-

responde a la implementacion del Algoritmo de

Descomposicion de Khachiyan (seccion 2.4.5),

la mejor solucion a la fecha conocida para resolver

el Problema de Dualidad de Hipergrafos. Si G es

dual, retorna NULL; en caso contrario, retorna

una particion (W,Z) de A que hace a G incom-

pleta (no semi-completa), o el par de hiperaristas

(X, Y ) ∈ (H,K) que la hace incoherente.

Pseudocodigo Dado G := (H,K)

Redefinir G := µ(G)

Si G = ∅Retornar (∅, ∅)

Si ((H = ∅ y ∅ ∈ K) || (K = ∅ y ∅ ∈ H))

Retornar NULL

Definir (X, Y ) := G →Coherencia()

Si (X, Y ) 6= NULL

Retornar (X, Y )

Retornar G →is completa(A)

ParHarista is completa(set A)

Definir (W,Z) := G →Semi completa()

Si (W,Z) 6= NULL

Retornar (W,Z)

Si (H = ∅ || K = ∅)Retornar NULL

Definir A′ := A\aElegir b ∈ 0, 1Definir G ′ := G →ProyRest(a, b)

Definir (W,Z) := G ′ →is completa(A′)

Si (W,Z) 6= NULL

Retornar (W,Z)

Page 57: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 44

Redefinir b := ¬bDefinir G ′ := G →ProyRest(a, b)

Definir (W,Z) := G ′ →is completa(A′)

Si (W,Z) 6= NULL

Retornar (W,Z)

Retornar NULL

estructura ProyRest(elem a, bool b)

Dado G := (H,K)

Si (b = 1)

Definir H′ := X ∈ H; a /∈ XDefinir K′ := Y \a; a ∈ Y ∈ KDefinir K′′ := Y ; a /∈ Y ∈ KRedefinir K′′ := K′′\ν(K′)Redefinir K′ := K′ ∪ K′′

Sino

Definir K′ := Y ∈ K; a /∈ Y Definir H′ := X\a; a ∈ X ∈ HDefinir H′′ := X; a /∈ X ∈ HRedefinir H′′ := H′′\ν(H′)Redefinir H′ := H′ ∪H′′

Retornar G ′ := (H′,K′)Complejidad O(|A|) := 2Log|A| (sub-exponencial)

5. Semi completitud() : ParHarista*

Descripcion Verificador de semi-completitud (ver seccion

2.4.3), para la estructura G := (H,K) (minimal

y coherente) que llama al metodo. Si G es semi-

completa, retorna NULL; en caso contrario, retor-

na una particion (W,Z) de A, con W := X\atal que X /∈ σ(K), o bien Z := Y \a tal que

Y /∈ σ(H).

Pseudocodigo Dado G := (H,K)

∀X ∈ H

Page 58: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 45

Si ∃a ∈ X tal que X /∈ σ(K)

Definir W := X\aDefinir Z := A\WRetornar (W,Z)

∀Y ∈ KSi ∃a ∈ Y tal que Y /∈ σ(H)

Definir Z := Y \aDefinir W := A\ZRetornar (W,Z)

Retornar NULL

Complejidad O(|A|) := κ(H2 +K2) (polinomial)

Tabla 3.5: Algoritmos implementados en HiperLab.

3.4. Generadores de Estructuras Duales

Se proponen para este Laboratorio dos metodos de generacion ineditos

hasta ahora, que basados en las ideas de [19], pretenden obtener aleatoria-

mente todas las estructuras duales existentes sobre un conjunto base dado.

En general, ambos metodos se basan en el siguiente algoritmo polinomial

de composicion, el cual, dadas dos estructuras duales G ′ y G ′′ tales que una

responde a la otra, previamente generadas y definidas sobre un conjunto base

A, las compone en una nueva estructura dual G, definida sobre un conjunto

base A ∪ a superior al original, con a /∈ A:

1. Componer(G ′, G ′′, A, a)

2. 3. Dadas G ′ y G ′′ duales

4. Definir H := (H′′ u Ta) tH′; con Ta := a, a /∈ A5. Definir K := (K′′ t Ta) u K′

6. Retornar G := (H,K)

7.

Note que las lıneas 4, 5 y 6 se pueden reemplazar por la siguiente:

Page 59: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 46

?. Retornar G := (G ′′ u (Ta, Ta)) t G ′

Lema 1. Sean G ′ y G ′′ estructuras duales, entonces la estructura G retornada

por Componer(G ′,G ′′, A, a) es dual.

Demostracion. Sabemos del Lema 1 de [18], que si dos estructuras G y G ′

son duales (coherentes, completas), entonces G u G ′ y G t G ′ tambien son

duales (coherentes, completas). Luego, sean G := (Ta, Ta), G ′ := (H′,K′) y

G ′′ := (H′′,K′′) todas duales, entonces G ′′uG := (H′′uTa,K′′tTa) es dual, y

el retorno G := (G ′′ u G) t G ′ := ((H′′ u Ta) tH′, (K′′ t Ta) uK′) tambien.

Lema 2. Dada una estructura dual G sobre A ∪ a, con a /∈ A, siempre

existe un par de estructuras duales (G ′,G ′′) definidas sobre A, con G ′ v G ′′,tal que G esta compuesto por G ′ y G ′′.

Demostracion. En efecto, toda estructura G := (H,K) definida sobre un

A∪a, dado a /∈ A, puede componerse mediante dos estructuras duales G ′ :=(H′,K′) y G ′′ := (H′′,K′′) definidas sobre A, haciendoH′ := X; a 6∈ X ∈ H,K′ := Y \a;Y ∈ K, H′′ := X\a;X ∈ H y K′′ := Y ; a 6∈ Y ∈ K;esto porque (H′′ u Ta) t H′ = X ∪ a;X ∈ H t X; a /∈ X ∈ H = H, y

lo mismo para K.

A continuacion se describen en detalle los dos Generadores que se imple-

mentaron, los cuales se diferencian principalmente en la obtencion de cada

par de estructuras duales, que posteriormente compondran una nueva es-

tructura dual. El primer Generador, por su parte, a partir de una estructura

dual produce otra para conformar el par; el segundo Generador, en cambio,

produce independientemente cada estructura que conformara cada par.

3.4.1. Generador-A

Es posible identificar al menos tres variantes para un Generador de este

tipo, las cuales se diferencian unicamente en la manera que tienen de obten-

er cada par de estructuras duales (G ′,G ′′) que compondran la estructura Gsiguiente:

Page 60: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 47

1. Fortaleciendo un G ′ dado para obtener G ′′: la dualidad se mantiene

incrementando paulatinamente G ′, hasta obtener un G ′′ que lo contiene,

en el sentido que G ′ v G ′′.

2. Debilitando un G ′′ dado para obtener G ′: la dualidad se mantiene decre-

mentando paulatinamente G ′′, hasta obtener un G ′ contenido en el, en

el sentido que G ′′ w G ′.

3. Generacion mixta: fortaleciendo y debilitando un G, para obtener, re-

spectivamente, G ′ y G ′′ tal que G ′ v G v G ′′, a partir de las cuales se

compondra un nuevo G, distinto al original.

Para HiperLab solo se construyo la variante del punto 1. Las otras dos no

fueron consideradas para este trabajo, por no aportar un gran aporte teorico

adicional en el tema. En particular, la segunda variante por debilitamiento

se trata de un caso totalmente equivalente al primero.

El algoritmo para este Generador es el siguiente:

1. Dado A

2. Definir A′ := ∅3. Definir G ′ := (∅, ∅)4. ∀a ∈ A5. 6. Definir G ′′ := G ′ →Mantener dualidad()

7. Redefinir G ′ :=Componer(G ′,G ′′, A′, a)

8. Redefinir A′ := A′ ∪ a9.

10. Redefinir G := G ′

11. Retornar G

La funcion Mantener dualidad() que permite obtener, a partir de una

estructura dual G ′ := (H′,K′) sobre A, otra estructura dual G ′′ := (H′′,K′′),tal que G ′ v G ′′, esta dada por:

1. Mantener dualidad()

2.

Page 61: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 48

3. Dadas G ′, p4. Determinar x al azar en intervalo [0, 1]

5. Si (x ≥ p)

6. 7. Determinar Z ⊆ A al azar

8. Mientras Z /∈ ν(H′), repetir:

9. 10. Redefinir H′ := H′ t Z11. Redefinir K′ := K′ u [Z]

12. Determinar Z ⊆ A al azar

13. 14. 15. Retornar G ′′ := G ′

16.

La variable x (lıneas 4 y 5) corresponde a un valor aleatorio en el intervalo

[0, 1], el cual, de ser menor a un valor fijo p definido de antemano, impide

la eleccion de Z’s en esa iteracion. Esto es necesario para que todas las

estructuras duales tengan alguna posibilidad de ser generadas.

Lema 3. Toda estructura obtenida por el Generador-A es dual.

Demostracion. Es claro que ∀Z ⊆ A, GZ := (Z, [Z]) es dual. Luego,

como G ′ := (H′,K′) es dual, entonces por el Lema 1 de [18], el retorno de la

forma G ′ t GZ := (H′ t Z,K′ u [Z]) tambien es siempre dual.

Lema 4. Toda estructura dual tiene alguna probabilidad de poder obtenerse

mediante el Generador-A.

Demostracion. Dada G dual sobre A′ := A∪a, por Lema 2 sabemos que

existen G ′, G ′′ duales sobre A que la componen, y tal que G ′ v G ′′. Luego,

por induccion, podemos suponer que G ′ puede a su vez obtenerse mediante

el Generador-A, y dado el caso, tambien se puede, a partir de G ′, obtener G ′′

mediante Mantener dualidad; porque basta que en algun orden se produzcan

los Z’s deH′′\H′ (y solo ellos), lo que se dara siempre con alguna probabilidad

(aunque sea muy baja).

Page 62: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 49

Note que si el algoritmo de generacion comenzara con la otra estructura

dual definida sobre A := ∅, es decir, (∅, ∅), independientemente del Z

elegido, esta estructura jamas cambiarıa. Por ello, se trata de un caso extremo

muy particular, que aunque sea demasiado trivial, existe y por tanto hay que

tener mentalmente en cuenta. Esta ultima estructura serıa la que deberıamos

elegir inicialmente para trabajar con la segunda variante del Generador, pues

es la unica definida sobre A := ∅ que puede debilitarse.

Lema 5. La complejidad computacional del Generador-A, a pesar que to-

davıa se desconoce, es super-polinomial.

Demostracion. En efecto, en [21] se demuestra que para cualquier A dado,

siempre existe un G ′′ dual que se puede obtener mediante las lıneas 10 y

11 de la funcion Mantener dualidad, a partir de un G ′ := (∅, ∅) y de una

secuencia de Z’s generados al azar; pero se demuestra ademas, que a pesar que

el tamano κ(K′′) de K′′ estara acotado por κ(H′′) (es decir, sera tan pequeno

como aquel), siempre existiran, independientemente de la sucesion de los

Z’s, estructuras G ′ := (H′, K′) intermedias con κ(K′) = κ(H′)Ω(loglogκ(H′)), es

decir, de tamanos super-polinomiales.

A pesar de lo anterior, como veremos mas adelante, este algoritmo se com-

porta en la practica al menos tan eficientemente como el Generador tradi-

cional (aquel descrito al comienzo de la seccion 2.5).

Finalmente, note que el Generador-A requirio de la definicion de oper-

adores adicionales. Todos ellos son claramente polinomiales, y fueron tambien

implementados en sus respectivas clases (ver seccion 3.2).

3.4.2. Generador-B

El algoritmo para este Generador es el siguiente:

1. Dado A

2. Genera(A)

3. 4. Si A = ∅5.

Page 63: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 50

6. Elegir b ∈ 0, 1 al azar

7. Si b = 0 Retornar (∅, ∅)8. Sino Retornar (∅, ∅)9.

10. Elegir a ∈ A11. Definir G ′ :=Genera(A\a)12. Definir G ′′ :=Genera(A\a)13. Componer(G ′ u G ′′,G ′ t G ′′, A, a)

14.

Note que la lınea 13 se puede reemplazar por la siguiente:

?. Retornar G := (G ′ u G ′′) t ((Ta, Ta) u (G ′ t G ′′))

Lema 6. Toda estructura obtenida por el Generador-B es dual.

Demostracion. Dado el caso A := ∅, es evidente que siempre se retorna una

estructura dual. Luego, por induccion, suponiendo G ′ y G ′′ duales, entonces,

por Lema 1 de [18], G ′ u G ′′ y G ′ t G ′′ seran duales, y su composicion, por

Lema 1, retornara una nueva estructura dual.

Lema 7. Toda estructura dual tiene alguna probabilidad de poder obtenerse

mediante el Generador-B.

Demostracion. Es evidente que toda estructura dual sobre A := ∅ es

obtenible mediante el Generador-B. Luego, por induccion, podemos suponer

que dada una estructura dual G definida sobre A′ := A ∪ a, esta puede

obtenerse tambien mediante el Generador-B; porque por el Lema 2 sabemos

que existen G ′, G ′′ duales sobre A que la componen, de manera que G ′ v G ′′,y tal que por hipotesis de induccion, tambien son obtenibles mediante el

Generador-B.

Este algoritmo llama recursivamente al metodo Genera, y su condicion

de parada corresponde a la lınea 4. Al igual que el Generador-A, comienza

con estructuras pequenas definidas en A := ∅, las cuales se van incremen-

tando hasta llegar a una estructura final, definida en el A ingresado como

parametro.

Page 64: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 3. Diseno de HiperLab 51

En este caso, sin embargo, se construye virtualmente un arbol binario de

recursion completo, donde cada nodo esta determinado determinısticamente

por sus dos nodos hijos. Ası se generan, para un conjunto base A, 2|A| estruc-

turas para el primer nivel, con A := ∅. Recordemos que en el Generador-A,

en cambio, solo se generaban dos estructuras para cada nivel del conjunto

base.

Esto, por un lado, afecta enormemente la complejidad algorıtmica del

problema. En efecto, el Generador-B posee claramente un comportamiento

exponencial. Sin embargo, como veremos en el Capıtulo 5, donde compara-

remos ambos generadores, la distribucion de probabilidades de las estructuras

que produce el Generador-B es mucho mas homogenea que la del Generador-

A; y esto, como dijimos en la seccion 2.5, fue nuestro principal objetivo.

Quedara, no obstante, como trabajo futuro la mejora en la eficiencia y

homogeneidad de estos Generadores.

Page 65: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 4Metodologıa de desarrollo

4.1. Organizacion de HiperLab

4.1.1. Organizacion general

HiperLab esta conformado por los siguientes componentes:

1. Bibliotecas de cabecera: corresponde a las bibliotecas del codigo

fuente, es decir, a los archivos con extension .hpp donde estan imple-

mentadas las cuatro clases Harista, ParHarista, Hgrafo y Estruct

del sistema, junto con sus respectivos metodos.

2. Plataforma de experimentacion: aquı estan contenidos los archivos

fuente .cpp y los makefile de compilacion para producir los ejecuta-

bles. Estos archivos fuentes utilizan las bibliotecas del ıtem anterior

para la implementacion de algoritmos de experimentacion construidos

por los usuarios finales.

3. Generador de estructuras: el archivo Generador.cpp y su corre-

spondiente makefile. Este programa utiliza las bibliotecas propias del

Laboratorio, permitiendo generar estructuras de hipergrafos duales,

tanto para las etapas de testing como para pruebas aisladas de los

algoritmos implementados en la Plataforma de experimentacion.

4. Repositorio de Estructuras: lugar donde se almacenan las estruc-

turas de hipergrafos, como archivos de texto plano con extension .in

52

Page 66: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 4. Metodologıa de desarrollo 53

(de input) que los hace distinguible de los demas. Estos archivos pueden

crearse manualmente, o bien generarse automaticamente, utilizando el

Generador de estructuras.

5. Documentacion: conjunto de documentos afines a HiperLab; esto es,

manuales de usuario, documentos teoricos relacionados, y este mismo

informe de Memoria, junto con sus anexos.

Estos componentes estan almacenados individualmente en directorios, y

se organizan conforme el siguiente arbol de directorios:

Figura 4.1: Arbol de directorios de HiperLab.

El directorio principal HiperLab corresponde a la Plataforma de exper-

imentacion del Laboratorio, y en cada sub-directorio se ubica uno de los

componentes restantes.

Esta separacion mediante directorios tiene como finalidad ordenar el tra-

bajo de los usuarios finales del sistema, separando sus archivos de los pro-

pios de HiperLab, y evitando ası la edicion o eliminacion indeseada de estos

ultimos. Ası, una organizacion clara y transparente constituye un factor de

seguridad adicional para el Laboratorio.

4.1.2. Organizacion del codigo fuente

La totalidad del codigo fuente de HiperLab (archivos .hpp y .cpp) se

encuentra documentado.

Page 67: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 4. Metodologıa de desarrollo 54

Como se trata de un sistema de codigo abierto, se procuro que las lıneas

de codigo mas importantes de los archivos fuente .cpp, desde el punto de

vista de los algoritmos que implementan, estuvieran claramente comentadas,

para ası apoyar su entendimiento por parte de terceros. Ademas, se puso

especial atencion en que los outputs de los algoritmos fueran explicativos y

detallaran durante su computo explıcitamente en que paso se encontraban.

Para el caso de las bibliotecas .hpp, aparte de lo anterior, fue necesario

anadir una pequena resena del funcionamiento de cada uno de los metodos

implementados. Ademas se creo una etiqueta1 APOYO, que antecede al codigo

de cada metodo cuya unica finalidad es ayudar a otro metodo de la misma

clase, o de una clase jerarquicamente superior (ver seccion 3.1). Los metodos

con etiquetas APOYO son los unicos que no fueron disenados para ser utilizados

directamente por los usuarios finales.

Ejemplo. Una documentacion tıpica que antecede a la implementacion de

un metodo (en este caso, al metodo Completitud de la clase Hgrafo) es la

siguiente:

// [APOYO: Estruct-> Completitud]

/* Verificador de Completitud */

/* retorna NULL si es completa y ParHarista si no lo es */

La etiqueta APOYO de la primera lınea (encerrada entre corchetes para

mayor diferenciacion) indica que se trata de un metodo de apoyo a su meto-

do homonimo de la clase Estruct (en efecto, no tiene sentido verificar la

completitud de un solo hipergrafo). La segunda lınea es una suerte de tıtulo

del metodo, y la tercera, un breve resumen de lo que este debiera hacer o

retornar. Obviamente, el contenido de cada lınea depende del metodo; no to-

dos los metodos poseen la primera lınea; y la tercera lınea se puede extender

a mas de una, o bien puede prescindirse de ella, cuando el metodo es muy

simple.

La distribucion de los metodos dentro del codigo de cada biblioteca sigue

1Etiqueta: pequena marca o post-it para aclarar alguna idea o concepto, en este caso,escrita como comentario en el codigo fuente.

Page 68: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 4. Metodologıa de desarrollo 55

el siguiente orden:

1. Constructores de la clase.

2. Destructor de la clase.

3. Metodos propios de la clase (para el uso de terceros).

4. Metodos de apoyo para el funcionamiento de otros metodos.

5. Operadores estandar sobrecargados.

Finalmente, cabe destacar que mucha de la documentacion tiene que ver

con notaciones matematicas, las cuales no pueden representarse en archivos

de texto plano, como lo son los archivos de programacion. Es por esto que

se opto por utilizar un lenguaje en pseudo-LATEX, permitiendo mantener la

formalidad necesaria.

4.2. Gestion y configuracion de cambios

Durante todo el desarrollo de software se utilizo la metodologıa Extreme

Programing (XP), preferida para la realizacion de proyectos a corto plazo,

con pocos desarrolladores y una relacion estrecha con el cliente. En este caso,

se fueron entregando constantemente pequenos avances (implementaciones

de codigo o borradores del informe final) al profesor patrocinante, el cual los

revisaba mediante pequenos testing informales. Esto permitio una continua

retroalimentacion positiva cliente-desarrollador, facilitando la verificacion de

los requerimientos del software, y apoyando la minimalidad del codigo fuente,

en el sentido que ningun modulo del sistema resulta irrelevante.

Para garantizar el exito de esta metodologıa se puso especial atencion

en la organizacion de las entregas y la actualizacion y evolucion del sistema.

Apoyados en la organizacion general de HiperLab (seccion 4.1.1) cada avance

de implementacion que se entrego al profesor patrocinante se hizo de la sigu-

iente forma:

Cada avance se envio vıa e-mail, en archivos comprimidos en .tar.gz,

llamados HiperLab.tar.gz. Su descompresion modifica automatica-

mente el contenido anterior del sistema, pudiendose verificar la version

Page 69: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 4. Metodologıa de desarrollo 56

actual de un archivo mediante su ultima fecha de modificacion, o bien

en la carpeta “Recibidos” del correo electronico.

Por cada avance enviado, se guardo en el computador del de-

sarrollador una copia, con un nombre que seguıa el formato

mes-dia-nombre_archivo.tar.gz. Tales archivos se guardaron en

una carpeta adicional de HiperLab, llamada Respaldo, y situada en el

mismo nivel jerarquico que las carpetas 1, 3, 4 y 5, de la figura de 4.1.

Todos los archivos enviados, y por ende, almacenados en el repositorio

Respaldo, debıan compilar y venir acompanados de un archivo fuente

.cpp que arrojara outputs coherentes.

En cada envıo, el nuevo archivo HiperLab.tar.gz solo debıa contener

los archivos modificados o nuevos, y todos ellos, dentro de sus subcar-

petas correspondientes.

4.3. Plan de Testing

Para verificar el cumplimiento de los requisitos funcionales del software,

se realizo primero un plan de testing general, con el fin de verificar experi-

mentalmente la correctitud de los operadores y algoritmos implementados, y

si estos efectivamente permiten la implementacion de algoritmos interesantes,

relacionados con el Problema de Dualidad.

Una vez terminado este testing, se dio paso a la ejecucion de un segun-

do plan de testing, esta vez abocado a los Generadores, para realizar un

analisis comparativo entre el Generador-A y el Generador-B, en relacion a

su distribucion de probabilidades de generacion y a su eficiencia.

4.3.1. Plan de Testing General

A lo largo de toda la etapa de desarrollo del sistema, cada operador y algo-

ritmo, descrito en el Capıtulo 3, fue testeado independientemente luego de ser

implementado. Para este fin, se creo un unico archivo fuente2 en la Platafor-

2Este archivo fuente se mantuvo en el producto final, por tratarse de un codigo genericoque introduce al usuario novato en la utilizacion del programa.

Page 70: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 4. Metodologıa de desarrollo 57

ma de Experimentacion (directorio principal), que despliega en pantalla la

estructura original del archivo de entrada, y luego los resultados obtenidos

de la aplicacion de las distintas funcionalidades deseadas. Con esto se com-

probo el cumplimiento de los requisitos funcionales 1, 2 y 3, descritos en el

Capıtulo 2.

No obstante, aun es necesario hacer ver que las funcionalidades implemen-

tadas permiten efectivamente construir otros algoritmos interesantes, rela-

cionados con El Problema de Dualidad. Esto se pudo verificar justamente

mediante la implementacion de los Generadores descritos en el Capıtulo

3, los cuales debıan poder construirse utilizando unicamente las funcional-

idades existentes en HiperLab. Ademas, ambos Generadores, una vez con-

struidos, fueron testeados como cajas negras, tomando una serie de estruc-

turas obtenidas de su ejecucion como archivos de salida, y utilizandolas como

archivos de entrada para verificar, mediante el Algoritmo de Khachiyan y

desde la Plataforma de Experimentacion, la dualidad de todas ellas.

Figura 4.2: Prueba de ejecucion del Algoritmo de Khachiyan.

Page 71: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 4. Metodologıa de desarrollo 58

4.3.2. Plan de Testing de Generadores

Tanto el Generador-A como el Generador-B despliegan en pantalla de

igual manera las estructuras finales obtenidas de su ejecucion, ademas de

almacenar tales estructuras en el archivo de salida correspondiente, el cual

se situa automaticamente dentro del Repositorio de Estructuras.

La figura 4.3 muestra una captura de pantalla de la ejecucion de uno

de los Generadores. Parte de los datos que se exhiben son producto de una

modificacion que se hizo en el codigo fuente, con el fin de explicitar los valores

|Dom(G)|, |H| y |K|, ademas del tiempo de ejecucion. El calculo de todos

estos valores tiene complejidad constante, por lo que no afecta la eficiencia

del Generador.

Todos estos datos debieron posteriormente manipularse para obtener in-

formacion mas detallada, que permitiese comparar ambos Generadores, segun

su distribucion de probabilidades de generacion de estructuras.

Figura 4.3: Captura de pantalla de una generacion de estructura dual.

Page 72: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 4. Metodologıa de desarrollo 59

Como etapa previa al analisis de los datos se definio el siguiente plan de

testing:

1. Ejecutar 50 veces cada Generador, para cada uno de los siguientes

valores de |A|: 3, 5, 7, 9 y 11.

2. Construir para cada Generador y para cada valor de |A|, una tabla con

los valores |Dom(G)|, |H|, |K|, |H|+ |K|, κ(G) y el tiempo de ejecucion

(en segundos).

En base a esta informacion, se construyeron posteriormente distribuciones

de frecuencia y graficos que permitieron llegar a interesantes conclusiones.

Page 73: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5Testing

5.1. Testing General

Ambos Generadores se implementaron utilizando solo algoritmos y op-

eradores provistos por HiperLab, sin la necesidad de construir metodos adi-

cionales ni sobrecargas de operadores de ningun tipo.

Ademas, cada Generador se ejecuto 50 veces para 5 distintos conjuntos

base ingresados como argumento, obteniendo 500 estructuras como archivos

de salida, las que, ingresadas como input para el Algoritmo de Khachiyan,

siempre arrojaron respuesta positiva, afirmando su dualidad. Luego, a cada

estructura se le quito una hiperarista al azar, con lo cual el Algoritmo de

Khachiyan, segun lo esperado, cambio su respuesta indicando no-dualidad.

Todo esto corrobora que los Generadores cumplen efectivamente su ob-

jetivo principal de generar estructuras de hipergrafos duales, y que ademas

pudieron lograrlo prescindiendo de herramientas de programacion ajenas a

las proporcionadas por HiperLab.

5.2. Testing de Generadores

El plan de testing se ejecuto segun lo descrito en la seccion 4.3.2, y los

resultados obtenidos se tabularon como se muestra en las tablas 5.2, 5.3, 5.4 y

5.5, al final de este capıtulo. Para el analisis de los datos, se compararon, para

cada valor de |A|, las distribuciones de frecuencia de κ(G) en cada Generador:

60

Page 74: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5. Testing 61

Fig

ura

5.1

:C

om

para

cio

nd

ed

istr

ibu

cio

nes

de

frecu

en

cia

.

Page 75: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5. Testing 62

Las ordenadas de cada grafico representan el numero de estructuras

obtenidas para cada rango de κ(G), cuyos valores estan representados en

las abscisas, y evidentemente aumentan a medida que aumenta |A|, pues

recordemos que κ(G) := |A| · (|H|+ |K|).En estos graficos puede apreciarse que el Generador-A produjo en gen-

eral estructuras mucho mas pequenas que el Generador-B, lo que se debe

fundamentalmente a dos razones:

La gran mayorıa de las estructuras obtenidas con el Generador-A tienen

dominio parcial, mientras que las obtenidas con el Generador-B, tienen

dominio total. Esto se puede apreciar en las tablas al final del capıtulo,

donde se marcaron con una T todas las estructuras con dominio total.

Las estructuras obtenidas con el Generador-A poseen en general un

hipergrafo con muy pocas hiperaristas; no ası el Generador-B, donde

el numero de hiperaristas entre ambos hipergrafos es bastante similar.

La explicacion para esto es que la probabilidad de que el Generador-A

produzca estructuras G ′′ mucho mayores que G ′ es muy baja, debido, por un

lado, a que en cada iteracion de la funcion Mantener dualidad (ver seccion

3.4.1), al elegir un Z /∈ ν(H′), este aumentara H′ (mediante el join), pero a la

vez disminuira la probabilidad de elegir un proximo Z que no lo responda; y

por el otro, a que para obtener este G ′′ grande, deben obtenerse en una misma

iteracion un numero importante de Zs consecutivos que no respondan a H′, y

la probabilidad de conseguir un Z tal disminuye exponencialmente en funcion

del incremento logrado por los Zs anteriores. Por lo tanto, la composicion de

G ′ y G ′′ retornara estructuras G con relativamente pocas hiperaristas X ∈ H,

tal que a ∈ X (ver algoritmo Componer en seccion 3.4), lo que implica un

|H| pequeno (ergo, un |K| pequeno), con dominio incompleto.

Page 76: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5. Testing 63

Esta diferencia en el tamano de las estructuras puede apreciarse tambien

en las concentraciones de las frecuencias en cada grafico, donde las estructuras

generadas por el Generador-A se ubican en su enorme mayorıa a la izquierda,

y las generadas por el Generador-B, al centro del grafico 1.

Note ademas que estas distribuciones son casi disjuntas, lo que induce a

creer que en la practica, y al contrario de lo demostrado en los Lemas 4 y

7, los Generadores no logran obtener todas las estructuras existentes, como

supusimos serıa el caso; es decir, el Generador-A no consigue generar las es-

tructuras obtenidas por el Generador-B, y viceversa. No obstante, note que

en el cuarto grafico se da un caso en que el Generador-B produce una estruc-

tura relativamente pequena que esta dentro de los rangos del Generador-A.

Y ademas note que, segun [19]2, la mayorıa de las estructuras duales serıan

las de mayor tamano, y por tanto, en conjunto, mas probables de generar.

Finalmente, note que el Generador-B tiene una mejor distribucion de

probabilidades de generacion de estructuras que el Generador-A, puesto

que su rango de generacion es mas amplio. Esto, segun nuestro criterio

de calidad definido originalmente en los requisitos funcionales, nos harıa

preferir al Generador-B de entre ambos. Pero un estudio minucioso del

tema podrıa eventualmente contradecir conclusiones apresuradas. A pesar

de haber demostrado teoricamente que ambos Generadores pueden obtener

todas las estructuras duales, tambien queda experimentalmente (y en el caso

del Generador-A, incluso tambien teoricamente) claro que la probabilidad

de obtener con ellos cierto tipo de estructuras es muy cercana a cero.

Este (importante) problema de generacion quedara como trabajo futuro.

Nos contentamos, por ahora, con haber logrado obtener estructuras aleatorias

que sabemos son duales, y en el caso del Generador-B, la mayorıa de las veces

con dominio total y distribucion relativamente homogenea.

1Es sabido que dado un conjunto base A, existen estructuras duales, suponiendo |A|impar, de tamano κ(G) = 2 · |A| ·

( |A||A|2 +1

); a saber, aquellas con H = K := Z ⊆ A; |Z| =

|A|2 + 1. Ası, por ejemplo, para |A| = 7, κ(G) = 490, por lo que las distribuciones del

Generador-B en la figura 5.2 estarıan ubicadas en el centro del grafico, y no a la derecha.2Allı se propone un lattice de estructuras duales, ordenado segun v, cuyos maximo y

mınimo son las estructuras (∅, ∅) y (∅, ∅), respectivamente.

Page 77: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5. Testing 64

Con respecto a la evaluacion del rendimiento promedio, se obtuvieron los

siguientes resultados:

Generador-ATime (s) κ(G) |A|0.024477 6 30.024957 18 50.025579 32 70.029065 57 90.037442 110 11

Generador-BTime (s) κ(G) |A|0.025140 12 30.029012 53 50.079097 231 70.805939 811 914.99955 2910 11

Tabla 5.1: Resultados promedio para ambos Generadores.

que representados graficamente se ven como sigue:

Figura 5.2: Eficiencia algorıtmica.

Este grafico muestra la eficiencia de ambos generadores. Se ve claramente

que el Generador-A se comporta muchısimo mejor que el Generador-B, en

funcion de |A|; en efecto, el Generador-B presenta claramente un compor-

tamiento exponencial. Sin embargo, si consideramos este grafico en funcion

de κ(G), ambos comportamientos no deberıan ser demasiado distintos. En

Page 78: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5. Testing 65

otras palabras, el Generador-B es mucho mas lento que el Generador-A, no

tanto porque su estrategia de generacion sea mas ineficiente que la del segun-

do, sino porque tal estrategia genera en su mayorıa estructuras con dominio

total y con tamanos muy grandes. Eventualmente, si el Generador-A (luego

de muchos intentos) lograra generar una estructura mayor, esta tambien po-

drıa tardar mucho tiempo en obtenerse.

Page 79: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5. Testing 66

|A|=

3

|Dom

(G)|

|H|

|K|

|H|+

|K|

κ(G

)time(s)

11

12

20.02394

22

13

60.023985

22

13

60.02479

11

12

20.024906

22

13

60.022544

22

13

60.020765

11

12

20.025606

22

13

60.025032

3T

22

412

0.02266

11

12

20.025337

22

13

60.024352

3T

22

412

0.023282

22

13

60.020256

11

12

20.026372

11

12

20.026982

22

13

60.022855

22

13

60.02474

3T

22

412

0.027196

11

12

20.021509

11

12

20.023142

3T

22

412

0.02226

11

12

20.026361

11

12

20.026781

3T

22

412

0.027727

22

13

60.023896

22

13

60.024596

3T

22

412

0.022907

3T

22

412

0.023755

11

12

20.025018

22

13

60.021382

22

13

60.026223

11

12

20.028051

21

23

60.025231

22

13

60.021381

22

13

60.023762

21

23

60.021096

3T

33

618

0.024302

3T

31

412

0.026271

3T

13

412

0.022355

3T

22

412

0.0221

11

12

20.021109

21

23

60.021397

11

12

20.02467

11

12

20.023127

22

13

60.023803

22

13

60.027391

3T

22

412

0.026239

11

12

20.024449

3T

22

412

0.025095

22

13

60.020864

|A|=

5

|D(G

)||H

||K

||H

|+|K

|κ(G

)time(s)

5T

42

630

0.027629

22

13

60.025691

11

12

20.026091

43

25

20

0.026238

5T

42

630

0.025034

22

13

60.02476

11

12

20.023199

22

13

60.021966

32

24

12

0.02051

11

12

20.024074

43

25

20

0.023666

22

13

60.026841

22

13

60.025115

5T

36

945

0.024838

5T

55

10

50

0.023665

43

25

20

0.024737

43

25

20

0.027666

22

13

60.022243

32

24

12

0.024329

44

37

28

0.024031

32

24

12

0.023012

43

25

20

0.025597

22

13

60.02738

22

13

60.023957

43

25

20

0.023278

5T

43

735

0.022403

22

13

60.023775

22

13

60.025112

5T

42

630

0.028014

43

25

20

0.024658

5T

45

945

0.023793

43

25

20

0.02177

43

25

20

0.023149

32

24

12

0.029646

32

24

12

0.021236

42

35

20

0.023408

32

24

12

0.024443

11

12

20.022192

32

24

12

0.022531

22

13

60.024141

5T

54

945

0.025806

42

35

20

0.025406

22

13

60.027001

5T

44

840

0.026295

44

37

28

0.025438

44

15

20

0.025755

42

35

20

0.023708

42

46

24

0.022065

32

24

12

0.025489

42

35

20

0.025052

|A|=

7

|D(G

)||H

||K

||H

|+|K

|κ(G

)time(s)

33

14

12

0.025416

7T

36

96

0.022606

7T

55

10

60.024428

22

13

20.027405

22

13

60.026572

53

36

60.022656

11

12

20.023075

33

14

60.022763

33

14

12

0.024139

53

36

20.028406

33

14

60.026888

43

25

12

0.023748

7T

45

96

0.026346

7T

46

10

20.027325

32

24

20.026417

7T

76

13

60.029071

53

36

60.025282

54

26

12

0.025272

64

37

20.023929

22

13

20.026964

7T

46

10

12

0.025165

43

25

20.022035

33

14

20.024547

64

48

12

0.028173

53

36

60.026157

43

25

60.024655

22

13

12

0.024306

53

36

12

0.024528

43

25

20.022526

7T

45

96

0.022935

22

13

60.026511

22

13

20.026008

54

48

60.02752

54

59

60.028717

22

13

60.024866

7T

67

13

60.025171

22

13

18

0.026381

7T

48

12

12

0.029203

53

36

12

0.024432

43

25

12

0.025029

33

14

20.022475

7T

48

12

60.026112

64

48

20.027415

65

38

20.024692

43

25

60.026386

22

13

60.02353

43

25

12

0.026625

64

48

20.02407

54

26

12

0.023546

53

47

60.026506

Tab

la5.2

:T

est

ing

de

Gen

era

dor-

Ap

ara|A|=3,5,7.

Page 80: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5. Testing 67

|A|=

9

|Dom

(G)|

|H|

|K|

|H|+

|K|

κ(G

)time(s)

85

611

88

0.026885

76

39

63

0.025562

52

46

30

0.025069

85

813

104

0.030371

54

26

30

0.025095

53

36

30

0.027547

75

712

84

0.032030

64

59

54

0.026494

84

711

88

0.028751

64

48

48

0.026480

9T

917

26

234

0.057476

73

811

77

0.030830

87

11

18

144

0.040835

85

712

96

0.032650

54

26

30

0.033124

74

59

63

0.023932

53

36

30

0.025575

22

13

60.025363

22

13

60.030006

22

13

60.028035

22

13

60.023457

73

58

56

0.027434

65

27

42

0.023437

84

711

88

0.028465

87

613

104

0.033305

33

14

12

0.028996

52

46

30

0.025369

43

25

20

0.026910

53

36

30

0.029846

64

59

54

0.028320

42

35

20

0.027497

75

49

63

0.028333

32

24

12

0.026801

75

611

77

0.031633

65

49

54

0.028712

33

14

12

0.025159

64

37

42

0.026589

9T

410

14

126

0.026026

22

13

60.025059

53

36

30

0.024403

64

610

60

0.032282

22

13

60.024796

9T

610

16

144

0.047416

43

25

20

0.026293

74

812

84

0.034261

84

913

104

0.029035

75

510

70

0.031337

64

48

48

0.024961

85

510

80

0.029250

43

25

20

0.025751

|A|=

11

|Dom

(G)|

|H|

|K|

|H|+

|K|

κ(G

)time(s)

22

13

60.025472

10

716

23

230

0.066323

54

26

30

0.025634

84

59

72

0.026494

33

14

12

0.025169

97

15

22

198

0.058355

64

37

42

0.028327

53

47

35

0.032616

11

T5

13

18

198

0.033129

11

T7

17

24

264

0.063717

54

37

35

0.028462

64

48

48

0.032560

64

37

42

0.027377

74

48

56

0.026163

33

14

12

0.026298

22

13

60.022591

10

721

28

280

0.067121

10

58

13

130

0.029364

64

37

42

0.026217

33

14

12

0.025213

85

611

88

0.033968

22

13

60.025893

10

620

26

260

0.050367

83

69

72

0.027852

54

26

30

0.029323

98

715

135

0.043439

63

47

42

0.026211

10

11

13

24

240

0.066073

54

26

30

0.031309

11

T6

20

26

286

0.051847

74

59

63

0.025975

75

49

63

0.039751

74

48

56

0.029390

95

813

117

0.029877

96

612

108

0.036921

63

69

54

0.035385

53

36

30

0.028424

10

612

18

180

0.040742

84

711

88

0.027031

10

58

13

130

0.026020

10

514

19

190

0.040415

74

48

56

0.028954

11

T7

18

25

275

0.051997

65

49

54

0.031295

11

T8

14

22

242

0.055249

10

10

20

30

300

0.102238

54

26

30

0.028788

10

817

25

250

0.066246

53

36

30

0.027276

11

T3

21

24

264

0.037228

Tab

la5.3

:T

est

ing

de

Gen

era

dor-

Ap

ara|A|=9,1

1.

Page 81: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5. Testing 68

|A|=

3

|Dom

(G)|

|H|

|K|

|H|+

|K|

κ(G

)time(s)

3T

33

618

0.023825

3T

22

412

0.022892

21

23

60.023562

3T

22

412

0.023577

3T

22

412

0.022898

3T

31

412

0.027482

21

23

60.023673

3T

33

618

0.026656

3T

33

618

0.029913

3T

31

412

0.023546

3T

22

412

0.025053

3T

33

618

0.027347

3T

22

412

0.024400

3T

22

412

0.026022

22

13

60.023884

3T

33

618

0.020071

3T

22

412

0.024938

3T

22

412

0.025211

3T

22

412

0.025525

3T

33

618

0.025666

21

23

60.025191

3T

22

412

0.023782

3T

22

412

0.022292

3T

22

412

0.023322

21

23

60.023926

21

23

60.026545

11

12

20.024182

3T

13

412

0.023290

22

13

60.025744

3T

22

412

0.021797

3T

22

412

0.031798

3T

31

412

0.026788

3T

13

412

0.023076

3T

33

618

0.023919

3T

33

618

0.034908

11

12

20.024618

3T

13

412

0.020864

3T

33

618

0.030316

3T

22

412

0.027069

3T

33

618

0.023900

21

23

60.032189

3T

22

412

0.028662

3T

22

412

0.024054

3T

22

412

0.023328

3T

22

412

0.021558

3T

22

412

0.021044

3T

33

618

0.033400

11

12

20.022426

3T

22

412

0.022543

3T

22

412

0.024321

|A|=

5

|D(G

)||H

||K

||H

|+|K

|κ(G

)time(s)

5T

77

14

70

0.026961

5T

56

11

55

0.031990

5T

57

12

60

0.029129

5T

66

12

60

0.028857

5T

37

10

50

0.027005

5T

55

10

50

0.027562

5T

44

840

0.031754

5T

87

15

75

0.032155

5T

66

12

60

0.028072

5T

43

735

0.025515

5T

66

12

60

0.027203

5T

45

945

0.028997

5T

77

14

70

0.026372

5T

54

945

0.027196

5T

44

840

0.026809

5T

66

12

60

0.030043

5T

45

945

0.029699

5T

45

945

0.027949

5T

77

14

70

0.030685

5T

66

12

60

0.028452

5T

55

10

50

0.037667

5T

54

945

0.028566

5T

56

11

55

0.027685

5T

55

10

50

0.028278

5T

55

10

50

0.029566

5T

87

15

75

0.033329

5T

64

10

50

0.029408

5T

55

10

50

0.026196

5T

46

10

50

0.031797

5T

55

10

50

0.024794

5T

54

945

0.024654

5T

55

10

50

0.029144

5T

45

945

0.032212

5T

55

10

50

0.029195

5T

57

12

60

0.026159

5T

65

11

55

0.028883

5T

66

12

60

0.028674

5T

77

14

70

0.026019

5T

56

11

55

0.029723

5T

66

12

60

0.030932

43

25

20

0.028886

5T

64

10

50

0.035902

5T

55

10

50

0.030441

5T

45

945

0.027941

32

24

12

0.025248

5T

77

14

70

0.029628

5T

66

12

60

0.030333

5T

66

12

60

0.028362

5T

45

945

0.029768

5T

67

13

65

0.028797

|A|=

7

|D(G

)||H

||K

||H

|+|K

|κ(G

)time(s)

7T

14

15

29

203

0.073015

7T

18

13

31

217

0.071504

7T

18

19

37

259

0.077710

7T

12

14

26

182

0.069341

7T

17

17

34

238

0.064128

7T

16

16

32

224

0.080931

7T

16

17

33

231

0.074483

7T

20

16

36

252

0.077096

7T

18

16

34

238

0.085348

7T

17

16

33

231

0.085456

7T

20

22

42

294

0.094113

7T

17

21

38

266

0.094563

7T

19

15

34

238

0.071256

7T

13

14

27

189

0.069208

7T

16

18

34

238

0.084613

7T

17

19

36

252

0.078335

7T

20

16

36

252

0.067610

7T

19

19

38

266

0.082607

7T

17

16

33

231

0.072725

7T

19

17

36

252

0.061652

7T

16

16

32

224

0.084486

7T

13

14

27

189

0.080447

7T

14

13

27

189

0.074239

7T

14

15

29

203

0.076234

7T

18

15

33

231

0.079463

7T

15

15

30

210

0.073338

7T

15

12

27

189

0.081999

7T

14

14

28

196

0.085780

7T

17

18

35

245

0.071902

7T

15

18

33

231

0.084696

7T

18

16

34

238

0.080974

7T

14

15

29

203

0.070950

7T

14

15

29

203

0.069911

7T

16

18

34

238

0.090181

7T

14

19

33

231

0.090010

7T

15

15

30

210

0.069212

7T

20

16

36

252

0.080064

7T

14

17

31

217

0.068558

7T

16

16

32

224

0.081595

7T

21

22

43

301

0.092226

7T

17

16

33

231

0.072333

7T

17

18

35

245

0.093477

7T

19

17

36

252

0.075223

7T

17

15

32

224

0.091308

7T

13

14

27

189

0.070065

7T

14

17

31

217

0.076978

7T

18

19

37

259

0.104866

7T

18

19

37

259

0.082713

7T

17

16

33

231

0.080948

7T

19

20

39

273

0.084962

Tab

la5.4

:T

est

ing

de

Gen

era

dor-

Bp

ara|A|=3,5,7.

Page 82: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 5. Testing 69

|A|=

9

|Dom

(G)|

|H|

|K|

|H|+

|K|

κ(G

)time(s)

9T

42

39

81

729

0.709325

9T

45

43

88

792

0.655464

9T

43

39

82

738

0.815629

9T

53

43

96

864

0.836942

9T

52

49

101

909

0.902451

9T

52

45

97

873

0.796999

9T

54

55

109

981

0.937789

9T

43

39

82

738

0.667070

9T

42

41

83

747

0.756809

9T

40

47

87

783

0.813318

9T

48

48

96

864

0.873560

9T

43

48

91

819

0.729076

9T

48

46

94

846

0.894203

9T

42

44

86

774

0.783554

9T

55

48

103

927

0.935926

9T

44

47

91

819

0.782155

9T

42

45

87

783

0.728604

9T

41

50

91

819

0.778868

9T

44

43

87

783

0.801494

9T

40

52

92

828

0.734627

9T

43

49

92

828

0.951197

9T

40

46

86

774

0.655391

9T

41

42

83

747

0.720712

9T

46

40

86

774

0.885418

9T

46

45

91

819

0.767792

9T

45

35

80

720

0.692567

9T

41

35

76

684

0.734278

9T

60

52

112

1008

1.071190

9T

43

51

94

846

0.911540

9T

40

49

89

801

0.681429

9T

51

48

99

891

0.880103

9T

46

47

93

837

0.768595

9T

39

45

84

756

0.691717

9T

48

56

104

936

0.750745

9T

49

53

102

918

0.710063

9T

42

44

86

774

0.709010

9T

48

54

102

918

0.905823

9T

43

52

95

855

0.806489

9T

47

47

94

846

1.162130

9T

42

38

80

72

0.741105

9T

47

48

95

855

0.847621

9T

43

42

85

765

0.767482

9T

45

45

90

810

0.780556

9T

42

52

94

846

0.765658

9T

46

50

96

864

0.854270

9T

55

53

108

972

0.949553

9T

48

49

97

873

0.887805

9T

49

48

97

873

0.847618

9T

40

37

77

693

0.683713

9T

44

44

88

792

0.781519

|A|=

11

|Dom

(G)|

|H|

|K|

|H|+

|K|

κ(G

)time(s)

11

T122

132

254

2794

15.07710

11

T140

147

287

3157

18.36570

11

T144

135

279

3069

18.52400

11

T142

139

281

3091

15.82980

11

T144

158

302

3322

18.68370

11

T139

138

277

3047

13.97480

11

T140

138

278

3058

15.24620

11

T134

148

282

3102

17.50640

11

T114

117

231

2541

11.93520

11

T134

140

274

3014

17.71570

11

T120

134

254

2794

13.47970

11

T150

148

298

3278

18.81790

11

T125

130

255

2805

15.65170

11

T128

119

247

2717

12.19330

11

T141

145

286

3146

16.95170

11

T136

142

278

3058

17.99240

11

T132

128

260

2860

14.48120

11

T136

125

261

2781

14.17550

11

T141

132

273

3003

15.05540

11

T122

118

240

2640

13.66910

11

T141

117

258

2838

13.67560

11

T144

133

277

3047

14.99510

11

T113

115

228

2508

10.75200

11

T129

134

263

2893

15.16810

11

T142

136

278

3058

14.20980

11

T138

128

266

2926

16.57870

11

T141

135

276

3036

15.41360

11

T122

119

241

2651

13.16100

11

T140

138

278

3058

13.91270

11

T118

119

237

2607

11.75620

11

T118

112

230

2530

10.20580

11

T122

112

234

2574

13.81190

11

T136

139

275

3025

13.46630

11

T133

130

263

2893

14.06700

11

T135

125

260

2860

16.36960

11

T143

131

274

3014

16.75200

11

T128

140

268

2948

14.76620

11

T144

131

275

3025

15.78480

11

T136

142

278

3058

16.46890

11

T120

130

250

2750

15.02420

11

T127

125

252

2772

13.80840

11

T124

126

250

2750

13.50950

11

T132

132

264

2904

14.26170

11

T135

144

279

3069

15.44330

11

T122

129

251

2761

14.92700

11

T138

143

281

3091

17.07840

11

T137

134

271

2981

13.75490

11

T119

124

243

2673

12.39330

11

T131

136

267

2937

16.27510

11

T129

144

273

3003

16.85980

Tab

la5.5

:T

est

ing

de

Gen

era

dor-

Bp

ara|A|=9,1

1.

Page 83: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 6Conclusiones

En esta Memoria de Tıtulo se ha construido un Laboratorio de Hiper-

grafos que cumple con todos los requisitos funcionales descritos en la seccion

2.1. HiperLab permite tanto la creacion como manipulacion de estructuras,

hipergrafos e hiperaristas, ademas de la ejecucion de los operadores y algo-

ritmos basicos relacionados con el Problema de Dualidad de Hipergrafos.

Observamos que los paradigmas de diseno y programacion utilizados du-

rante toda la etapa de desarrollo, a saber, la orientacion a objetos y la mod-

ularidad, fueron un gran acierto, pues favorecen una de las caracterısticas

quiza mas esperanzadoras de este trabajo: su reusabilidad, propiedad que hace

permisiva la utilizacion de este software por parte de otros investigadores-

programadores relacionados con el tema. Esta reusabilidad se debe a que tan-

to operadores como algoritmos fueron implementados independientemente de

las futuras aplicaciones que los utilicen, todos con entradas y salidas generi-

cas y sin parametros de entrada prescindibles. Pero corresponde, ademas, a

una decision de diseno y programacion que ha ido de la mano con el de-

sarrollo de lo que pretende ser una teorıa de hipergrafos de alto nivel [18]

[19] [20], donde los detalles de los conceptos mas complejos pueden ser pasa-

dos por alto, quedando encapsulados en los operadores mas basicos que los

conforman.

No obstante lo anterior, el proyecto no estuvo escaso de dificultades. Antes

de comenzar el desarrollo del Laboratorio, existıan muchos conceptos y de-

talles tecnicos poco maduros, e incluso obviados, que ahora han salido a luz

70

Page 84: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 6. Conclusiones 71

en toda su inesperada complejidad. Nos referimos, por ejemplo, al problema

de definir una jerarquıa de clases, que permitiese la implementacion de los

distintos operadores y algoritmos (la idea de una clase ParHarista, a saber,

en un principio no estaba contemplada); o bien a la organizacion del software,

mediante el uso de directorios; o a la utilizacion de plantillas para organizar

el codigo fuente. Sin embargo, entre todas las dificultades encontradas, sin

duda la mayor de todas resulto ser la del Problema de generacion de estruc-

turas duales, el cual no pudo ser resuelto satisfactoriamente. Recordemos, eso

sı, que una solucion polinomial a este Problema de Generacion implicarıa la

pertenencia del Problema de Dualidad a la clase NP (ver seccion 2.5).

Porque a pesar de haber logrado construir dos Generadores capaces de

producir, en teorıa, todas las estructuras duales, existen para ambos, es-

tructuras cuyas probabilidades de ser obtenidas son practicamente nulas. En

particular, vimos en los graficos de la figura 5.2 que las estructuras obtenidas

por el Generador-A son practicamente inalcanzables por el Generador-B, y

viceversa. Asimismo, suponemos que existen estructuras duales inalcanzables

para ambos Generadores. En este sentido, cabe decir que los resultados del

testing de Generadores no son en ningun caso concluyentes, lo que queda claro

con la nota de la seccion 5.2, que indica que no debemos fiarnos ciegamente

de los lımites de κ(G) mostrados en los graficos de la figura 5.2.

Por otra parte, como resultado experimental de la comparacion entre am-

bos Generadores, concluimos que el Generador-B era mejor que el Generador-

A, en el sentido que el primero genera estructuras duales con una distribucion

de probabilidades mas homogenea, y la gran mayorıa de las veces con un do-

minio total. No obstante, debemos considerar que el objetivo de obtener tales

estructuras es el de utilizarlas como inputs no triviales para algoritmos y oper-

adores relacionados con el Problema de Dualidad; y puesto que este problema

es sub-exponencial, en la practica resulta inviable la generacion de estruc-

turas en un tiempo exponencial, dada la cantidad y tamano de ellas que se

necesitan para realizar pruebas mas interesantes. Es en la practica, entonces,

demasiado restrictivo el comportamiento exponencial del Generador-B.

Dado lo anterior, surge una pregunta natural: ¿son mejores los nuevos

Generadores obtenidos, a la manera “tradicional” de generacion (aquella que

Page 85: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 6. Conclusiones 72

determina H minimales al azar, para obtener desde allı K := λ(H))?

La respuesta a esta pregunta no es directa. Sabemos que el Generador

tradicional serıa sub-exponencial (aunque nunca polinomial, por su depen-

dencia del Algoritmo de Khachiyan) si pudiesemos generar cualquier hiper-

grafo minimal, al azar y en tiempo sub-exponencial. Pero este es un problema

abierto, que sabemos es equivalente a nuestro Problema de generacion de es-

tructuras duales, debido a que existe una correspondencia uno a uno entre

las estructuras duales y los hipergrafos minimales. Por lo tanto, la resolu-

cion de cualquiera de estos problemas gatillarıa una solucion para el otro.

De hecho, los Generadores A y B propuestos, esencialmente lo que hacen es

ir generando justamente hipergrafos minimales H, fuera de que ademas pro-

duzcan hipergrafos λ(H), lo que para efectos de este analisis resulta lateral.

Por un lado, el Generador-A, aunque se demostro era super-polinomial

(Lema 5), en la practica se comportaba eficientemente. Sin embargo, su dis-

tribucion de probabilidades de generacion resulto ser muy poco homogenea,

y sus estructuras generadas, todas demasiado pequenas. Por otro lado, el

Generados-B, aunque poseıa una distribucion bastante homogenea, pecaba

de un comportamiento marcadamente exponencial, ya claro a partir de su

diseno, lo que restringe su utilizacion practica a conjuntos base demasiado

pequenos. Por ultimo, con respecto al Generador tradicional, desconocemos

su distribucion de probabilidades, ası como no tenemos claro como obtener el

H minimal. Porque si utilizaramos, por ejemplo, el metodo de fortalecimiento

de la variante implementada del Generador-A, ¿como sabrıamos hasta donde

fortalecerlo? ¿como impedir que se precisen demasiadas iteraciones (en fun-

cion de |H|) antes de llegar al H final, al momento de eliminar hiperaristas

producto del join, tal como ocurre con el Generador-A?

Por todo esto, resulta claro que se deberıa a futuro investigar otras formas

de generacion.

Una manera “natural” serıa, por ejemplo, dada la estructura vacıa, ir

fortaleciendo sus hipergrafos paulatinamente, manteniendo la coherencia de

G, y hasta que esta sea completa. Esto podrıa lograrse mediante el sigu-

iente algoritmo (considerando la funcion Dualidad como la implementada en

HiperLab):

Page 86: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 6. Conclusiones 73

1. Dado G := (H,K) = (∅, ∅)2. Definir (W,Z) = G →Dualidad( )

3. Mientras (W,Z) 6= ∅4. 5. //Dentro de iteracion, (W,Z) es particion no respondida por (H,K)

6. Elegir b ∈ 0, 1 al azar

7. Si b = 0, Redefinir H := H t W8. Si b = 1, Redefinir K := K t Z9. Definir (W,Z) = G →Dualidad( )

10. 11. Retornar G := (H,K) //G es completa y por tanto dual

Este generador es correcto, en el sentido que permite obtener todas las es-

tructuras duales, pero super-polinomial al igual que el Generador-A, puesto

que las hiperaristas W o Z ingresadas pueden “eliminar” (al momento de

hacer el join) hiperaristas antiguas, respectivamente, de H o K. Un tipo de

mejoras que se podrıa barajar para evitar estas eliminaciones, serıa aumen-

tar el control sobre la generacion, forzando que las estructuras obtenidas

sean siempre semi-completas (en cuyo caso los nuevos W,Z agregados siem-

pre pertenecerıan a las transversales minimales de los hipergrafos), en par-

ticular, haciendo que las hiperaristas integradas sean siempre minimal-no-

respondidas por el hipergrafo al que se integran (de manera que respondan

siempre a muchas hiperaristas, obteniendo estructuras pequenas con hiper-

aristas que no se pueden eliminar). Pero aun ası encontramos problemas, pues

tales restricciones van en desmedro de la obtencion de todas las estructuras

duales: en general, vemos que no todas las estructuras completas se pueden

obtener a partir de generaciones de solo semi-completas, a saber, por ejem-

plo, la estructura H := K := 110, 101, 011; y en el particular, relacionado

con las minimal-no-respondidas, las estructuras obtenidas serıan demasiado

pequenas, de modo que si partieramos con alguna estructura incompleta, no

es seguro que se pudiesen generar todas las posibles completas, a saber, por

ejemplo, para el caso H := K := ∅, el cual necesariamente terminarıa en una

iteracion integrando ∅ a uno de los hipergrafos. Adicionalmente, tal como se

hizo con los Generadores A y B, se precisarıa ademas estudiar la distribucion

de probabilidades de generacion de este metodo.

Page 87: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Capıtulo 6. Conclusiones 74

Intuitivamente, pareciera ser que ası como esta, este Generador produce

en general estructuras demasiado grandes (de tamano exponencial en funcion

de |A|), bien porque obtendrıa estructuras ubicadas muy cerca del centro del

lattice (seccion 5.2), o bien porque necesitarıa normalmente de muchas par-

ticiones (W,Z) para que hagan completo a G. Esto constituye un problema,

ya que tales estructuras son facilmente verificables en el Problema de Dual-

idad, en tiempo polinomial en funcion de su tamano, por un algoritmo que

simplemente pruebe todas las particiones de A. Y justamente este pareciera

ser el caso tambien de nuestro Generador-B, el cual seguramente con altas

probabilidades genera estructuras duales que se hacen completas “por des-

gaste”, vale decir, porque ya poseen tal tamano que resultarıa difıcil que no

lo fueran.

Vemos ası que las estructuras duales mas difıciles de obtener, parecieran

ser aquellas que no se obtienen por medio de este “desgaste”, sino al contrario,

son resultado de una secuencia “suficiente” y “precisa” de hiperaristas Z no

respondidas.

Esta conjetura nos invita a formular otra nueva pregunta: ¿por que esmer-

arnos en la generacion de todas las estructuras duales, y no buscar generar

solo un subconjunto representativo de ellas? Porque, ciertamente, existen al-

gunos tipos de estructuras para las cuales decidir su dualidad es un problema

al que el Problema de Dualidad General se puede reducir polinomialmente.

Tal es el caso de las estructuras saturadas (aquellas minimales que no pueden

crecer mas sin dejar de serlo) o de las auto-duales (aquellas con H = K),

entre otras.

Estas son consideraciones que se pueden tomar en trabajos futuros, para

la busqueda de Generadores mas eficientes a los implementados en HiperLab.

Page 88: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Bibliografıa

[1] C. Berge. Graphs and Hypergraphs. Dunod. 1970.

[2] A. Polymeris. Stability of two player games structures. Discrete AppliedMathematics. doi:10.1016/j.dam.2007.11.009, 2007.

[3] A. Polymeris, R. Contreras, M.A. Pinninghoff, E. Osses. Response-ability and its complexity. Proceedings of the International Conferenceon Artificial Intelligence IC-AI’02, volume III, CSREA Press, Las Ve-gas, USA. 2002.

[4] M.L. Fredman, L. Khachiyan. On the complexity of dualization of mono-tone disjunctive normal forms. Journal of Algorithms, 21. 1996.

[5] E. Boros, V. Gurvich, L. Khachiyan, K. Makino. Dual-bounded gener-ating problems: partial and multiple transversal of a hypergraph. SIAMJournals, SICOMP volume 30 issue 6. 2001.

[6] E. Boros, K. Elbassioni, V. Gurvich, L. Khachiyan, K. Makino. Dual-bounded generating problems: all minimal integer solutions for a mono-tone system of linear inequalities. SIAM Journals, SICOMP volume 31issue 5. 2002.

[7] E. Boros, V. Gurvich, L. Khachiyan, K. Makino. Dual-bounded gener-ating problems: weighted transversals of a hypergraph. Journal of Algo-rithms. 2003.

[8] E. Boros, K. Elbassioni, V. Gurvich, L. Khachiyan. An Efficient Imple-mentation of a Quasi-Polynomial Algorithm for Generating HypergraphTransversals and its Application in Joint Generation. Algorithms - ESA2003, 11th Annual European Symposium, Budapest, Hungary. 2003.

[9] V. Gurvich. Nash-solvability of games in pure strategies. USSR. Comput.Math. and Math. Phys., 15(2):357-371. 1975.

75

Page 89: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Bibliografıa 76

[10] T. Eiter, G. Gottlog. Identifying the minimal transversals of a hyper-graph and related problems. SIAM J. Computing, 24(6):1278-1304. 1995.

[11] T. Eiter, G. Gottlog, K. Makino. New results on monotone dualizationand generating hypergraph transversals. Proceeding of the STOC’02 con-ference, Montreal, Quebec, Canada. 2002.

[12] Kavvadias, E. Stavropoulos. A new algorithm for the transversal hyper-graph problem. echnical Report CTI TR 99.03.03, Computer TechnologyInstitute, Patras, Greece. 1999.

[13] D. Kavvadias, E. Stavropoulos. Evaluation of an algorithm for thetransversal hypergraph problem. Proceedings of the 3rd InternationalWorkshop on Algorithm Engineering, p. 72-84. 1999.

[14] S. MacLane, G. Birkhoff. Algebra. The MacMillan Company. 1986.

[15] G. Avello. Apuntes de Matematicas Universales, Cap.2: Relaciones Bina-rias. Departamento de Matematicas, Universidad de Concepcion, Chile.2003.

[16] F. Riquelme. Completitud de hipergrafos en Zchaff. Trabajo de investi-gacion. DIICC, Universidad de Concepcion, Chile. 2006.

[17] G. Gallo, M. Scutella. Directed Hypergraphs as a Modelling Paradigm.Technical Report. UMI Order Number: TR-99-02., University of Pisa.1999.

[18] A. Polymeris. Structure Response-Ability. Apunte de estudio. DIICC,Universidad de Concepcion, Chile. 17/10/2007.

[19] A. Polymeris. Hypergraph Response-Ability. Apunte de estudio. DIICC,Universidad de Concepcion, Chile. 26/02/2007.

[20] A. Polymeris. Weak Completeness Problem. Apunte de estudio. DIICC,Universidad de Concepcion, Chile. 10/05/2004.

[21] K. Takata. On the sequential method for listing minimal hitting sets.Proceedings Workshop on Discrete Mathematics and Data Mining, 2ndSIAM International Conference on Data Mining, April 11-13, Arlington,Virginia, USA. 2002.

Page 90: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Apendice AManual de usuario

A.1. Como utilizar HiperLab

Los nuevos codigos fuente que implemente debera crearlos en el directo-rio “HiperLab”, correspondiente a la “plataforma de experimentacion” delsistema. Para utilizar tanto los operadores como los algoritmos de HiperLab,ubicados en el directorio “Clases”, es necesario incluir previamente la claseEstruct en el encabezado de su archivo, mediante la instruccion:

#include "./Clases/Estruct.hpp"

Esta clase llama a todas las demas. Sin embargo, si se desea manipularuna clase especıfica (junto con todas las que esten por debajo de su jerarquıa),entonces debe llamarla mediante una instruccion del tipo:

#include "./Clases/Nombre_clase"

Una vez termine de implementar su algoritmo, puede ejecutar cualquierade los generadores ubicados en el directorio “Generador”, los cuales ledevolveran estructuras duales aleatorias del tamano deseado, que seranalmacenadas en el directorio “Estructuras”. Estos generadores requierende dos argumentos: el nombre principal del archivo con extension .in enque sera almacenada la estructura, y la cardinalidad del conjunto basesobre el cual estara definida. Ası, el archivo se almacenara bajo el nombre|A|_nombre_principal_archivo.in. Recuerde que cualquiera de estasestructuras dejara de ser dual, si elimina cualquiera de sus hiperaristas.

Finalmente, si lo desea, puede ir guardando los informes de sus experien-cias con HiperLab en la carpeta “Documentacion”.

77

Page 91: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Apendice A. Manual de usuario 78

A.2. Algoritmos y Operadores de HiperLab

Clase Estruct

1. Chvatal. Verificador del Lema de Chvatal.ParHarista* Chvatal(); O(|A|) := κ(H +K).

2. Coherencia. Verificador de Coherencia.ParHarista* Coherencia(); O(|A|) := κ(H · K).

3. Completitud. Verificador de Completitud.ParHarista* Completitud(); O(|A|) := 2|A|.

4. Dualidad. Verificador de Dualidad.ParHarista* Dualidad(); O(|A|) := 2Log|A|.

5. GetE. Retorna atributo privado de objeto que llama al metodo.pair<Hgrafo*,Hgrafo*> GetE(); O(|A|) := k.

6. GetH. Retorna primer o segundo hipergrafo de estructura que llama almetodo, segun parametro es true o false.Hgrafo* GetH(bool b); O(|A|) := k.

7. Mu. Retorna estructura minimal de estructura que llama al metodo.Estruct* Mu(); O(|A|) := κ(H2 +K2).

8. Nu. Retorna estructura respondida por hipergrafos de estructura quellama al metodo.Estruct* Nu(); O(|A|) := 2|A|.

9. Semi completitud. Verificador de Semi-completitud.ParHarista* Semi_completitud(); O(|A|) := κ(H2 +K2).

10. Sigma. Retorna estructura crıtica sujeta a hipergrafos de estructuraque llama al metodo.Estruct* Sigma(); O(|A|) := 2|A|.

11. swap. Cambia atributo privado de objeto que llama al metodo.Estruct* swap(pair<Hgrafo*,Hgrafo*> est); O(|A|) := k.

12. Tau. Retorna estructura transversal a hipergrafos de estructura quellama al metodo.Estruct* Tau(); O(|A|) := 2|A|.

13. << Despliegue de estructura en pantalla.ostream& <<(ostream& output, Estruct& G); O(|A|) := κ(H+K).

Page 92: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Apendice A. Manual de usuario 79

14. + Retorna el join de dos estructuras ingresadas como parametro.Estruct& +(Estruct& G1, Estruct& G2); O(|A|) := κ((H +K)2).

15. * Retorna el meet de dos estructuras ingresadas como parametro.Estruct& *(Estruct& G1, Estruct& G2); O(|A|) := κ((H +K)2).

Clase Hgrafo

1. GetH. Retorna atributo privado de objeto que llama al metodo.list<Harista*> GetH(); O(|A|) := k.

2. is in. Retorna true o false segun hiperarista ingresada como parametropertenece o no a hipergrafo que llama al metodo.bool is_in(Harista* Z); O(|A|) := κ(H).

3. is in nu. Retorna true o false segun hiperarista ingresada comoparametro es respondida o no por hipergrafo que llama al metodo.bool is_in_nu(Harista* Z); O(|A|) := κ(H).

4. is in sigma (1). Retorna true o false segun hiperarista ingresadacomo parametro es crıtica o no con respecto a hipergrafo que llama almetodo.bool is_in_sigma(Harista* Z); O(|A|) := κ(H).

5. is in sigma (2). Retorna −1 si hiperarista Z ingresada como parametroes crıtica con respecto a hipergrafo H que llama al metodo; en casocontrario, retorna a ∈ Z tal que (Z\a) ∈ σ(H).int is_in_sigma(Harista* Z, bool b); O(|A|) := κ(H).

6. is in tau. Retorna true o false segun hiperarista ingresada comoparametro es transversal o no de hipergrafo que llama al metodo.bool is_in_tau(Harista* Z); O(|A|) := κ(H).

7. Mu. Retorna hipergrafo minimal de hipergrafo que llama al metodo.Estruct* Mu(); O(|A|) := κ(H2).

8. Nu. Retorna hipergrafo respondido por hiperaristas de hipergrafo quellama al metodo.Estruct* Nu(); O(|A|) := 2|A|.

9. Sigma. Retorna hipergrafo crıtico sujeto a hiperaristas de hipergrafo quellama al metodo.Estruct* Sigma(); O(|A|) := 2|A|.

10. swap. Cambia atributo privado de objeto que llama al metodo.Hgrafo* swap(list<Harista*> hg); O(|A|) := k.

Page 93: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Apendice A. Manual de usuario 80

11. Tau. Retorna hipergrafo transversal a hiperaristas de hipergrafo quellama al metodo.Estruct* Tau(); O(|A|) := 2|A|.

12. << Despliegue de hipergrafo en pantalla.ostream& <<(ostream& output, Hgrafo& H); O(|A|) := κ(H).

13. + Retorna el join de dos hipergrafos ingresados como parametro.Hgrafo& +(Hgrafo& H, Hgrafo& K); O(|A|) := κ((H +K)2).

14. * Retorna el meet de dos hipergrafos ingresados como parametro.Hgrafo& *(Hgrafo& H, Hgrafo& K); O(|A|) := κ((H · K)2).

Clase ParHarista

1. GetHa. Retorna primera o segunda hiperarista de par de hiperaristasque llama al metodo, segun parametro es true o false.Harista* GetHa(bool b); O(|A|) := k.

2. << Despliegue de par de hiperaristas en pantalla.ostream& <<(ostream& output, ParHarista& W_Z); O(|A|) := |A|.

Clase Harista

1. Atomos. Retorna lista de hiperaristas correspondiente a los atomos dehiperarista que llama al metodo.list<Harista*> Atomos(); O(|A|) := |A|.

2. Card. Retorna cardinalidad de hiperarista que llama al metodo.int Card(); O(|A|) := |A|.

3. GetHa. Retorna atributo privado de objeto que llama al metodo.list<Harista*> GetHa(); O(|A|) := k.

4. Intersecta. Retorna true o false segun hiperarista que llama al metodose intersecta o no con hiperarista ingresada como parametro.bool Intersecta(Harista* Z); O(|A|) := |A|.

5. Neg. Incluye o elimina elemento ingresado como parametro de hiper-arista que llama al metodo.Harista* Neg(int a); O(|A|) := k.

6. swap (1). Cambia atributo privado de objeto que llama al metodo.Harista* swap(vector<bool> ha); O(|A|) := k.

Page 94: Laboratorio de HipergrafosDe nici on. Una clase de complejidad es un conjunto de problemas com-putacionales cuyos tiempos de ejecuci on est an acotados superiormente por una misma

Apendice A. Manual de usuario 81

7. swap (2). Cambia atributo privado de objeto que llama al metodo, porotro seteado aleatoriamente. Puede setearse hasta posicion a del vector,y lo restante con 0’s.Harista* swap(int a); O(|A|) := |A|.

8. << Despliegue de hiperarista en pantalla.ostream& <<(ostream& output, Harista& Z); O(|A|) := |A|.

9. <= Relacion “menor o igual” entre dos hiperaristas, en funcion del ordenusual de conjunto base.bool <=(Harista& W, Harista& Z) O(|A|) := |A|.

10. == Relacion “igualdad” entre dos hiperaristas.bool ==(Harista& W, Harista& Z) O(|A|) := |A|.

11. ! = Relacion “desigualdad” entre dos hiperaristas.bool !=(Harista& W, Harista& Z) O(|A|) := |A|.

12. ++ Incrementa en 1 la codificacion numerica de vector binario queconforma atributo privado de hiperarista que llama al metodo.Harista& ++(Harista& Z) O(|A|) := |A|.

13. ∼ Retorna complemento de hiperarista que llama al metodo.Harista& ~(Harista\& Z) O(|A|) := |A|.

14. + Retorna union de dos hiperaristas que llaman al metodo.Harista& +(Harista& W, Harista& Z) O(|A|) := |A|.