当前位置: 首页 > news >正文

微服务集成测试 -华为OD机试真题(A卷、Python)

在这里插入图片描述

题目描述

现在有n个容器服务,服务的启动可能有一定的依赖性(有些服务启动没有依赖),其次,服务自身启动加载会消耗一些时间。

给你一个n × n 的二维矩阵useTime,其中useTime[i][i]=10表示服务i自身启动加载需要消耗10s,useTime[i][j]=1表示服务i启动依赖服务j启动完成,useTime[i][k]=0表示服务i启动不依赖服务k。其中0 <= i, j, k < n。服务之间没有循环依赖(不会出现环),若想对任意一个服务i进行集成测试(服务i自身也需要加载),求最少需要等待多少时间。

输入描述

第一行输入服务总量n,之后的n行表示服务启动的依赖关系以及自身启动加载耗时,最后输入k表示计算需要等待多少时间后,可以对服务k进行集成测试,其中1 <= k <= n, 1 <= n <= 100

输出描述

最少需要等待多少时间(单位:秒)后,可以对服务k进行集成测试。

示例1

输入:
3
5 0 0
1 5 0
0 1 5
3


输出:
15

说明:
服务3启动依赖服务2,服务2启动依赖服务1,由于服务1、2、3自身加载都需要消耗5s,所以5+5+5=15s,需要等待15s后可以对服务3进行集成测试。

示例2

输入:
3
5 0 0
1 10 1
1 0 11
2

输出:
26

说明:
服务2启动依赖服务1和服务3,服务3启动需要依赖服务1,服务1、2、3自身加载需要消耗5s、10s、11s,所以5+10+11=26s,需要等待26s后可以对服务2进行集成测试。

Python

from functools import cache

n = int(input())  # 读取服务数量
useTime = [list(map(int, input().split())) for _ in range(n)]  # 读取依赖关系矩阵


@cache
def dfs(i):
    global useTime
    # 记录服务i的所有依赖服务的最大等待时间
    max_time = 0
    # 遍历所有可能的服务k
    for k in range(len(useTime)):
        if useTime[i][k] == 1 and i != k:  # 服务i依赖服务k
            max_time = max(max_time, dfs(k))  # 获取服务k的最早启动时间

    # 当前服务i的最早启动时间为它的所有依赖服务的最大时间 + 它自身的启动加载时间
    return max_time + useTime[i][i]


k = int(input())  # 读取需要集成测试的服务k

# 输出服务k的最早集成测试时间
print(dfs(k - 1))  # 转换useTime为不可变类型,适应@cache

题目分析

本题是一个图相关的问题,要求我们在给定服务启动依赖关系的情况下,求出某个服务在进行集成测试前,最少需要等待的时间。可以把这个问题看作是图的遍历问题,并且通过**深度优先搜索(DFS)**来解决。

解题思路

  1. 图的表示:每个服务可以看作一个节点,服务间的依赖关系可以看作有向边。服务启动时,如果依赖于其他服务,那么必须等待那些服务先启动完成。因此,这是一个典型的拓扑排序问题,求出某个服务的启动时间需要考虑它的所有依赖服务的启动时间。
  2. DFS(深度优先搜索):通过DFS遍历服务,计算每个服务启动的最早时间。为了避免重复计算,我们可以使用记忆化搜索来存储已计算过的服务的最早启动时间。
  3. 依赖关系处理:对于每个服务,我们需要遍历它所有依赖的服务,递归计算出依赖服务的启动时间,并将它们的最大时间加上该服务的启动加载时间,得到当前服务的最早集成测试时间。
  4. 最小等待时间:最后,通过DFS计算出服务k最早可以进行集成测试的时间。

代码大致描述

  1. 输入服务数量 n 和依赖矩阵 useTime
  2. 利用DFS遍历服务,通过递归的方式,计算服务k需要等待的最少时间。
  3. 对于每个服务,递归计算它的所有依赖服务的等待时间,并加上该服务自身的启动时间。
  4. 最终输出计算出的时间。

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

相关文章:

  • 数据结构C语言练习(单双链表)
  • 深度学习 机器学习和强化学习算法的关系
  • flink 分组窗口聚合 与 窗口表值函数聚合 的区别
  • 【算法手记6】NC1 大数加法 NC40 链表相加(二) NC10 大数乘法
  • 营销库存系统设计方案
  • 《Linux运维总结:基于银河麒麟V10+ARM64架构CPU源码编译部署单实例redis7.2.6》
  • 基础认证-单选题(一)
  • Golang 的 GMP 调度机制常见问题及解答
  • 刘裕的简介
  • ResNet(残差网络)中的残差是什么?
  • 今日行情明日机会——20250328
  • zynq7000 + ucos3 + lwip202_v1_2调试过程
  • 从混乱思绪到清晰表达:记录想法如何改变你的学习人生
  • Problem A: 计算奇数和
  • 央视少儿APP V2.6.2
  • (Kotlin)Android 自定义蓝牙扫描动画:多波浪扩散效果
  • acwing 每日一题4888. 领导者
  • 19款超级华丽动画的图片轮播HTML5+CSS3模板源码
  • Linux驱动开发--SPI子系统
  • Electron应用生命周期全解析:从启动到退出的精准掌控
  • 15年全免费,内蒙古准格尔旗实现幼儿园到高中0学费
  • 多少Moreless:向世界展示现代中式家具的生活美学
  • 董军在第六届联合国维和部长级会议上作大会发言
  • 泽连斯基抵达安卡拉,称乌将派出最高级别代表团参与谈判
  • 第一集|好饭不怕晚,折腰若如初见
  • 回望星河深处,唤醒文物记忆——读《发现武王墩》