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

核心代码编程-多模态版本的最优调度-200分

在大语言模型推理服务中,有多个不同大小的模型版本可供选择。每个模型版本有不同的准确率和推理延迟。给定查询次数N和总时间预算T,为每个查询选择一个模型版本,使得在不超过时间预算的前提下,总准确率最大。

输入
﹣查询次数N
﹣总时间预算T
﹣模型准确率 accuracy[i]
﹣模型延迟 latency[i]
输出
最大总准确率
同一个模型可以被多次选择
0<查询数量N<=10
0<总时间预算T<100
0<准确率 accuracy[i]<100,表示多个百分点
0<延迟 latency[i]<20
0<模型版本数量<=10
可以考虑采用递归方法完成

必须查满N次

补充说明:

示例1
输入:2,4,[80,90, 95],[1,2,3]
输出: 180
说明:最优选择为选取两个准确率为90的模型,总耗时为4,总准确率为180。

示例2
输入: 2,2,[80, 90, 95],[2,2,3]
输出:0
说明:无法有效选到要求的2个模型,因此总准确率为0

以下是针对您提出的问题,使用不同编程语言实现的解决方案。问题描述为:给定查询次数 (N)、总时间预算 (T)、模型准确率数组accuracy和模型延迟数组latency,需要为每个查询选择一个模型版本(可重复选择),在不超过时间预算 (T) 的前提下,最大化总准确率。如果无法满足条件,则返回 0。

C 语言实现

#include <stdlib.h> #include <limits.h> int maxAccuracy(int N, int T, int* accuracy, int* latency, int M) { int** dp = (int**)malloc((N + 1) * sizeof(int*)); for (int i = 0; i <= N; i++) { dp[i] = (int*)malloc((T + 1) * sizeof(int)); for (int j = 0; j <= T; j++) { dp[i][j] = -1; } } for (int t = 0; t <= T; t++) { dp[0][t] = 0; } for (int k = 1; k <= N; k++) { for (int t = 0; t <= T; t++) { int bestVal = -1; for (int m = 0; m < M; m++) { int l = latency[m]; int a = accuracy[m]; if (t >= l) { int prevT = t - l; if (dp[k - 1][prevT] != -1) { int candidate = dp[k - 1][prevT] + a; if (candidate > bestVal) { bestVal = candidate; } } } } dp[k][t] = bestVal; } } int maxAcc = -1; for (int t = 0; t <= T; t++) { if (dp[N][t] > maxAcc) { maxAcc = dp[N][t]; } } for (int i = 0; i <= N; i++) { free(dp[i]); } free(dp); return (maxAcc == -1) ? 0 : maxAcc; }

C++ 语言实现

#include <vector> #include <algorithm> #include <climits> int maxAccuracy(int N, int T, std::vector<int>& accuracy, std::vector<int>& latency) { int M = accuracy.size(); std::vector<std::vector<int>> dp(N + 1, std::vector<int>(T + 1, -1)); for (int t = 0; t <= T; t++) { dp[0][t] = 0; } for (int k = 1; k <= N; k++) { for (int t = 0; t <= T; t++) { int bestVal = -1; for (int m = 0; m < M; m++) { int l = latency[m]; int a = accuracy[m]; if (t >= l) { int prevT = t - l; if (dp[k - 1][prevT] != -1) { int candidate = dp[k - 1][prevT] + a; if (candidate > bestVal) { bestVal = candidate; } } } } dp[k][t] = bestVal; } } int maxAcc = -1; for (int t = 0; t <= T; t++) { if (dp[N][t] > maxAcc) { maxAcc = dp[N][t]; } } return (maxAcc == -1) ? 0 : maxAcc; }

JavaScript 语言实现

function maxAccuracy(N, T, accuracy, latency) { const M = accuracy.length; const dp = Array.from({ length: N + 1 }, () => Array(T + 1).fill(-1)); for (let t = 0; t <= T; t++) { dp[0][t] = 0; } for (let k = 1; k <= N; k++) { for (let t = 0; t <= T; t++) { let bestVal = -1; for (let m = 0; m < M; m++) { const l = latency[m]; const a = accuracy[m]; if (t >= l) { const prevT = t - l; if (dp[k - 1][prevT] !== -1) { const candidate = dp[k - 1][prevT] + a; if (candidate > bestVal) { bestVal = candidate; } } } } dp[k][t] = bestVal; } } let maxAcc = -1; for (let t = 0; t <= T; t++) { if (dp[N][t] > maxAcc) { maxAcc = dp[N][t]; } } return maxAcc === -1 ? 0 : maxAcc; }

Java 语言实现

public class ModelSelector { public static int maxAccuracy(int N, int T, int[] accuracy, int[] latency) { int M = accuracy.length; int[][] dp = new int[N + 1][T + 1]; for (int k = 0; k <= N; k++) { for (int t = 0; t <= T; t++) { dp[k][t] = -1; } } for (int t = 0; t <= T; t++) { dp[0][t] = 0; } for (int k = 1; k <= N; k++) { for (int t = 0; t <= T; t++) { int bestVal = -1; for (int m = 0; m < M; m++) { int l = latency[m]; int a = accuracy[m]; if (t >= l) { int prevT = t - l; if (dp[k - 1][prevT] != -1) { int candidate = dp[k - 1][prevT] + a; if (candidate > bestVal) { bestVal = candidate; } } } } dp[k][t] = bestVal; } } int maxAcc = -1; for (int t = 0; t <= T; t++) { if (dp[N][t] > maxAcc) { maxAcc = dp[N][t]; } } return (maxAcc == -1) ? 0 : maxAcc; } }

Go 语言实现

package main func maxAccuracy(N int, T int, accuracy []int, latency []int) int { M := len(accuracy) dp := make([][]int, N+1) for i := range dp { dp[i] = make([]int, T+1) for j := range dp[i] { dp[i][j] = -1 } } for t := 0; t <= T; t++ { dp[0][t] = 0 } for k := 1; k <= N; k++ { for t := 0; t <= T; t++ { bestVal := -1 for m := 0; m < M; m++ { l := latency[m] a := accuracy[m] if t >= l { prevT := t - l if dp[k-1][prevT] != -1 { candidate := dp[k-1][prevT] + a if candidate > bestVal { bestVal = candidate } } } } dp[k][t] = bestVal } } maxAcc := -1 for t := 0; t <= T; t++ { if dp[N][t] > maxAcc { maxAcc = dp[N][t] } } if maxAcc == -1 { return 0 } return maxAcc }

Python 语言实现

def max_accuracy(N, T, accuracy, latency): M = len(accuracy) dp = [[-1] * (T + 1) for _ in range(N + 1)] for t in range(T + 1): dp[0][t] = 0 for k in range(1, N + 1): for t in range(T + 1): best_val = -1 for m in range(M): l = latency[m] a = accuracy[m] if t >= l: prev_t = t - l if dp[k - 1][prev_t] != -1: candidate = dp[k - 1][prev_t] + a if candidate > best_val: best_val = candidate dp[k][t] = best_val max_acc = -1 for t in range(T + 1): if dp[N][t] > max_acc: max_acc = dp[N][t] return 0 if max_acc == -1 else max_acc

算法说明

以上代码均使用动态规划解决该问题:

  • 创建一个二维数组dp[k][t],表示选择k个查询且总时间不超过t时的最大总准确率。
  • 初始化dp[0][t] = 0(0 个查询时准确率为 0)。
  • 对于每个查询数量k(从 1 到 (N)),每个时间t(从 0 到 (T)),遍历所有模型版本:
    • 如果当前时间t大于等于模型延迟latency[m],且前一个状态dp[k-1][t - latency[m]]有效(不为 -1),则计算候选值dp[k-1][t - latency[m]] + accuracy[m]
    • 更新dp[k][t]为所有候选值中的最大值。
  • 最终,在dp[N][t]((t \leq T)) 中寻找最大值,如果所有值均为 -1(不可能),则返回 0。

该算法时间复杂度为 (O(N \times T \times M)),空间复杂度为 (O(N \times T)),符合问题约束((N \leq 100), (T < 1000), (M \leq 10))。

http://www.jsqmd.com/news/867879/

相关文章:

  • 什么是线程安全?请举例说明如何实现线程安全,并比较 synchronized 和 ReentrantLock 的异同
  • 2026毕设求生指南:用产品思维交付你的“第一份作品”
  • AI时代中小企业还要不要上ERP?2026年最新思考
  • AI Agent 架构设计与实现原理深度解析
  • 2026年GPT-5.5技术架构拆解:动态路由机制如何降低推理成本
  • 传奇3怀旧版 手游官方网站下载:三职业互相克制,长久运营稳定体验
  • 使用curl命令直接测试Taotoken大模型API的连通性与返回格式
  • 量子退火与经典优化算法性能对比研究
  • Spring Boot 的嵌入式服务器(如 Tomcat)是如何启动的?如何替换为 Jetty 或 Undertow?
  • 不用折腾环境!MonkeyCode云端编码太适配日常
  • 嵌入式系统代码覆盖率测试实战与µVision应用
  • 今天农巡车项目的摄像头云台问题及解决
  • 多卡GPU机器学习性能优化与实战技巧
  • 远程主机不满足运行 VS Code 服务器的先决条件
  • 揭秘大模型通用8192维度奥秘:千亿大模型为何统一采用8192隐层维度的真相.183
  • 每次面试都被问,说说你对Spring IoC 和 DI的理解
  • GEO获客工具如何选择?
  • 在nodejs后端服务中集成taotoken多模型api的配置与调用示例
  • TEMU怎么注册开店?从0到上架的完整流程,新手看这一篇就够了 - 麦克杰
  • 电脑端OpenClaw v2026.5.9一键安装部署指南,小白0基础搭建方法
  • 如何用N_m3u8DL-CLI-SimpleG三步下载M3U8视频:免费图形化工具完整指南
  • 第一周学习笔记
  • 通信电源系统架构解析与运维实战:从核心原理到故障排查
  • GPT-5.5 编程辅助技巧:高效生成可复用代码
  • 宁波添元水泥制品有限公司荣膺2026年连锁片钢模综合服务商首 - 2026年企业推荐榜
  • 智能供应链革命——AI重塑泳装产业全链路
  • 花大钱买了GPU,Token却跑飞了?AI Infra的新战场在Token管理
  • 程序员如何平衡工作与生活?我的“时间块”管理法
  • 2026年至今,昆明珠宝评估服务市场如何选择专业服务伙伴? - 2026年企业推荐榜
  • 【大白话说Java面试题 第68题】【JVM篇】第28题:对于 JDK 自带的监控和性能分析工具用过哪些?一般你怎么用的?