m0_46399362 2022-07-07 09:52 采纳率: 77.1%
浏览 40
已结题

回溯算法时间复杂度问题

void BackTrack(int t)
{
    //都装载了 
    if(t>n){
        //printf("%d\n",cw);
        if(cw > bestw)//当前车辆载重量>当前最优载重量
            {
            for(int i = 1; i <= n; i++)//遍历当前解
                {
                /*if(x[i])//若有装入 
                    bestx[i] = i;//放入当前最优解
                else*/
                    bestx[i]=x[i];//放入当前最优解
            }
            bestw = cw;//当前最优载重量=当前车辆载重量
            return;
        }
    }
        else
        {
        r -= w[t]; //更新剩余书重量
        if(cw + w[t] <= c1){ //没有超出载重量,判断是否可以向装载 当前车辆载重+当前书重量<=c1 
            x[t] = 1;
            cw += w[t];
            //printf("左:%d %d\n",t,bestw);
            BackTrack(t+1);
            cw -= w[t]; //cw要还原原先的载重,因为还要判断其他路线才能找到最优解
        }
        if(cw + r > bestw){ //判断是否可以向右(当前车辆载重量+剩余书重量>当前最优载重量)
            //printf("右:%d %d\n",t,bestw);
            x[t] = 0;
            BackTrack(t+1);
        }
        r += w[t]; //还原剩余书重量走其他路线(剩余书重量+=w[t])
    }
}
  • 写回答

1条回答 默认 最新

  • 於黾 2022-07-07 09:56
    关注

    首先,这是个递归
    递归里有两个分支,如果t>n,执行一个循环,循环次数为n
    else,执行递归,t+1
    那么其实就相当于双重for循环,内外层循环次数都是n
    时间复杂度n^2

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月17日
  • 已采纳回答 7月9日
  • 创建了问题 7月7日

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行