001
09.11.2006, 22:42 Uhr
virtual
Sexiest Bit alive (Operator)
|
Also erstmal begrenzen wir mal Dein Problem auf Mengen mit sagen wir mal 8 Elementen (Keine Angst, man kann das leicht "unbegrenzt" erweitern)
Sei also A eine Bitmaske, bei der für jedes Enthaltene Element das korrespondierende Bit gesetzt ist und B ebenso eine entsprechende Bitmaske, Wenn ich A und B Verordere bekomme ich eine weitere Bitmaske, C:
C = A oder B
Semantisch drückt C jedoch die Vereinigungsmenge von A und B aus. Damit lässt sich in Hinblick auf Teilmengen nur schwer eine Aussage treffen. Beispiel:
A = 00011111 B = 11111000 => C = 11111111
Anders sieht es mit der UND Verknüpfung aus:
C = A und B
Semantisch drück C nunmehr die Schnittmenge von A un B aus:
A = 00011111 B = 11111000 => C = 00011000
In Hinblick auf Teilmengen kann man nun folgende Aussage treffen:
(C = A und B) und C=B <=> B ist Teilmenge von A
Oder, ein wenig kürzer ausgedrückt: Um Eine Aussage bzgl. Teilmengen zu treffen brauchst Du eine Bitweise UND verknüpfung, weniger die ODER Verknüpfung.
Ein int hat in der Regel keine 2000 Bit, das ist korrekt. Du hast im Prinzip nun die Möglichkeit, einfach mehrere ints zu einer Menge zusammen zu fassen
Du kannst in C++ zB std::set<int> verwenden und aus dem Header <algorithm> Agorithmen nehmen, um Dein Problem zu fassen.
Du kannst in C++ auch std::vector<bool> nehmen, musst dann aber die UND Operation noch selbst ausprogrammieren
Du kannst auch eigenhändig eine entsprechende Klasse schreiben, was ggf. eine echte alternative ist. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |