Spanish Developers Community

Page 8

­ Diferencia simétrica:

Se hace el test de signo: A' mod 2 = 0. x no pertenece a A.

­ Inserción y borrado: C = (A­B) Unión (B­A) Se realiza mediante la operación de OR exclusivo (XOR) o Para insertar un elemento x es necesario poner a 1 el bit aplicando las primitivas definidas anteriormente. Ejemplo: correspondiente. Una manera sencilla de hacerlo es mediante una suma. Hay que sumar un valor que se corresponda con el bit que 11110000 -> A = {4,5,6,7} se quiere establecer a 1. Para hacerlo se volverá a aplicar una Xor 00011110 -> B = {1,2,3,4} operación de desplazamiento, pero esta vez hacia la izquierda y --------aplicada sobre el número 1. Se desplazan x bits hacia la 11101110 -> C = {1,2,3,5,6,7} izquierda, suponiendo que el compilador llena con ceros por la derecha. ­ Igualdad de conjuntos: La implementación es directa, si todos los bits de A y B se Por ejemplo, partir de A = conjunto vacío: { }. Se quieren insertar los elementos 0,2,3 sobre A. corresponden entonces son iguales. Insertar 0: x = 0. p = 1, (00000001 en binario). Se desplaza p x (0) bits a la ­ Subconjuntos: izquierda, p' = 1, y se suma a A. Queda: A <­ A + p'. A = 1. Si un conjunto A es subconjunto (considerando que un conjunto cualquiera es subconjunto de si mismo) de otro B entonces Insertar 2: verifica esta relación: A intersección B = A. Notar que A es x = 2. p = 1. Se desplaza p x (2) bits a la izquierda, p' = 4 (000000100 en binario). A <­ A (1) + p' (4), A = 5 (000000101). subconjunto de A, pues A intersección A = A. Ejemplo: A = {1,2,3,4}, B = {0,1,2,3} C = A intersección B = {1,2,3}; C es distinto de A. ­ Pertenencia:

Insertar 3: x =3. p = 1. Se desplaza p x (3) bits a la izquierda, p' = 8. A <­ A (5) + p' (8), A = 13 (00001101). El borrado es exactamente lo mismo, pero hay que restar p en vez de sumar. Ejemplo: borrar 3 de A. A <­ A (13) ­ p' (8), A = 5 (00000101)

Determinar si un elemento pertenece a un conjunto requiere efectuar una operación de desplazamiento a nivel de bits y una Representación mediante array posterior comprobación del bit de signo resultante. Como Los elementos del conjunto se guardan uno a continuación de siempre, un ejemplo o dos lo aclaran: otro empleando una lista densa representada mediante un array. Sea x = 0 y A = {0,1,2,5}. Determinar si x pertecene a A. 00100111 ­> A. Primero se desplazan los bits de A tantas veces a la derecha como valga x, en el ejemplo no se desplazan; se obtiene A'. A continuación se aplica el test del bit de signo sobre A', que consiste en obtener el resto de la división entera entre dos. Si el resto es uno, entonces x pertenece a A. En caso contrario no pertenece a A. En el ejemplo: A' mod 2 = 1, luego x pertenece a A. Otro ejemplo: x = 3, A = {0,1,2,5}. Se desplazan los bits de A tres posiciones a la derecha: 00000100 ­> A'.

8

Ejemplo: Sea el conjunto C = {1, 2}. Se representará de esta manera: y su cardinal es 2. Esta representación no limita el rango de representación más que al tipo de datos empleado. Por supuesto, ya no puede definirse explícitamente el conjunto universal. Por razones de eficiencia a la hora de implementar las primitivas, las estructuras se pasan por referencia. Es un detalle importante, porque C garantiza que un array se pasa siempre por referencia, pero eso no es cierto si el array se pasa como parte de una estructura.

© 2013 - www.spanishdeveloperscommunity.es


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.