#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void main()
{
int j;
float a,b,c;
float f1(int j);
float f2(int j);
float f3(int j);
printf(" FIFO LRU OPT\n");
for(j=4;j<=32;j++)
{
a=f1(j);
b=f2(j);
c=f3(j);
printf("%d %f %f %f \n",j,a,b,c);
}
}
float f1(int j)
{
srand(time(0));
int a[320],b[32]={-1};
int i,x,y,times=0,have,bp=0;
float z,ftimes=0;
for(i=0;i<320;i++)
{
a[i]=i/10;
}
for(;;)
{
have=0;
x=rand()%319;
times=times+1;
for(i=0;i<j;i++)
{
if(b[i]==a[x+1])
{
have=have+1;
}
}
if(have==0)
{
b[bp%j]=a[x+1];
bp=bp+1;
ftimes=ftimes+1;
}
y=x;
have=0;
if(times==320)
{
break;
}
x=rand()%y;
times=times+1;
for(i=0;i<j;i++)
{
if(b[i]==a[x+1])
{
have=have+1;
}
}
if(have==0)
{
b[bp%j]=a[x+1];
bp=bp+1;
ftimes=ftimes+1;
}
y=x;
have=0;
if(times==320)
{
break;
}
x=y+2+rand()%(319-y-2);
times=times+1;
for(i=0;i<j;i++)
{
if(b[i]==a[x+1])
{
have=have+1;
}
}
if(have==0)
{
b[bp%j]=a[x+1];
bp=bp+1;
ftimes=ftimes+1;
}
if(times==320)
{
break;
}
}
z=1-ftimes/320;
return z;
}
float f2(int j)
{
srand(time(0));
int a[320],b[32]={-1};
int i,x,y,times=0,have,bp=0,t,m;
float z,ftimes=0;
for(i=0;i<320;i++)
{
a[i]=i/10;
}
for(;;)
{
have=0;
x=rand()%319;
times=times+1;
for(i=0;i<j;i++)
{
if(b[i]==a[x+1])
{
have=have+1;
t=i;
}
}
if(have==0)
{
for(i=0;i<j-1;i++)
{
b[i]=b[i+1];
}
b[j-1]=a[x+1];
ftimes=ftimes+1;
}
else
{
m=b[t];
for(i=t;i<j-1;i++)
{
b[i]=b[i+1];
}
b[j-1]=m;
}
y=x;
have=0;
if(times==320)
{
break;
}
x=rand()%y;
times=times+1;
for(i=0;i<j;i++)
{
if(b[i]==a[x+1])
{
have=have+1;
}
}
if(have==0)
{
for(i=0;i<j-1;i++)
{
b[i]=b[i+1];
}
b[j-1]=a[x+1];
ftimes=ftimes+1;
}
else
{
m=b[t];
for(i=t;i<j-1;i++)
{
b[i]=b[i+1];
}
b[j-1]=m;
}
y=x;
have=0;
if(times==320)
{
break;
}
x=y+2+rand()%(319-y-2);
times=times+1;
for(i=0;i<j;i++)
{
if(b[i]==a[x+1])
{
have=have+1;
}
}
if(have==0)
{
for(i=0;i<j-1;i++)
{
b[i]=b[i+1];
}
b[j-1]=a[x+1];
ftimes=ftimes+1;
}
else
{
m=b[t];
for(i=t;i<j-1;i++)
{
b[i]=b[i+1];
}
b[j-1]=m;
}
if(times==320)
{
break;
}
}
z=1-ftimes/320;
return z;
}
float f3(int j)
{
srand(time(0));
int a[320],b[32]={-1},c[32]={0},min,mini;
int i,x,y,times=0,have,bp=0;
float z,ftimes=0;
for(i=0;i<320;i++)
{
a[i]=i/10;
}
for(;;)
{
have=0;
x=rand()%319;
c[x/10]=c[x/10]+1;
times=times+1;
for(i=0;i<j;i++)
{
if(b[i]==a[x+1])
{
have=have+1;
}
}
if(have==0)
{
min=c[b[0]];
mini=0;
for(i=0;i<j;i++)
{
if(c[b[i]]<min)
{
min=c[b[i]];
mini=i;
}
}
b[mini]=a[x+1];
ftimes=ftimes+1;
}
y=x;
have=0;
if(times==320)
{
break;
}
x=rand()%y;
times=times+1;
for(i=0;i<j;i++)
{
if(b[i]==a[x+1])
{
have=have+1;
}
}
if(have==0)
{
min=c[b[0]];
mini=0;
for(i=0;i<j;i++)
{
if(c[b[i]]<min)
{
min=c[b[i]];
mini=i;
}
}
b[mini]=a[x+1];
ftimes=ftimes+1;
}
y=x;
have=0;
if(times==320)
{
break;
}
x=y+2+rand()%(319-y-2);
times=times+1;
for(i=0;i<j;i++)
{
if(b[i]==a[x+1])
{
have=have+1;
}
}
if(have==0)
{
min=c[b[0]];
mini=0;
for(i=0;i<j;i++)
{
if(c[b[i]]<min)
{
min=c[b[i]];
mini=i;
}
}
b[mini]=a[x+1];
ftimes=ftimes+1;
}
if(times==320)
{
break;
}
}
z=1-ftimes/320;
return z;
}
评论2
最新资源