磁盘文件最优存储问题

问题描述:
  设磁盘上有n个文件,f1,f2,…,fn,,每个文件占磁盘上1个磁道。这n个文件的检索概率分别是p1,p2,…,pn,且p1+p2+…+pn   =1。磁头从当前磁道移到被检信息磁道所需的时间可用这2个磁道之间的径向距离来度量。如果文件pi存放在第i道上,1<i<n ,则检索这n 个文件的期望时间是 ∑(Pi*Pj*d(i,j))  ,其中  d(i,j)是第i道与第j道之间的径向距离|i-j|。   

代码:

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <iostream>
 4 using namespace std;
 5 const int maxn=100;
 6 int   A[maxn];
 7 int   B[maxn];
 8 
 9 double f(int n)
10 {
11     double sum = 0,t = 0;
12     int k = (n-1)/2;
13     sort(A,A+n);
14     B[k] = A[n-1];
15     
16     for(int i = k+1;i < n;i++)
17     {
18         B[i] = A[n-2*(i-k)];
19     }
20     for(int i = k-1;i >= 0;i--)
21     {
22         B[i] = A[n-2*(k-i)-1];
23     }
24     for (int i = 0;i < n;i++)
25     {
26         sum += A[i];
27         for(int j = i+1; j < n;j++)
28             t += B[i]*B[j]*(j-i);
29     }
30     return t/sum/sum;
31 }
32 
33 int main()
34 {
35     int i ,n;
36     cin>>n;
37     for(i = 0;i < n;i++){
38         cin>>A[i];
39     }
40     double ans=f(n);
41     cout<<ans<<endl;
42     return 0;
43 }

输入示例:

5

33 55 22 11 9

输出示例:

0.547396

猜你喜欢

转载自www.cnblogs.com/wangxuelin/p/9034870.html