磁带最优存储问题java实现_磁带的最优存储问题(贪心选择)
算法設(shè)計(jì)
n個(gè)程序的平均讀取時(shí)間:(貪心策略)
在該題目中,要考慮綜合因素:長(zhǎng)度和讀取概率。要求n個(gè)程序的平均讀取時(shí)間最短。按照貪心策略,則每個(gè)程序的讀取時(shí)間都應(yīng)該最短。故:
(1)計(jì)算每個(gè)程序的長(zhǎng)度和讀取概率的乘積。
(2)對(duì)(1)產(chǎn)生的結(jié)果進(jìn)行排序。
(3)當(dāng)訪問(wèn)次序確定時(shí),求出每個(gè)程序的訪問(wèn)時(shí)間。
(4)求出n個(gè)程序的平均讀取時(shí)間。
程序源代碼如下
/*
length[n] ? 程序長(zhǎng)度
length1[n] ?每個(gè)程序的長(zhǎng)度和概率的乘積
gailv[n] ? ?程序的概率
gailv1[n] ? 程序計(jì)算后的概率
sum[n] ? ? ?讀取每個(gè)程序所需的時(shí)間
*/
# include
# include
# define N 10
//計(jì)算每個(gè)文件被讀取的概率
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;
}
//計(jì)算文件和讀取概率的乘積
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;
}
//對(duì)乘積進(jìn)行排序
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;
}
//讀取每個(gè)程序所用的時(shí)間
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;
}
//讀取所有程序的平均時(shí)間
int Min_time(int n,double sum[n])
{
int i;
double min_time=0.0;
for(i=0;i
{
min_time+=sum[i];
}
printf(“最小平均讀取時(shí)間為:\n”);
printf(“%f\n”,min_time);
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的磁带最优存储问题java实现_磁带的最优存储问题(贪心选择)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java流上传文档把磁盘撑满_BOOT目
- 下一篇: java 1..0 openjdk_ja