zoukankan      html  css  js  c++  java
  • 最佳调度问题_分支限界法

    最佳调度问题
    【问题描述】
           假设有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为ti。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。
    【编程任务】
           对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1~n。编程计算完成这n个任务的最佳调度。
    【输入样例】
    7  3
    2  14  4  16  6  5  3
    【输出样例】
      17

    即此问题为七个任务,三台机器。

    首先列个七乘三的二维数组了解算法思路:

    我们知道回溯法其实是穷举法加剪枝函数,我们的函数用到递归,层层返回。一共七层,每层的除去叶子节点都有三个孩子

    每搜索到叶子节点就更新一次maxnum值(小于maxnum则更新)(初值为一个较大的数),是用一次搜索结束后三个机器中花费时间最长的机器的所用时间作为此次分配的所用时间,。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,k;
     4 int x[100];//机器
     5 int x1[100];//作业
     6 int maxnum=1000000;
     7 
     8 void task(int level)
     9 {
    10     if(level>n){
    11      int temp=0;
    12      for(int i=1;i<=k;i++){
    13         if(x[i]>temp){
    14             temp=x[i];
    15         }
    16      }
    17      if(temp<maxnum){
    18         maxnum=temp;
    19      }
    20     }
    21     else{
    22         for(int i=1;i<=k;i++){
    23             x[i]+=x1[level];
    24             task(level+1);
    25             x[i]-=x1[level];
    26         }
    27     }
    28 }
    29 int main()
    30 {
    31     cin >> n;
    32     cin >> k;
    33     for(int i=1;i<=n;i++){
    34         cin >>x1[i];
    35     }
    36     task(1);
    37     cout << maxnum;
    38     return 0;
    39 }

  • 相关阅读:
    os模块中关于文件/目录常用的函数使用方法
    字符串的方法及注释
    XAMPP禁止目录浏览的方法
    linux下lampp(xampp)安装memcached扩展
    linux下xampp集成包安装配置方法
    java判断一个字符串是否为数字型
    锁表原因及解决思路
    搞清楚MySQL事务隔离级别
    Java接口的幂等性设计
    java幂等性的解决方案
  • 原文地址:https://www.cnblogs.com/henuliulei/p/10195178.html
Copyright © 2011-2022 走看看