贪心磁盘存储问题

来源:互联网 发布:沉迷网络的事例 编辑:程序博客网 时间:2024/05/12 17:00
#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;
}
3 0
原创粉丝点击