算法设计
n个程序的平均读取时间:(贪心策略)
在该题目中,要考虑综合因素:长度和读取概率。要求n个程序的平均读取时间最短。按照贪心策略,则每个程序的读取时间都应该最短。故:
(1)计算每个程序的长度和读取概率的乘积。
(2)对(1)产生的结果进行排序。
(3)当访问次序确定时,求出每个程序的访问时间。
(4)求出n个程序的平均读取时间。
程序源代码如下
/*
length[n] 程序长度
length1[n] 每个程序的长度和概率的乘积
gailv[n] 程序的概率
gailv1[n] 程序计算后的概率
sum[n] 读取每个程序所需的时间
*/
# include
# include
# define N 10
//计算每个文件被读取的概率
int calculate(int n,int gailv[n],double gailv1[n])
{
int sum=0;
int i;
for(i=0;i
{
sum+=gailv[i];
}
for(i=0;i
{
gailv1[i]=(double)gailv[i]/sum;
}
return 0;
}
//计算文件和读取概率的乘积
int multiple(int n,double gailv1[n],int length[n],double length1[n])
{
int i;
for(i=0;i
{
length1[i]=((double)gailv1[i])*((double)length[i]);
}
return 0;
}
//对乘积进行排序
int swap(int n,double length1[n])
{
int i,j;
for(i=0;i
{
for(j=i+1;j
{
if(length1[i]>length1[j])
{
double temp;
temp=length1[i];
length1[i]=length1[j];
length1[j]=temp;
}
}
}
return 0;
}
//读取每个程序所用的时间
int he(int n,double length1[n],double sum[n])
{
int i;
for(i=0;i
{
double t;
t+=length1[i];
sum[i]=t;
}
return 0;
}
//读取所有程序的平均时间
int Min_time(int n,double sum[n])
{
int i;
double min_time=0.0;
for(i=0;i
{
min_time+=sum[i];
}
printf(“最小平均读取时间为:\n”);
printf(“%f\n”,min_time);
return 0;
}