zoukankan      html  css  js  c++  java
  • Algs4-1.1.32直方图

     1.1.32直方图。假设标准输入流中含有一系列的double值。编写一段程序,从命令行接受一个整数N和两个double值l和r。将(l,r)均分为N段并使用StrDraw画出输入流中的值落入每段的数量的直方图。

    解决这个问题的思路是:
    1.创建一个二维数组,其中第一维用来存储 (r-l)/N等分段的边界值,第二维用来存储标准输入流中的值落在这个段中的个数。

    2.将标准输入流进行了非递减有序序列的设。有此假设的主要原因是受资料内容都在描述二分查找以及此问题前的其他问题的解决方法也以二分查找为基础进行的修改。正是有此假设才出现了在有序数组中采用二分查找段查找的方式。关键实现如下:

        public static void rank(double key,double[][] group)
        {
            if (key<group[0][0] || key>=group[group.length-1][0]) return;
            int lo=0;
            int hi=group.length-1;
            while (lo<hi-1)
            {
                int mid=lo+(hi-lo)/2;
                if (key<group[mid][0]) hi=mid;
                else if(key>group[mid][0]) lo=mid;
                else {group[mid][1]++;return;}
              }
           group[lo][1]++;
         }

    参考其他人的实现思路是:采用一维数组,然后用标准流中的单个值v,int(v/(r-l))直接计算出值v应落在的数组的索引号,其优点显而易见,算法简单、代码少、支持标准输入流无序、时间复杂度O(1)。而二分段查找对边界值的控制要特别用心,费心还容易出错,时间复杂度为O(lgN)。

  • 相关阅读:
    spring基础
    hibernate基础
    struts2基础
    javaEE(17)_邮件原理与JavaMail开发
    javase(14)_java基础增强
    javase(13)_网络编程
    javase(12)_集合框架_Queue
    C++:memset ,memcpy 和strcpy 的根本区别!
    16位的二进制数,每4位为一个数,写函数求他们的和
    态度!!!
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9848712.html
Copyright © 2011-2022 走看看