2016-11-18 4 views
2

Я использую класс BitSet в Java для обработки множества бит. При сравнении двух бит-наборов мне нужно сделать четкое различие между понятием подмножество и понятие пересечение.Java BitSet, подмножество и пересечение

Давайте посмотрим пример с оператором AND, чтобы получить подмножество:

BitSet bits1 = new BitSet(); 
    BitSet bits2 = new BitSet(); 
    bits1.set(0,2,true); //110 
    bits2.set(1);  //010 
    //010 is a SUBSET of 110 
    bits1.and(bits2); //bits1 became the result of the and operator 
    if(bits1.equals(bits2)) 
    { 
     System.out.println(bits2 + " is a subset of " + bits1); 
    } 
    //PRINT 

    BitSet bits4 = new BitSet(); 
    bits4.set(0,2,true); //110 
    BitSet bits3 = new BitSet(); 
    bits3.set(1,3,true); //011 
    bits4.and(bits3); 
    //011 is NOT a subset of 110 
    if(bits4.equals(bits3)) 
    { 
     System.out.println(bits4 + " is a subset of " + bits3); 
    } 
    //NO PRINT 

Подмножество довольно ясно, так как я использую оператор И проверить это BitSet является подмножеством другого.

Тот же пример с встроенным оператором пересечения:

BitSet bits1 = new BitSet(); 
    BitSet bits2 = new BitSet(); 
    bits1.set(0,2,true); //110 
    bits2.set(1);  //010 
    //010 intersect 110, but is also a subset of 110 
    System.out.println("Intersection? " + bits2.intersects(bits1)); 

    BitSet bits3 = new BitSet(); 
    bits3.set(1,3,true); //011 
    //011 VS 110 intersection only 
    System.out.println("Intersection? " + bits3.intersects(bits1)); 

Вот мой вопрос: оператор пересечения обнаружить как подмножество и пересечение. Моя цель - обнаружить только пересечения, исключая те, которые также являются подмножеством, как бит1 vs bits2 во втором примере. Поэтому этот оператор не подходит для моего случая, потому что он слишком общий. Есть ли способ обнаружить это свойство?

ответ

2

Возьмите мощность бит1 бит2 и bits1.and (bits2). Если и-мощность отлична от нуля, множества пересекаются. Если он также равен мощности битов 1, то бит1 является подмножеством бит2 и наоборот.

Таким образом, используя мощность, вы можете проверить отношения подмножества, как вы хотите (но это не выглядит намного быстрее, чем проверки, которые вы уже упоминали в своем ответе и можете комбинировать).

Смежные вопросы