• 算法设计与分析: 4-3 磁带最优存储问题


     版权声明:本文为CSDN博主「dijk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/IOIO_/article/details/81056963

    源程序是dijk写的,鄙人只是添加了一些注释作为学习笔记,旨在大家更好的理解教材

    package cn.htu.test;
    /*
     * 磁带最优存储
     * 至于书上写的给出数据p是概率,但是这本书就是这。。。
     * 你懂 就好,不必太死磕书,毕竟此类书国内比较少,作者已经非常呕心沥血了,希望后有好的来者
     * p虽然是872,452等等,你可以理解为频数
     * 做程序最先要搞懂的就是输入什么,我们要得到什么
     * 这个程序的output是最少的平均读取时间,至于存储方案根本就已经题目说过了,不是让我们想的,而是
     * 让我们执行的,所以要求平均,就需要有总和和除数,本题的关键就是求总和,而每一个文件的读取时间是
     * 前面的累计时间加一起,所以这样就需要两次累加,先看程序就知道了
     */
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class CiDaiZuiYouCunChu {
    
        private static int[] len,p,t;//len是么个程序的长度,p是它的被读取概率
        private static int n;//用来存放有几个磁带
    
        public static void main(String[] args){
            @SuppressWarnings("resource")
            Scanner input = new Scanner(System.in);
    
            while (true){
                n = input.nextInt();
    
                len = new int[n+1];//len,p,t数组都是不用[0]号位置
                p = new int[n+1];
                t = new int[n+1];
    
                for(int i=1; i<=n; i++){//对于这n个位置,进行每个程序的len和p的输入
                    len[i] = input.nextInt();
                    p[i] = input.nextInt();
                }
    
                double result = greedy();
    
                System.out.println(String.format("%.4f", result));//结果就是总累加时间除以累加概率
            }
        }
    
        private static double greedy(){
            for(int i=1; i<=n; i++)
                t[i] = p[i] * len[i];
            //t数组存放的是读取该程序的时间,实际就是存放的是每一个程序长度的概率权值
    
            Arrays.sort(t);//对t数组进行排序
    
            //而我们最终要的t数组不是每一个的程序读取时间,而是该读取到第i个程序的累计时间
            for(int i=2; i<=n; i++)
                t[i] += t[i-1];
    
            int totalTime = 0;//初始化总时间为0
            double totalP = 0;
    
            for(int i=1; i<=n; i++){
                totalTime += t[i];//总时间就是所有“二次处理后”的t数组的每个元素的累加
                totalP += p[i];//总概率就是所有概率的总和
            }
    
            return totalTime/totalP;
        }
    }
  • 相关阅读:
    解决SecureCRT中文显示乱码
    最新ubuntu10.10更新源
    向linux内核添加系统调用新老内核比较
    Field requires API level 5 (current min is 1) 问题的解决
    ubuntu 搜索文件方法(find命令)
    ubuntu12.04终端全屏
    .classpath 文件中的excluding属性
    eclipse中的.project 和 .classpath文件的具体作用
    Windows Mobile项目编译很慢情况的解决(VS2008)
    windowsphone7高级编程中提到的地址
  • 原文地址:https://www.cnblogs.com/shallow920/p/12862972.html
Copyright © 2020-2023  润新知