题意可抽象为:共有 T 次迭代(编号 0∼T−1)。当跳过第 t+1 步(0≤t<T−1)时,相当于复用第 t 步的计算结果,会产生损失值 loss[t]。因此一共有 T−1 个“可跳过的位置”(对应步骤 1∼T−1),每个位置选中则付出相应损失。
要求:恰好跳过 k 步,且不能连续跳过两步(即所选位置不能相邻),使总损失最小;若无解输出 −1。
这是典型的“带相邻限制的选取最小代价”问题,使用动态规划(DP):
Stable/Diffusion为代表的图像和视频生成模型采用了一种逐步优化的方法:模型会多次迭代运行同一个核心算法,将初始的随机噪声逐步优化成清晰的图像或视频。随着对生成质量和视频时长要求的提高,核心算法的迭代步骤数持续增大,导致该方法的计算量急剧增加(计算量与步骤数成正比),造成应用部署困难。
为了降低计算负载,可以采用 “缓存复用” 策略:研究发现,相邻步骤的特征往往相似,当第 t 步和第t+1步的特征高度相似时,我们可以直接复用第t 步的计算结果,跳过第t+1 步的计算。对于总共 T步的优化过程,如果跳过 k步,计算量就能降低为原来的(T−k)/T。
然而,跳过步骤会带来图像和视频生成质量的损失。用一个长度为 T−1 的损失值列表来记录跳过每一个步骤所带来的损失:列表中的第t 个元素(0≤t<T)表示在第t+1 步时复用第t步的计算结果(即跳过第t+1步计算)所导致的损失值。为了保证生成质量,不能连续跳过2 个及以上步骤(即不能连续复用)。请设计一个函数,在给定总迭代步骤数T、需要跳过的步骤数k,以及损失值列表的情况下,寻找最优的跳过策略,输出最小的总损失值。
output: 如果没有找到合适的解,输出 −1;否则输出最小的总损失值。
输入
6
2
2 1 2 4 5
输出
4
说明
跳过第 1 个步骤和第3个步骤,总损失值为 2+2=4。由于不能连续跳过2 个步骤,因此不能跳过步骤1和步骤2,或跳过步骤2 和步骤 3。
输入
6
4
2 1 2 4 5
输出
-1
说明
总迭代步骤数为5 时,无法跳过 4 个不连续的步骤,因此返回−1。