............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Conjunto de Partes de un conjunto

Ver el tema anterior Ver el tema siguiente Ir abajo

Conjunto de Partes de un conjunto

Mensaje por GalileoGali el Jue Abr 09, 2009 9:25 pm

Viene de Exceluciones:
El número de subconjuntos de un conjunto, donde n es el número de elementos (cardinal del conjunto).
Objetivo: listar los subconjuntos

Mi comentario posterior (Gali):
El conjunto de partes de un conjunto en isomorfo a la "representación binaria" de todos los numeros comprendidos entre 0 y n donde n es el cardinal del conjunto
es decir:
0 representa el conjunto vacio es decir no a, no b, no c
1, representa si a, no b, no c
10 representa no a, si b, no c
11, representa si a, si b, no c
100, reprsenta, no a, no b, si c
101, representa, si a, no b, si c
110, representa, no a, sib, si c
111, representa, si a, si b, si c
Total 8, 2^3


Basta con conseguir uno de tantos algoritmos para devolver la "representacion binaria" de todos los numeros comprendidos entre 0 y n (cardinal del conjunto)
Luego las posicones relativas de cada 0 y 1 dan el isomorfismo al conjunto de lo que sea.


La solucion a Cargo de P@li (que sin pedirle permiso me atrevoa trear a nuestro foro)
Bueno, en base a las consideraciones de Gali, y que creo totalmente cierto que esto debe resolverse con representaciones binarias, aprovechando que tuve un rato libre en mis tareas, quiero proponer una solución más práctica que teórica.
Consta de una función que pasa números decimales a binarios, y otra que pasa un número binario a cadena de texto (lo que hace es devolver las posiciones de la cadena en que corresponde a un 1 dentro del número binario).
Mediante un bucle que recorre la longitud de las posibilidades del conjunto, se analizan todas las posibilidades.

Sin el comentario de Gali, no me habría interesado en hacer el código.


Código:
Function dec2bin(ByVal num As Long, Optional digitos As Long = 0) As String
    Dim i As Long
    Dim e As Long
    If digitos = 0 Then
        Do While Not (2 ^ digitos) > num
            digitos = digitos + 1
        Loop
    End If
   
    For e = 0 To digitos - 1
        dec2bin = IIf((num And (2 ^ e)) = 0, "0", "1") & dec2bin
    Next
End Function

Function bin2string(cadena As String, bin As String) As String
    Dim i As Long
    For i = 1 To Len(cadena)
        If Mid(bin, i, 1) = "1" Then bin2string = bin2string & Mid(cadena, i, 1)
    Next
End Function

Sub prueba()
    Dim cadena As String
    Dim longitud As Long
    Dim i As Long
   
    cadena = "abcdefg"
    longitud = 2 ^ Len(cadena)
   
    For i = 0 To longitud - 1
        Debug.Print bin2string(cadena, dec2bin(i, Len(cadena)))
    Next
End Sub


Excelente trabajo de P@li

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.