近似算法---首次适宜法

该算法实现非常简单,思路大概是这样子的:

定义若干个空箱子,假设箱子的体积有多大,然后把一些货物存在这些箱子里,当第一个箱子存满后,接着存放第二个箱子,直到货物存完为止,我们来看看这个程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int FirstFit(int n , int C, int *s , int *b)
{
	int i , j = 0 , k ;
	k = 0;
	memset(b,0,sizeof(b)/sizeof(b[0]));
	for (i = 0; i< n; i ++ ) // 装入第 i 个物品
	{
		while ((C - b[j])< s[i]) // 查找第 1 个能容纳物品 i的箱子
			j ++ ;
		b[j] = b[j] + s[i] ;
		if(j > k)k = j ;
		else k = k ;
	}
	return k;
}

int main(void)
{
	int i,j;
	int b[10] = {0};
	int s[10] = {10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 , 100} ;
	FirstFit(10,100,s,b);
	for(i = 0 ; i < 10 ; i++)
	{
		printf("%d\n",b[i]);
	}
	return 0 ;
}

运行结果:

100
50
60
70
80
90
100
0
0
0

时间: 2024-08-30 11:45:41

近似算法---首次适宜法的相关文章

内存分配算法 之 首次适应-最佳适应

程序在向操作系统申请内存空间的时候,操作系统会扫描空闲块链表并从中取出一块足够大的分配,与之对应的算法有 首次适应 和 最佳适应,顾名思义,首次适应就是把首次遇到的足够大的空闲块分配给应用程序,最佳适应就是扫描完空闲块链表把大小与申请空间最匹配的空闲块分配给应用程序. mem.h        程序用到的头文件 main.c       主函数 fit.c        具体的实现函数 这里使用make来编译使用,若是读者还没接触过make的, 请移步参考我写的这篇文章:http://netca

操作系统基础知识

操作系统的分类: 批处理操作系统.分时操作系统.实时操作系统.网络操作系统.分布式操作系统.个人计算机操作系统. 批处理操作系统: 优:资源共享,自动调度,提高了资源利用率和系统分吞吐量. 劣:无交互,周转时间较长. 多道批处理程序要处理的问题:同步互斥,内存大小,使用效率,内存保护 分时系统:联机多用户交互式操作系统,中断技术,时间片轮转 优:人机交互性好,共享主机 ,用户独立性 实时操作系统:联机系统,对外部请求能够在规定的时间内完成. 特点:有限等待 有限响应 用户控制 可靠性高 出错处理

操作系统学习

本文原创,转载请注明来至:http://blog.csdn.net/j903829182/article/details/38060553 1.计算机发展的4个时代:电子管时代,晶体管时代,集成电路时代和大规模集成电路时代 2.操作系统发展过程:(1)单道批处理,(2)多道批处理,分时和实时系统时代,(3)多方式系统时代(4)并行与分布式系统时代. 3.操作系统:是一种系统软件,是软硬件资源的控制中心,它以尽量合理有效的方法组织单个或多个用户以多任务方      式共享计算机的各种资源,并提供编

软考笔记之存储管理

软考随堂笔记 考点1 实存管理 考点2 虚存管理 程序的装入(重定位)(将逻辑地址转换成物理地址) 静态重定位:静态重定位是在虚空间程序执行之前由装配程序完成地址影射工作. 动态重定位:动态重定位是在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换为内存地址. 实存管理 存储管理的任务是存储空间的分配与回收.在现代操作系统中通常有单一连续分配(静态).固定分区分配(静态).可变分区分配(动态)三种分配方式: 单一连续分配(静态):不分区,所有用户空间给某个进程或作业.同一时间只

《现代操作系统》笔记——存储管理1

转载请注明: TheViper http://www.cnblogs.com/TheViper 一种存储器抽象:地址空间 把物理地址暴露给进程会带来下面几个严重问题: 1.如果用户程序可以寻址内存的每个字节,它们就可以很容易的破坏操作系统. 2.使用这种模型,想要同时(如果只有一个cpu就轮流执行)运行多个程序是很困难的. 地址空间 地址空间是一个进程可用于寻址内存的一套地址集合.每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(除了在一些特殊情况下进程需要共享它们的地址

操作系统---内存管理

一.内存管理概念 1. 存储管理的功能 (1) 内存空间的分配与回收 , 包括内存的分配和共享. (2) 地址转换 : 内存管理配合硬件进行地址转换 , 把逻辑地址转换成物理地址. (3) 内存空间的扩充 : 借助于虚拟存储器或交换覆盖技术来达到扩充内存容量的目的. (4) 内存保护和共享 : 为了避免相互干扰和破坏 , 必须提供保护功能. (5) 虚地址 2. 地址重定位 [程序的装入]   在多道程序设计系统中,可用的内存空间通常被多个进程共享.通常情况下,程序员并不能事先知道在某个程序执行

操作系统的存储管理概述

现代操作系统采用"分层储存器体系" 计算机拥有若干兆快速.昂贵且易失性的高速缓存,价格与速度适中的同易失性的内存以及不易失访问速度慢的大容量的磁盘存储 操作系统中分层存储器体系的部分称为存储管理器.任务是记录哪些内存正在使用,哪些可分配,在进程需要时分配内存,进程使用完毕释放内存. 1.地址空间 早期的操作系统是直接将物理地址直接暴露给进程,但是缺陷很多.为了要保证多个应用程序同时处于内存中而彼此独立,提出地址空间,可以解决保护和重定位定位两大问题. 地址空间是一个进程用来寻址内存的一

软考之路--你存在我深深的脑海里

小时候,总是期待着过年,过年可以吃到好多好吃的,暴露了小编的本质,哈哈,最让我期待的,就是压岁钱了,七大姑八大姨这个给一个红包,那个给一个红包,爸爸又会以同样的方式给她们的孩子,我们孩子从中得到的是纯利润,然后,恨不得连睡觉都紧紧握住自己的存钱筒,想着,要去买什么好吃的呢,在小编的理解中,把压岁钱存在一起,堆积起来的过程,就是存储,在我们的计算机中,官方定义如下存储就是根据不同的应用环境通过采取合理.安全.有效的方式将数据保存到某些介质上并能保证有效的访问,总的来讲可以包含两个方面的含义:一方面

垂死挣扎-2

请求分段系统是在分段系统的基础上,增加了请求调段功能和分段置换功能所形成的分段式虚拟存储系统.分段式存储管理方式分配算法与可变分区的分配算法相似,可以采用最佳适应法.最坏适应法和首次适应法等分配算法.显然仍然要解决外碎片的问题. 首次 适应分配算法: 这种算法按分区序号从空闲分区表的第一个表目开始查找该表, 把最先找到的大于或等于作业大小的空闲分区分给要求的作业 .然后,再按照作业的大小,从该分区中划出一块内存空间分配给作业,余下的空闲分区仍留在空闲分区表中.如果查找到分区表的最后仍没有找到大于