技术交流 | 工业界 | N叉树有约束排序,功能与性能讨论

问题背景

在某通信网络中,存在三种网络站点角色,一种是通信主站(简称M),一种是通信中继站(简称P),一种是通信子站(简称S)。该通信网络的网络拓扑是树形网络结构,其中通信主站M是根节点,通信子站S是叶子节点,通信中继站P则是除根节点/叶子节点之外的站点。

每一个通信节点可以包含两种资源res_a和res_b。其中,res_a资源占用的时间长度固定为R1,而res_b根据资源类型不同,资源占用的时间可能为R1或R2(其中R1≤R2)。同一个节点上res_a和res_b不能同时占用,且res_a用完之后,res_b才能使用。对于每个节点资源属性展示如下:

typedef struct node_resource {
    uint32_t res_a;   // 固定=R1
    uint32_t res_b;   // R1/R2 (R1≤R2)
} node_res;

通信主站M能够掌握全局拓扑信息,包括每个节点所使用的资源信息。

功能要求

根据以下规则约束,主站节点M根据拓扑情况对整个网络的节点排序,并输出排序结果。

规则1:在一个时间段内,不同节点的res_a和res_b可以共存。即不同节点的res_b可以共用res_a的时间段。

规则2:排序顺序不能子树的节点在前,父节点在后。

规则3:不违反其他规则,排序按照层级顺序,先输出根节点,再输出中间节点,最后输出叶子节点。

性能要求

  1. 支持≥3000个节点的网络拓扑管理;
  2. 空间内存使用量≤20KByte;
  3. 运行时间≤20ms(200MHz主频)。

示例

网络拓扑示例:

                 1 
              /  |  \
            2    3    4
          /      |     \
        5        6      7
        .
        8
        |
        9

各个节点资源占用示例:

R1 = 1;
R2 = 2;
node_res node_1 = {R1, R1}; // res_a, res_b
node_res node_2 = {R1, R1}; // res_a, res_b
node_res node_3 = {R1, R1}; // res_a, res_b
node_res node_4 = {R1, R1}; // res_a, res_b
node_res node_5 = {R1, R2}; // res_a, res_b
node_res node_6 = {R1, R1}; // res_a, res_b
node_res node_7 = {R1, R1}; // res_a, res_b
node_res node_8 = {R1, R1}; // res_a, res_b
node_res node_9 = {R1, R1}; // res_a, res_b
注:资源上,node_5资源的特殊性,包括不一样的res_b为R2。

输出结果:

1,2,5,3,4,8,6,7,9

#工业界讨论##编程技术##性能提升##悬赏#
全部评论

相关推荐

05-30 13:04
已编辑
门头沟学院 算法工程师
智谱和米哈游都是ai大模型agent的业务钱的话还是米更多,几乎翻倍了,有没有老哥是两个公司其中一个的,能问问转正率咋样嘛,我问的hr回答都是做的好就可以转正暑期实习
码农索隆:选米哈游:短期高薪、敢承担风险、具备强创新能力,且愿押注游戏AI赛道。 选智谱:稳定性与行业通用能力积累,接受薪资差距以换取更稳妥的职业基础。
投递北京智谱华章科技等公司6个岗位 > 实习期间如何提升留用概率?
点赞 评论 收藏
分享
05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务