For instance, A, B, C, D are all subscribers.
A has a black list, for instance, which includes
subscribers B, C, D. We call this blacklist is
user width blacklist. It means that user B, C, D
all have no rights to send message to A.
Vice versa, User A also can’t send to B, C, D.
In another words, there is no communication
path available between A and B, C, D.
In following a series of figures, crossing points
of A (line/column) and B, C, D (column/line) will
be marked with X (A). The reason why there is
(A) beside X is in order to correctly set X to O
or not when removing B, C, D from User A’s
blacklist.
Legend:
v S : System width blacklist flag
It means that this subscriber is
Prohibited by system whatever
sender or receiver.
v D : disable flag
It means that this subscriber is
prohibited, probably temporarily.
Scenario:1. Firstly, constructs a matrix including all
users. The status of all elements in matrix is Ok.
A
B
C
D
E
A
O
O
O
O
O
B
O
O
O
O
O
C
O
O
O
O
O
D
O
O
O
O
O
E
O
O
O
O
O
2. Next, fills system width blacklist into matrix
v D
A
B
C
D(s)
E
A
O
O
O
X
O
B
O
O
O
X
O
C
O
O
O
X
O
D(s)
X
X
X
X
X
E
O
O
O
X
O
3. Next, fills disable users into matrix.
v B
A
B(d)
C
D(s)
E
A
O
X
O
X
O
B(d)
X
X
X
X
X
C
O
X
O
X
O
D(s)
X
X
X
X
X
E
O
X
O
X
O
4. Next, fill in User lever Blacklist Rules
(focus on line and column):
v A: B, C
v B: A, D
v C: -----
v D: A, E
v E: B, D
A
B(d)
C
D(s)
E
A
O
X(A,B)
X(A)
X(D)
O
B(d)
X(A,B)
X
X
X(B)
X(E)
C
X(A)
X
O
X
OD(s)
X(D)
X(B)
X
X
X(D,E)
E
O
X(E)
O
X(D,E)
O
All Blacklists ‘ importing job is done.
Passable Ways all are marked with O.
A lot of matrix algorithms can be taken to implement
interfaces:
1. Enable/Disable user
2. Insert/Remove user from system width blacklist
3. Add/Remove user B from user A’s blacklist
4. Finding available paths .For example:
E as a sender sends message to B, C, D receivers.
From above figure, it is so easy to draw a conclusion
who E can send MESSAGE to. But detailed operations
can take following steps:
v Firstly, select E’s blacklist.
First parameter is a vector, which is used to record
station of E element.
| 1 0 0 0 1 |
| 0 0 0 0 0 |
{0, 0, 0, 0, 1} | 0 0 1 0 1 | = {1, 0, 1, 0, 1}
| 0 0 0 0 0 | (just last line)
| 1 0 1 0 1 |
v Receivers vector: {0, 1, 1, 1, 0}, blacklist {1, 0, 1, 0, 1},
We can regard them as an integer respectively to
operate bits.
01110 & 10101 = 00100
It is obvious that E can only send to C.
We can only focus on O or X elements.
Then constructs 稀疏矩阵. 采用十字链表实现。
本文地址:http://com.8s8s.com/it/it33102.htm