前言
还是直接上代码,虽然很想将有些东西写下来,感觉时间还是不够,还有就是这个有些东西写得多了没有什么意思,这里的代码参考书上的算法,还有对于C++有些理解,看了很厚的C++书后,才明白了一些。这里放上的代码,仅供参考,希望大家互相交流,共同进步。
磁带最优存储问题
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
using std::vector;
double greedy(vector<int>x,vector<int>p)
{
int n=p.size();
vector <int>y(n,0);
for(int i=0;i<n;i++)
y[i]=x[i]*p[i];
sort(y.begin(),y.end());
for(int i=1;i<n;i++)
y[i]+=y[i-1];
double m=0,t=0;
for (int i=0;i<n;i++)
{
m+=p[i];
t+=y[i];
}
return t/m;
}
int main()
{
int n;
int a,b;
int i,j;
double t;
vector<int>x;
vector<int>p;
cout << "请输入程序的个数" << endl;
cin>>n;
cout<<"请输入程序的长度:"<<endl;
for(i=1;i<=n;i++)
{
cin>>a;
x.push_back(a);
}
cout<<"请输入程序的读取概率:"<<endl;
for(j=1;j<=n;j++)
{
cin>>b;
p.push_back(b);
}
t=greedy(x,p);
cout<<"最小平均读取时间为:"<<t<<endl;
return 0;
}
磁盘文件最优存储问题
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
using std::vector;
double greedy(vector<int>p)
{
int n=p.size();
vector <int>x(n,0);
sort(p.begin(),p.end());
int k=(n-1)/2;
x[k]=p[n-1];
for(int i=k+1;i<n;i++)
{
x[i]=p[n-2*(i-k)];
}
for(int i=k-1;i>=0;i--)
{
x[i]=p[n-2*(k-i)-1];
}
double m=0,t=0;
for (int i=0;i<n;i++)
{
m+=p[i];
for (int j=i+1;j<n;j++)
t+=x[i]*x[j]*(j-i);
}
return t/m/m;
}
int main()
{
int n;
int a;
int i;
double t;
vector<int>p;
cout << "请输入文件的个数" << endl;
cin>>n;
cout<<"请输入文件的检索概率:"<<endl;
for(i=1;i<=n;i++)
{
cin>>a;
p.push_back(a);
}
t=greedy(p);
cout<<"最小期望检索时间为:"<<t<<endl;
return 0;
}
结束
好好学习算法和C++,还有许多不是很懂。