创建授予特权用户所需的最低组

发布于 2025-02-02 12:51:29 字数 1036 浏览 4 评论 0原文

问题

有多个用户需要特权来执行特定任务。 不得授予用户比所需的更多特权。两个或多个组可以包含一些共同特权。

例如,

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故事还在继续 2025-02-09 12:51:30

假设

  • 可以将用户分配给多个组
  • 特权可以分配给多个组
  • 用户,则不能分配给具有不需要特权的组的组

- Assign all privileges to one group
- Sort users into order of increasing number of privileges needed
- Loop over users 
  - Loop over groups
     - IF group contains user's unmet privileges
         - IF group contains no extra privileges
             - Assign user to group
  - ENDGROUPLOOP
  - If user's needs are NOT all met
     - Add new group with unmet privileges
     - Assign user to new group
  - ENDIF
- ENDUSERLOOP

请注意,这将使您拥有一个包含所有特权的组。如果没有分配给它的用户,则可以将其分配给假设的管理用户或丢弃。

Assuming

  • Users can be assigned to multiple groups
  • Privileges can be assigned to multiple groups
  • User can NOT be assigned to groups with unneeded privileges

Then

- Assign all privileges to one group
- Sort users into order of increasing number of privileges needed
- Loop over users 
  - Loop over groups
     - IF group contains user's unmet privileges
         - IF group contains no extra privileges
             - Assign user to group
  - ENDGROUPLOOP
  - If user's needs are NOT all met
     - Add new group with unmet privileges
     - Assign user to new group
  - ENDIF
- ENDUSERLOOP

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.

落叶缤纷 2025-02-09 12:51:30

关于Ravenspoint的算法。说,

user1 -> p1 p2 p3
user2 -> p1    p3
user3 ->    p2

从我看到的算法中,我们拥有贪婪的算法首先形成了该组(P1,P2,P3)。这意味着三组变得有必要:

group1(p1, p2, p3) -> user1
group2(p1, p3) -> user2
group3(p2) -> user3

它仅用两组就错过了该解决方案:

group1(p1, p3) -> user1, user2
group2(p2) -> user1, user3

我怀疑OP的问题是设定盖问题的变化,可能是NP库件。如果是这样,大数据集将需要近似算法,但可能并不总是达到最佳解决方案。

Regarding ravenspoint's algorithm. Say we have,

user1 -> p1 p2 p3
user2 -> p1    p3
user3 ->    p2

From what I can see, the algorithm greedily first forms the group (p1, p2, p3). It means three groups become necessary:

group1(p1, p2, p3) -> user1
group2(p1, p3) -> user2
group3(p2) -> user3

It misses out on this solution with just two groups:

group1(p1, p3) -> user1, user2
group2(p2) -> user1, user3

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文