掌握动态规划的基本思想和解决问题的基本步骤,认识动态规划和分治法的联系与区别,对比解决同一问题的两种算法设计策略的时间复杂性。
用c++语言实现用动态规划算法解决独立任务最优调度问题,分析时间复杂性,体会动态规划算法解决问题的基本思路和步骤。
独立任务最优调度问题具有最优子结构性质。先计算m=max{max{ai},max{bi}},设布尔量p(i,j,k)
表示前k个作业可以在处理机A用时不超过i时间且在处理机B用时不超过j时间内完成。递归方程如下:
p(i,j,k)=p( i-ak,j,k-1 )|p( i,j-bk,k-1 )
则最短时间为min{max{i,j}}
。
见附件一
实验步骤、特点
重要源代码(流操作的部分要醒目的提示并注释)
见附件二
一开始没有想到用三维数组来解决,没有思路,经过查阅资料才明白了这个问题的动态规划算法。三维数组的创建与释放对我来说也是一个问题。最后都是查找了很多资料才解决的。
遇到的问题,及解决方案
这次试验掌握了独立任务最优调度问题的动态规划的基本思想和解决问题的基本步骤,充分认识了动态规划和分治法的联系与区别,还分析了此算法的时间复杂度为O(m2n2),再次提高了自己的能力。
// Created by DZX on 2020/12/3.
//独立任务最优调度问题
#include "bits/stdc++.h"
using namespace std;
int n, m, mn, MiniTime;
int *a;
int *b;
int ***p;
void Make3DArray(int ***&x, int rows, int cols, int k) {
//创建3维数组
x = new int **[rows];
for (int i = 0; i < rows; i++) {
x[i] = new int *[cols];
for (int j = 0; j < cols; j++)
x[i][j] = new int[k];
}
}
void Free3DArray(int ***&x, int rows, int cols, int k) {
//释放3维数组
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
free(x[i][j]);
}
free(x[i]);
}
free(x);
}
void init() {
//初始化,输入数据创建数组
cin >> n;
m = 0;
a = new int[n];
b = new int[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] > m)
m = a[i];
}
for (int i = 0; i < n; i++) {
cin >> b[i];
if (b[i] > m)
m = b[i];
}
mn = m * n;
Make3DArray(p, mn + 1, mn + 1, n + 1);
}
void dtgh() {
//执行动态规划算法
int i, j, k;
//初始化三维数组
for (i = 0; i <= mn; i++) {
for (j = 0; j <= mn; j++) {
p[i][j][0] = true;
for (k = 1; k <= n; k++)
p[i][j][k] = false;
}
}
for (k = 1; k <= n; k++) {
//执行动态规划递归
for (i = 0; i <= mn; i++) {
for (j = 0; j <= mn; j++) {
if (i - a[k - 1] >= 0)
p[i][j][k] = p[i - a[k - 1]][j][k - 1];
if (j - b[k - 1] >= 0)
p[i][j][k] = (p[i][j][k] || p[i][j - b[k - 1]][k - 1]);
}
}
}
for (i = 0, MiniTime = mn; i <= mn; i++) {
//计算最优值
for (j = 0; j <= mn; j++) {
if (p[i][j][n]) {
int tmp = (i > j) ? i : j;
if (tmp < MiniTime)
MiniTime = tmp;
}
}
}
cout << "完成全部作业所需最短时间:"<<MiniTime << endl;
}
void free() {
//释放申请的空间
Free3DArray(p, mn + 1, mn + 1, n + 1);
free(a);
free(b);
}
int main() {
//主程序
init();
dtgh();
free();
return 0;
}
/*
6 15
2 5 7 10 5 2
3 8 4 11 3 4
*/
前言从18年毕业至今,就职过两家公司,大大小小项目做了几个,非常感谢我的两位老大,在我的android成长路上给予我很多指导,亦师亦友的关系。从年前至今参加面试了很多公司,也收到了几家巨头的offer,还有其他公司的。总结下经验,也是对过去的一个回顾和总结吧。Scudo是一种用户模式分配器,旨在提供额外的mitigation 来防止堆的漏洞的方法,同时保持良好的性能。它是开源的,是LLVM的editor-rt项目的一部分。Scudo当前是Fuchsia中的默认分配器,已在Android的某些组件中启_anon:scudo:primary
import tensorflow as tf(x, y), (x_test, y_test) = tf.keras.datasets.mnist.load_data()# tensorflow中的Keras.datasets中提供了常用的经典数据集比如手写数字数据集mnist,加载后默认保存到C:\Users\Administrator\.keras# 通过load_data会返回相应格式的数据,返回两个元组tuple,即(x, y), (x_test, y_test),数据都用numpy.ar._x_test, y_test = next(load_data(
2021年中国信息安全专业大学排名2021-06-13 11:45:47文/李铭同学们很想了解一下中国信息安全专业最新学校排名情况,小编整理了相关排名信息,赶快来了解一下吧!信息安全学科可分为狭义安全与广义安全两个层次,狭义的安全是建立在以密码论为基础的计算机安全领域,早期中国信息安全专业通常以此为基准,辅以计算机技术、通信网络技术与编程等方面的内容;广义的信息安全是一门综合性学科,从传统的计算机...
__align(4) u8 mem1base[MEM1_MAX_SIZE];为何要字节对齐?从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。MDK 字节对齐关键字 __packedtypedef __packed struct a...__wrs_pack_align
/*网页中的表单使用POST方法提交时,数据内容的类型是 application/x-www-form-urlencoded,这种类型会:1.字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不会被编码;2.将空格转换为加号 (+) ;3.将非文本内容转换成"%xy"的形式,xy是两位16进制的数值;4.在每个 name=value 对之间放置 & 符..._java default_url_enco
这里的事件响应主要是针对Button的事件响应来说的,主要有三种方式:第一种是直接写handler: function() {},这种方式默认会去响应其click事件,第二种是通过listeners属性来实现其事件的说明,如:listeners: { "click": function() {}}第三种方式是通过on关键字来实现,如:var btn = ne
html代码:固定宽度自适应区域1.浮动+margin第一种: 左侧栏固定宽度向左浮动,右侧主要内容则用margin-left留出左侧栏的宽度,默认宽度为auto,自动填满剩下的宽度。.left{ float: left;}.right{ margin-left: 200px;}2.绝对定位第二种:左边绝对定位(脱离文档流,不占位置),右侧margin-left流出左侧栏宽度.left{ posi...
PIMPIM(Protocol Independent Multicast)协议无关组播利用单播路由表和RPF检查PIM使用IP封装协议号103路由表项有两种路由表项(*,G)用于在PIM网络中建立SPT,用于PIM-DM和PIM-SM(S,G)用于在PIM网络中建立RPT,用于PIM-SM当收到源地址为S,目的地址为G的组播报文,且RPF检查通过的时候,按以下规则转发:1、如果存在(S,G)路由表项,就按照(S,G)表进行转发2、如果不存在(S,G)路由表项,只存在(*,G)路由表项,_pimsm中asser获胜一方
1. ODBC数据库接口ODBC即开放式数据库互连(Open Database Connectivity),是微软公司推出的一种实现应用程序和关系数据库之间通讯的接口标准。符合标准的数据库就可以通过SQL语言编写的命令对数据库进行操作,但只针对关系数据库。目前所有的关系数据库都符合该标准(如SQL Server,Oracle,Access,Excel等)。ODBC本质上是一组数据库访问API(应用程序编程接口),由一组函数调用组成,核心是SQL语句,其结构如图1.8所示:图 1.8 ODBC数._数据对接方式有哪些
哪位有方法把dd/mm/yyyy的字符串格式化成yyyy-mm-dd【总监】Dawood(656317124)10:00:42啊,找到方法了.procedureTForm1.Button1Click(Sender:TObject);varD:TDateTime;s:string;beginD:=VarToDateTime('05-10-1404:3..._格式化成yyyy/mm/dd
这是一个最简单的mule esb入门实例,其中用了 flow ,endpoint ,transformer,component 这些组件,这些组件的配置也是最简单配置.情景:1.在浏览器地址栏输入http://localhost:9090/hello-mule?name=oliver&age=20,会返回"Hello oliver,your age is 10".1.在浏览器地址栏输入
#第一种import comtypes.clientdef convertDocxToPDF(infile,outfile): wdFormatPDF = 17 word = comtypes.client.CreateObject('Word.Application') doc = word.Documents.Open(infile) doc.SaveAs(outfil...