贪心磁盘存储有关问题
贪心磁盘存储问题
#include<iostream>
using namespace std;
//每个文件占一个磁道,检索概率分别p1,p2...pn,且和为1
//使期望检索时间最小
//检索期望时间sum(pi*pj*d(i,j)),d(i,j)是第i道与第j道之间径向距离i-j绝对值
//按照概率值由大到小排序,大概率放置最中间middle位置,然后次大分别放在中间左右位置
//依次排下,再将对应数值按概率顺序排入
//void greedysearch(int n,double *p,int&x)
//{
// //p为概率,x作为文件排列结果
// int k[];
// int r,l;
// //将p[]按非递增序列排列p[k[1]]>=p[k[2]]...>=p[k[n]]
// //这里k1,k2是1,2...n的某一排列
// x[n/2]=k[1];
// r=n/2+1;
// l=n/2-1;
// for(i=2;i<=n;i+=2)
// {
// x[r]=k[i];
// r++;
// }
// for(i=3;i<=n;i+=2)
// {
// x[l]=k[i];
// l--;
// }
//}
#include<stdio.h>
#include<algorithm>
using namespace std;
int cmp(const void *a,const void *b)
{
return *(double*)a-*(double*)b;
}
double greedy(double a[],int n)
{
qsort(a,n,sizeof(double),cmp);
int mid=(n-1)/2;
double x[n];
x[mid]=a[n-1];
for(int i=mid+1;i<n;i++)
{
x[i]=a[n-2*(i-mid)];
}
for(int i=mid-1;i>=0;i--)
{
x[i]=a[n-2*(mid-i)-1];
}
double sum=0,exp=0;
for(int i=0;i<n;i++)
{
exp+=x[i]*x[j]*(j-i);
}
return exp/sum/sum;
}
int main()
{
int j,n;
double a[100],exp;
cin>>n;
for(int i=0;i,n;i++)
cin>>a[i];
exp=greedy(a,n);
cout<<exp<<endl;
}
#include<iostream>
using namespace std;
//每个文件占一个磁道,检索概率分别p1,p2...pn,且和为1
//使期望检索时间最小
//检索期望时间sum(pi*pj*d(i,j)),d(i,j)是第i道与第j道之间径向距离i-j绝对值
//按照概率值由大到小排序,大概率放置最中间middle位置,然后次大分别放在中间左右位置
//依次排下,再将对应数值按概率顺序排入
//void greedysearch(int n,double *p,int&x)
//{
// //p为概率,x作为文件排列结果
// int k[];
// int r,l;
// //将p[]按非递增序列排列p[k[1]]>=p[k[2]]...>=p[k[n]]
// //这里k1,k2是1,2...n的某一排列
// x[n/2]=k[1];
// r=n/2+1;
// l=n/2-1;
// for(i=2;i<=n;i+=2)
// {
// x[r]=k[i];
// r++;
// }
// for(i=3;i<=n;i+=2)
// {
// x[l]=k[i];
// l--;
// }
//}
#include<stdio.h>
#include<algorithm>
using namespace std;
int cmp(const void *a,const void *b)
{
return *(double*)a-*(double*)b;
}
double greedy(double a[],int n)
{
qsort(a,n,sizeof(double),cmp);
int mid=(n-1)/2;
double x[n];
x[mid]=a[n-1];
for(int i=mid+1;i<n;i++)
{
x[i]=a[n-2*(i-mid)];
}
for(int i=mid-1;i>=0;i--)
{
x[i]=a[n-2*(mid-i)-1];
}
double sum=0,exp=0;
for(int i=0;i<n;i++)
{
exp+=x[i]*x[j]*(j-i);
}
return exp/sum/sum;
}
int main()
{
int j,n;
double a[100],exp;
cin>>n;
for(int i=0;i,n;i++)
cin>>a[i];
exp=greedy(a,n);
cout<<exp<<endl;
}