verstehe code nicht
-
hallo,
ich hab folgenden code der index-mengen realisieren soll...allerdings macht für mich die add-funktion überhaupt keinen sinn weil man immer nur elemente einfügen darf die kleiner sind als die länge der menge....das ist doch blödsinn. will ihc also "1" und "1000" einfügen, muss ich die indexmenge auf die Länge 1000 setzen....versteh ich das richtig und warum ist die idee so?
#define B_SIZE (sizeof(unsigned int)*8) fset* new_fset(int n){ fset *set; int i,a_size; a_size = (n-1)/B_SIZE + 1; set = (fset*)malloc(sizeof(fset)); set->n = n; set->a_size = a_size; set->data = (unsigned int*)calloc(a_size,sizeof(unsigned int)); return set; } void fset_addelement(fset *set,int e){ if( (e >= 0) && (e < set->n) ){ set->data[e/B_SIZE] |= (1 << (e % B_SIZE)); } }
-
Der Code sieht danach aus, als würde er eine Bitmenge verwalten. In der addelement Funktion gibt
e
also das Bit an, welches gesetzt werden soll.
-
hmm interessant...
nur wie soll ich mir das vorstellen? wenn bit auf position 3 gesetzt ist heißt dass dann das die zahl 3 in der menge enthalten ist?
-
Wie du das 3. gesetzte Bit interpretierst hängt von dir ab. Siehe aber auch Binärsystemdarstellung
-
gambo schrieb:
ich hab folgenden code der index-mengen realisieren soll...allerdings macht für mich die add-funktion überhaupt keinen sinn weil man immer nur elemente einfügen darf die kleiner sind als die länge der menge
So ist das halt. Die Darstellung einer Menge als Bitvektor bringt einem nur was, wenn man mit der Einschränkung leben kann, dass der Bitvektor für jedes Element des Universums (also der Elemente, die in der Menge vorkommen können) ein Bit hat. Ansonsten muss man eine andere Datenstruktur wählen.