最优适应算法和最佳适应算法和最坏适应算法代码实现
时间: 2023-11-10 08:11:15 浏览: 50
最优适应算法(Optimal Fit Algorithm)、最佳适应算法(Best Fit Algorithm)、最坏适应算法(Worst Fit Algorithm)是内存分配算法中常用的三种。其中,最优适应算法按照内存块大小的需求进行排序,选择最小的能够满足需求的内存块进行分配;最佳适应算法和最坏适应算法则是在内存块的排序上有所不同,前者选取能够满足需求并且空闲空间最小的内存块进行分配,后者则选择空闲空间最大的内存块进行分配。下面是三种算法的代码实现。
最优适应算法:
```
void optimal_fit(int block_size[], int m, int process_size[], int n)
{
int allocation[n];
for (int i = 0; i < n; i++) {
int bestIdx = -1;
for (int j = 0; j < m; j++) {
if (block_size[j] >= process_size[i]) {
if (bestIdx == -1)
bestIdx = j;
else if (block_size[bestIdx] > block_size[j])
bestIdx = j;
}
}
if (bestIdx != -1) {
allocation[i] = bestIdx;
block_size[bestIdx] -= process_size[i];
}
else
allocation[i] = -1;
}
cout << "\nProcess No.\tProcess Size\tBlock no.\n";
for (int i = 0; i < n; i++) {
cout << " " << i+1 << "\t\t"
<< process_size[i] << "\t\t";
if (allocation[i] != -1)
cout << allocation[i] + 1;
else
cout << "Not Allocated";
cout << endl;
}
}
```
最佳适应算法:
```
void best_fit(int block_size[], int m, int process_size[], int n)
{
int allocation[n];
for (int i=0; i<n; i++)
{
int bestIdx = -1;
for (int j=0; j<m; j++)
{
if (block_size[j] >= process_size[i])
{
if (bestIdx == -1)
bestIdx = j;
else if (block_size[bestIdx] > block_size[j])
bestIdx = j;
}
}
if (bestIdx != -1)
{
allocation[i] = bestIdx;
block_size[bestIdx] -= process_size[i];
}
else
allocation[i] = -1;
}
cout << "\nProcess No.\tProcess Size\tBlock no.\n";
for (int i = 0; i < n; i++) {
cout << " " << i+1 << "\t\t"
<< process_size[i] << "\t\t";
if (allocation[i] != -1)
cout << allocation[i] + 1;
else
cout << "Not Allocated";
cout << endl;
}
}
```
最坏适应算法:
```
void worst_fit(int block_size[], int m, int process_size[], int n)
{
int allocation[n];
for (int i = 0 ; i < n ; i++)
{
int wstIdx = -1;
for (int j = 0 ; j < m ; j++)
{
if (block_size[j] >= process_size[i])
{
if (wstIdx == -1)
wstIdx = j;
else if (block_size[wstIdx] < block_size[j])
wstIdx = j;
}
}
if (wstIdx != -1)
{
allocation[i] = wstIdx;
block_size[wstIdx] -= process_size[i];
}
else
allocation[i] = -1;
}
cout << "\nProcess No.\tProcess Size\tBlock no.\n";
for (int i = 0; i < n; i++) {
cout << " " << i+1 << "\t\t"
<< process_size[i] << "\t\t";
if (allocation[i] != -1)
cout << allocation[i] + 1;
else
cout << "Not Allocated";
cout << endl;
}
}
```