Folgende Implementierung findet Teilmengen eines Satzes, aber könnte jemand bitte erklären, was if((i&(1<<j)) > 0)
tut und aus welchem Grund?Java: Wie implementiert man Teilmengen einer Teilmenge?
Der Kommentar scheint nicht zu helfen und versuchte Konsolenprotokollierung, aber es ist immer noch schwierig zu sehen, was es genau macht.
//Print all subsets of given set[]
static void printSubsets(char set[]) {
int n = set.length;
//Run a loop for printing all 2^n subsets one by one
for(int i=0; i<(1<<n); i++) {
System.out.print("{ ");
//Print current subset
for(int j=0; j<n; j++) {
//(1<<j) is a number with jth bit 1
//so when we 'and' them with the
//subset number we get which numbers
//are present in the subset and which are not
if((i&(1<<j)) > 0) {
System.out.print(set[j] + " ");
}
}
System.out.println("}");
}
}
public static void main(String args[]) {
char set[] = {'a', 'b', 'c'};
printSubsets(set);
}
Was meinen Sie mit "Teilmenge einer Teilmenge"? Dies druckt alle Teilmengen der gegebenen Menge (zumindest für kleine Mengen, an einem Punkt laufen die Bits in einem "int" aus). – Thilo
@Thilo Sorry, das war ein Tippfehler, gemeint ist Teilmenge von Set. –