Page 296 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 296

16  /*--- 집합 s의 모든 원소를   출력 ---*/
                     17  void Print (BitSet s)
                     18  {
                     19    int i;
                     20    printf("{ ");
                     21    for(i = 0; i < BitSetBits; i++)
                     22      if(IsMember(s, i))
                     23        printf("%d ", i);
                     24    printf("}");
                     25  }
                     26
                     27  /*--- 집합 s의 모든 원소를   출력(줄 바꿈 문자 포함) ---*/
                     28  void PrintLn (BitSet s)
                     29  {
                     30    Print(s);
                     31    putchar( '\n');
                     32  }



                   원소를 삭제하는 Remove 함수

                   Remove 함수는 집합 s에서 n을 삭제하는 함수입니다. 그림 7-16은 삭제하는 과정을 나타
                   낸 예입니다. 집합 s의 비트 벡터와 SetOf(n)으로 얻은 비트 벡터의 보수로 논리곱 연산을 하
                   면 n이 삭제됩니다.


                    a  집합 {1, 3, 5, 6}에서 5를 삭제합니다.       b  집합 {1, 3, 5, 6}에서 4를 삭제합니다.

                               31 30      9  8  7  6   5   4  3   2  1   0   31 30      9  8  7  6   5   4  3   2  1   0
                       s       0 0      0 0 0 1 1 0 1 0 1 0   s      0 0      0 0 0 1 1 0 1 0 1 0

                      ~SetOf(n)   1 1      1 1 1 1 0 1 1 1 1 1  ~SetOf(n)   1 1      1 1 1 1 1 0 1 1 1 1
                    &                                    &

                               0 0      0 0 0 1 0 0 1 0 1 0          0 0      0 0 0 1 1 0 1 0 1 0
                              이 비트의 값만 0으로 바뀝니다.                    이 비트의 값은 바뀌지 않습니다.
                                 집합에서 n이 삭제되었습니다.                   n 값이 없기 때문에 집합의 변화가 없습니다.
                                        [그림 7-16] Remove 함수로 원소를 삭제하는 과정



                   집합의 원소 개수를 반환하는 Size 함수
                   Size 함수는 원소의 개수를 반환하는 함수입니다. 집합의 원소 개수는 비트 벡터 안의 ‘1’인
                   비트가 몇 개인지 알아내면 됩니다. 다음은 집합의 원소 개수를 세는 과정입니다.




                   296   C 알고리즘
   291   292   293   294   295   296   297   298   299   300   301