贪心算法作业之磁带最优存储问题与磁盘文件最优存储问题

前言

还是直接上代码,虽然很想将有些东西写下来,感觉时间还是不够,还有就是这个有些东西写得多了没有什么意思,这里的代码参考书上的算法,还有对于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++,还有许多不是很懂。

    原文作者:贪心算法
    原文地址: https://blog.csdn.net/sinat_27714067/article/details/51184752
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞