内存动态分配的首先适应、最优适应、最坏适应算法的实现(java 版)
2007-05-07 00:21
886 查看
public class DynamicAssign {
public static void main(String[] args) {
Area[] area = new Area[5];
area[0] = new Area(0, 20);
area[1] = new Area(1, 30);
area[2] = new Area(2, 40);
area[3] = new Area(3, 50);
area[4] = new Area(4, 150);
Memory[] memory = new Memory[4];
memory[0] = new Memory(0, 100);
memory[1] = new Memory(1, 30);
memory[2] = new Memory(2, 50);
memory[3] = new Memory(3, 40);
FirstAdapt(memory, area);
BestAdapt(memory, area);
BadAdapt(memory,area);
}
//首先适应算法
public static void FirstAdapt(Memory[] memory, Area[] area) {
int k;
for (int i = 0; i < memory.length; i++) {
k = area.length;
for (int j = 0; j < area.length; j++) {
if ((memory[i].getValue()) <= (area[j].getValue())) {
area[j].setValue(area[j].getValue() - memory[i].getValue());
System.out.println(memory[i] + "--->" + area[j]);
break;
} else
k--;
if (k < 1) {
System.out.println(memory[i] + " Failed !");
}
}
}
}
//最优适应算法
public static void BestAdapt(Memory[] memory, Area[] area) {
int i, j;
for (i = 0; i < memory.length; i++) {
boolean flag = true;
int min = 0;
for (j = 0; j < area.length; j++) {
if (flag) {
if (memory[i].getValue() <= area[j].getValue()) {
min = area[j].getValue();
flag = false;
}
} else if ((memory[i].getValue() <= area[j].getValue())
&& (min >= area[j].getValue())) {
min = area[j].getValue();
}
}
if (min == 0) {
System.out.println(memory[i] + " Failed !");
} else {
for (j = 0; j < area.length; j++) {
if (area[j].getValue() == min) {
System.out.println(memory[i] + "--->" + area[j]);
area[j].setValue(min - memory[i].getValue());
break;
}
}
}
}
}
//最坏适应算法
public static void BadAdapt(Memory[] memory, Area[] area) {
int i, j;
for (i = 0; i < memory.length; i++) {
boolean flag = true;
int max = 0;
for (j = 0; j < area.length; j++) {
if (flag) {
if (memory[i].getValue() <= area[j].getValue()) {
max = area[j].getValue();
flag = false;
}
} else if ((memory[i].getValue() <= area[j].getValue())
&& (max <= area[j].getValue())) {
max = area[j].getValue();
}
}
if (max == 0) {
System.out.println(memory[i] + " Failed !");
} else {
for (j = 0; j < area.length; j++) {
if (area[j].getValue() == max) {
System.out.println(memory[i] + "--->" + area[j]);
area[j].setValue(max - memory[i].getValue());
break;
}
}
}
}
}
}
//定义一个内存作业区
class Area {
private int id;
private int value;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
Area(int id) {
this.id = id;
}
Area(int id, int value) {
this.id = id;
this.value = value;
}
public String toString() {
return "Area:" + id;
}
}
//定义一个内存作业
class Memory {
Area[] area = new Area[5];
Memory[] memory = new Memory[4];
private int id;
private int value;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
Memory(int id) {
this.id = id;
}
Memory(int id, int value) {
this.id = id;
this.value = value;
}
public String toString() {
return "memory:" + id;
}
}
public static void main(String[] args) {
Area[] area = new Area[5];
area[0] = new Area(0, 20);
area[1] = new Area(1, 30);
area[2] = new Area(2, 40);
area[3] = new Area(3, 50);
area[4] = new Area(4, 150);
Memory[] memory = new Memory[4];
memory[0] = new Memory(0, 100);
memory[1] = new Memory(1, 30);
memory[2] = new Memory(2, 50);
memory[3] = new Memory(3, 40);
FirstAdapt(memory, area);
BestAdapt(memory, area);
BadAdapt(memory,area);
}
//首先适应算法
public static void FirstAdapt(Memory[] memory, Area[] area) {
int k;
for (int i = 0; i < memory.length; i++) {
k = area.length;
for (int j = 0; j < area.length; j++) {
if ((memory[i].getValue()) <= (area[j].getValue())) {
area[j].setValue(area[j].getValue() - memory[i].getValue());
System.out.println(memory[i] + "--->" + area[j]);
break;
} else
k--;
if (k < 1) {
System.out.println(memory[i] + " Failed !");
}
}
}
}
//最优适应算法
public static void BestAdapt(Memory[] memory, Area[] area) {
int i, j;
for (i = 0; i < memory.length; i++) {
boolean flag = true;
int min = 0;
for (j = 0; j < area.length; j++) {
if (flag) {
if (memory[i].getValue() <= area[j].getValue()) {
min = area[j].getValue();
flag = false;
}
} else if ((memory[i].getValue() <= area[j].getValue())
&& (min >= area[j].getValue())) {
min = area[j].getValue();
}
}
if (min == 0) {
System.out.println(memory[i] + " Failed !");
} else {
for (j = 0; j < area.length; j++) {
if (area[j].getValue() == min) {
System.out.println(memory[i] + "--->" + area[j]);
area[j].setValue(min - memory[i].getValue());
break;
}
}
}
}
}
//最坏适应算法
public static void BadAdapt(Memory[] memory, Area[] area) {
int i, j;
for (i = 0; i < memory.length; i++) {
boolean flag = true;
int max = 0;
for (j = 0; j < area.length; j++) {
if (flag) {
if (memory[i].getValue() <= area[j].getValue()) {
max = area[j].getValue();
flag = false;
}
} else if ((memory[i].getValue() <= area[j].getValue())
&& (max <= area[j].getValue())) {
max = area[j].getValue();
}
}
if (max == 0) {
System.out.println(memory[i] + " Failed !");
} else {
for (j = 0; j < area.length; j++) {
if (area[j].getValue() == max) {
System.out.println(memory[i] + "--->" + area[j]);
area[j].setValue(max - memory[i].getValue());
break;
}
}
}
}
}
}
//定义一个内存作业区
class Area {
private int id;
private int value;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
Area(int id) {
this.id = id;
}
Area(int id, int value) {
this.id = id;
this.value = value;
}
public String toString() {
return "Area:" + id;
}
}
//定义一个内存作业
class Memory {
Area[] area = new Area[5];
Memory[] memory = new Memory[4];
private int id;
private int value;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
Memory(int id) {
this.id = id;
}
Memory(int id, int value) {
this.id = id;
this.value = value;
}
public String toString() {
return "memory:" + id;
}
}
相关文章推荐
- 内存动态分配的首先适应、最优适应、最坏适应算法的窗口演示(java版)
- 常见内存分配算法:首次适应算法(FirstFit)循环首次适应算法(NextFit)最佳适应算法(BestFit)最坏适应算法(WorstFit)
- 算法java实现--分支限界法--最优装载问题
- [jvm解析系列][四]Java的垃圾回收(二)垃圾收集算法,内存分配和回收策略
- 【算法】C语言实现数组的动态分配
- 嵌入式操作系统内核原理和开发(最快、最优、最差内存分配算法)
- Java核心技术很优美的代码3 实现数组的动态分配
- 算法(第四版)学习笔记之java实现能够动态调整数组大小的栈
- 进程调度算法模拟,用动态优先数及时间片轮转法实现进程调度_Java语言模拟实现
- 垃圾收集器与内存分配策略-HotSpot算法实现
- Java权重分配的实现算法
- MFC实现操作系统四种内存分配算法的模拟
- java开发C解释器:实现动态内存的分配和读写
- 关于C++的动态内存分配的实现
- 挑战篇二.2:内存池分配问题(最优适应算法)——答案错误
- 算法java实现--贪心算法--最优装载问题
- 操作系统: 最佳适配算法和邻近适配算法的模拟实现(内存分配算法)
- 链表的C语言实现(含动态内存分配)
- 存储管理-分区分配与回收算法(Java简单实现)
- 算法学习之路:动态规划-钢条切割-java实现