创建授予特权用户所需的最低组
问题
有多个用户需要特权来执行特定任务。 不得授予用户比所需的更多特权。两个或多个组可以包含一些共同特权。
例如,
user1 -> p1 p2 p3
user2 -> p1 p3
user3 -> p2
我们需要创建具有特权的最少组,以便我们可以将用户分配给该组。
例如,
group1 (p1 p3) -> user1, user2
group2 (p2) -> user1, user3
某些测试用例
案例1:
输入:
user1 -> p1
user2 -> p2
user3 -> p3
user3 -> p4
输出:
group1(p1) -> user1
group2(p2) -> user2
group3(p3) -> user3
group4(p4) -> user4
案例2:
输入:
user1 -> p2 p3 p4
user2 -> p2 p3 p4
user3 -> p1 p2 p3
user4 -> p2 p3
输出:
解决方案1解决
group1(p1) -> user3
group2(p2,p3) -> user1,user2,user3,user4
group3(p4) -> user1, user2
方案2:
group1(p1) -> user3
group2(p2,p3,p4) -> user1,user2
group3(p2,p3) -> user3, user4
Problem
There are multiple users who require privileges to perform a certain task.
A user must not be granted more privileges than needed. Two or more groups can contain some common privileges.
e.g.
user1 -> p1 p2 p3
user2 -> p1 p3
user3 -> p2
We need to create a minimum number of groups with privileges so that we can assign users to that group.
e.g.
group1 (p1 p3) -> user1, user2
group2 (p2) -> user1, user3
Some test cases
case 1:
Input:
user1 -> p1
user2 -> p2
user3 -> p3
user3 -> p4
Output:
group1(p1) -> user1
group2(p2) -> user2
group3(p3) -> user3
group4(p4) -> user4
case 2 :
Input:
user1 -> p2 p3 p4
user2 -> p2 p3 p4
user3 -> p1 p2 p3
user4 -> p2 p3
Output:
solution1
group1(p1) -> user3
group2(p2,p3) -> user1,user2,user3,user4
group3(p4) -> user1, user2
solution2:
group1(p1) -> user3
group2(p2,p3,p4) -> user1,user2
group3(p2,p3) -> user3, user4
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
假设
,
请注意,这将使您拥有一个包含所有特权的组。如果没有分配给它的用户,则可以将其分配给假设的管理用户或丢弃。
Assuming
Then
Note that this will leave you with one group that contains every privilege. If this has no user assigned to it, then you can assign this to an assumed ADMIN user, or discard it.
关于Ravenspoint的算法。说,
从我看到的算法中,我们拥有贪婪的算法首先形成了该组(P1,P2,P3)。这意味着三组变得有必要:
它仅用两组就错过了该解决方案:
我怀疑OP的问题是设定盖问题的变化,可能是NP库件。如果是这样,大数据集将需要近似算法,但可能并不总是达到最佳解决方案。
Regarding ravenspoint's algorithm. Say we have,
From what I can see, the algorithm greedily first forms the group (p1, p2, p3). It means three groups become necessary:
It misses out on this solution with just two groups:
I suspect the OP's problem is a variation of the Set Cover Problem and possibly NP-complete. If so, an approximate algorithm becomes necessary for big data sets but may not always reach an optimal solution.