博客
关于我
Gym 102770 B-Bin Packing Problem 2020浙江省省赛 (线段树 + set)
阅读量:608 次
发布时间:2019-03-13

本文共 1705 字,大约阅读时间需要 5 分钟。

装箱问题算法对比

算法分析

装箱问题是操作系统中的经典问题,比较了首次适应算法和最佳适应算法的性能差异。本文将分析两种算法在处理相同请求序列时的行为特点,并分别模拟其申请的箱子数量。

首次适应算法

在首次适应算法中,系统优先将当前请求大小分配给一个空闲的最小箱体,或者找出能够容纳该请求的最小箱体。如果找不到合适的箱体,系统申请一个容量等于请求大小的新箱体。为了高效实现这一过程,系统需要快速查找最前面的第一个大于等于当前请求的箱体。这里我们使用线段树来维护箱体容量,线段树的区间最大值查询能够快速找到最前面的满足条件的箱体。

最佳适应算法

最佳适应算法则将当前请求分配给一个能够容纳该请求的最大的箱体,而不是最小的。如果没有符合条件的箱体,系统申请一个容量等于请求大小的新箱体。为了实现这一过程,系统需要高效地检测是否存在一个适合的箱体。使用平衡多重集合(multiset)能够快速完成这一任务。

模拟实现

首次适应算法模拟

#include 
#include
#include
using namespace std;int main(){ int n = 100; vector
a(n); // 假设a数组已读入,包含请求序列 vector
tree(4*n, c); // 例子简化,实际应使用线段树的结构 // 线段树初始化 void build(int node, int l, int r) { if(l == r) tree[node] = c; else { int mid = (l + r) / 2; build(2*node, l, mid); build(2*node+1, mid+1, r); tree[node] = max(tree[2*node], tree[2*node+1]); } } void query(int node, int l, int r, int val) { if(l == r) return -1; // 表示区间不存在满足条件的箱体 int leftTranslator = tree[2*node]; if(leftTranslator >= val) p = query(2*node, l, mid, val); else p = query(2*node+1, mid+1, r, val); return p; } int cnt = 0; for(int i=0; i

最佳适应算法模拟

#include 
#include
#include
using namespace std;int main(){ int n = 100; vector
a(n); // 假设a数组已读入,包含请求序列 multiset
st; for(int i=0; i

结果输出

每次运行程序会输出两种算法下申请的总箱子数。

性能对比

通过测试可以看到,最佳适应算法通常能减少箱子使用量,但增加了每次查找操作的复杂度。最优适应算法通过容错机制得到更优的结果,但至少需要一个额外的箱体来容纳最差情况。

优化方案

如需进一步优化,可以考虑使用优先队列来提升查找效率。

转载地址:http://szpaz.baihongyu.com/

你可能感兴趣的文章
Idea代码统计工具
查看>>
官网Tensorflow 移动开发流程
查看>>
python 安装scikit-learn遇到的问题解决方案
查看>>
HTTP 错误 500.21 - Internal Server Error 发布网站遇到这个错误
查看>>
微信小程序:出现脚本错误或者未正确调用 Page()错误解决
查看>>
海外引流怎么做?巨象指纹浏览器助你,人人都是产品经理
查看>>
Android获得缩略图的代码注释
查看>>
2017-05-11 DBA日记,导致log file sync单次等待超500ms又一可能
查看>>
MySQL查询---排序后取第一条数据
查看>>
初次安装webpack之后,提示安装webpack-cli
查看>>
Java后端服务明显变慢诊断思路
查看>>
idea选中文件时左侧菜单自动定位到文件所在位置
查看>>
java中带参数的try(){}语法——关闭资源
查看>>
JSuite 最新版下载试用2021版本
查看>>
使用FileZilla,FTP登录出现错误:FileZilla状态: 不安全的服务器,不支持 FTP over TLS
查看>>
Python模块学习--uuid
查看>>
kafka+storm+hbase整合试验(Wordcount)
查看>>
VMware克隆虚拟机后重启network失败
查看>>
Hbase压力测试
查看>>
Python GIL全局解释器锁
查看>>