加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 动态编程重现到解决方案

发布时间:2020-12-20 13:42:22 所属栏目:Python 来源:网络整理
导读:我正在尝试解决加权区间调度问题.基本上,我想出了以下重复以获得最佳解决方案的长度: optimum[i] = max(duration(intervals[i]) + opt[prior[i]],opt[i - 1]) 其中prior [i] =在当前间隔开始之前完成的最新非重叠计划. 复发效果很好,我得到了正确的解决方案
我正在尝试解决加权区间调度问题.基本上,我想出了以下重复以获得最佳解决方案的长度:

optimum[i] = max(duration(intervals[i]) + opt[prior[i]],opt[i - 1])

其中prior [i] =在当前间隔开始之前完成的最新非重叠计划.

复发效果很好,我得到了正确的解决方案.但是,我想得到实际的时间表,而不仅仅是长度.我怎样才能做到这一点?我尝试从最大的p [i]值开始并跟随指针,直到我达到无/ -1 / Null,但这并不总是有效.我假设我需要跟踪要保留的间隔以及丢弃哪些间隔,因为我解决了上面的重现问题.我尝试做类似的事情:

if (duration(intervals[i]) + optimum[prior[i]] >= optimum[i - 1]) {
  optimum[i] = duration(intervals[i]) + optimum[p[i]];
  retain[i] = true;
}
else {
  optimum[i] = optimum[i - 1];
  retain[i] = false;
  retain[i - 1] = true;
}

但这并没有奏效.

解决方法

您可以使用previous [i]以及optimal [i]来构造路径.具体而言,您从最佳解决方案开始.然后可以如下获得路径.

queue<int> path;
int st = i;
while (st > 0) {
  if (op[st] == op[st-1]) st = st -1;
  else {
    path.push(st);
    st = prior[st];
  }
}
pop each item from queue<int> path,you get the intervals you selected.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读