<html>

  <head>
    <title>
      BINS - Order, Sort and Search Data using Bins
    </title>
  </head>

  <body bgcolor="#EEEEEE" link="#CC0000" alink="#FF3300" vlink="#000055">

    <h1 align = "center">
      BINS <br> Order, Sort and Search Data using Bins
    </h1>

    <hr>

    <p>
      <b>BINS</b>
      is a C++ library which
      sorts data into order, or lumps
      it into bins, or selects an item of particular rank, or finds
      the unique elements in a list.
    </p>

    <h3 align = "center">
      Licensing:
    </h3>

    <p>
      The computer code and data files described and made available on this web page
      are distributed under
      <a href = "../../txt/gnu_lgpl.txt">the GNU LGPL license.</a>
    </p>

    <h3 align = "center">
      Languages:
    </h3>

    <p>
      <b>BINS</b> is available in
      <a href = "../../cpp_src/bins/bins.html">a C++ version</a> and
      <a href = "../../f77_src/bins/bins.html">a FORTRAN77 version</a> and
      <a href = "../../f_src/bins/bins.html">a FORTRAN90 version</a>.
    </p>

    <h3 align = "center">
      Related Data and Programs:
    </h3>

    <p>
      <a href = "../../cpp_src/subpak/subpak.html">
      SUBPAK</a>,
      a C++ library which
      contains many routines
      for sorting and searching data.
    </p>

    <h3 align = "center">
      Reference:
    </h3>

    <p>
      <ol>
        <li>
          Jon Bentley, Bruce Weide, Andrew Yao,<br>
          Optimal Expected Time Algorithms for Closest Point Problems,<br>
          ACM Transactions on Mathematical Software,<br>
          Volume 6, Number 4, December 1980, pages 563-580.
        </li>
        <li>
          Thomas Cormen, Charles Leiserson, Ronald Rivest,<br>
          Introduction to Algorithms,<br>
          MIT Press, 2001,<br>
          ISBN: 0262032937.
        </li>
        <li>
          Barry Joe,<br>
          GEOMPACK - a software package for the generation of meshes
          using geometric algorithms,<br>
          Advances in Engineering Software,<br>
          Volume 13, 1991, pages 325-331.
        </li>
        <li>
          Albert Nijenhuis, Herbert Wilf,<br>
          Combinatorial Algorithms for Computers and Calculators,<br>
          Second Edition,<br>
          Academic Press, 1978,<br>
          ISBN: 0-12-519260-6,<br>
          LC: QA164.N54.
        </li>
      </ol>
    </p>

    <h3 align = "center">
      Source Code:
    </h3>

    <p>
      <ul>
        <li>
          <a href = "bins.cpp">bins.cpp</a>, the source code.
        </li>
        <li>
          <a href = "bins.hpp">bins.hpp</a>, the include file.
        </li>
        <li>
          <a href = "bins.sh">bins.sh</a>,
          commands to compile the source code.
        </li>
      </ul>
    </p>

    <h3 align = "center">
      Examples and Tests:
    </h3>

    <p>
      <ul>
        <li>
          <a href = "bins_prb.cpp">bins_prb.cpp</a>,
          a sample calling program.
        </li>
        <li>
          <a href = "bins_prb.sh">bins_prb.sh</a>,
          commands to compile and run the sample program.
        </li>
        <li>
          <a href = "bins_prb_output.txt">bins_prb_output.txt</a>,
          the output file.
        </li>
      </ul>
    </p>

    <h3 align = "center">
      List of Routines:
    </h3>

    <p>
      <ul>
        <li>
          <b>BIN_SEARCH_ONE_2D</b> searches one cell in a 2D array of bins.
        </li>
        <li>
          <b>BIN_TO_R8_EVEN</b> returns the limits for a given "bin" in [A,B].
        </li>
        <li>
          <b>BIN_TO_R8_EVEN2</b> returns the limits for a given "bin" in [A,B].
        </li>
        <li>
          <b>BIN_TO_R82_EVEN2</b> returns the limits for a given R82 "bin" in [A,B].
        </li>
        <li>
          <b>BIN_TO_R82_EVEN3</b> returns the limits for a given R82 "bin" in [A,B].
        </li>
        <li>
          <b>BIN_TO_R83_EVEN2</b> returns the limits for a given R83 "bin" in [A,B].
        </li>
        <li>
          <b>BIN_TO_R83_EVEN3</b> returns the limits for a given R83 "bin" in [A,B].
        </li>
        <li>
          <b>GET_SEED</b> returns a random seed for the random number generator.
        </li>
        <li>
          <b>I4_MAX</b> returns the maximum of two I4's.
        </li>
        <li>
          <b>I4_MAX</b> returns the smaller of two I4's.
        </li>
        <li>
          <b>I4_MODP</b> returns the nonnegative remainder of I4 division.
        </li>
        <li>
          <b>I4_SIGN</b> returns the sign of an I4.
        </li>
        <li>
          <b>I4_SWAP</b> switches two I4's.
        </li>
        <li>
          <b>I4_UNIFORM</b> returns a scaled pseudorandom I4.
        </li>
        <li>
          <b>I4_WRAP</b> forces an I4 to lie between given limits by wrapping.
        </li>
        <li>
          <b>I4MAT_PRINT</b> prints an I4MAT, with an optional title.
        </li>
        <li>
          <b>I4MAT_PRINT_SOME</b> prints some of an I4MAT.
        </li>
        <li>
          <b>I4MAT_TRANSPOSE_PRINT</b> prints an I4MAT, transposed.
        </li>
        <li>
          <b>I4MAT_TRANSPOSE_PRINT_SOME</b> prints some of an I4MAT, transposed.
        </li>
        <li>
          <b>I4VEC_HEAP_D</b> reorders an I4VEC into a descending heap.
        </li>
        <li>
          <b>I4VEC_INDICATOR</b> sets an I4VEC to the indicator vector.
        </li>
        <li>
          <b>I4VEC_PRINT</b> prints an I4VEC.
        </li>
        <li>
          <b>I4VEC_SORT_HEAP_A</b> ascending sorts an I4VEC using heap sort.
        </li>
        <li>
          <b>I4VEC_SORTED_UNIQUE</b> finds unique elements in a sorted I4VEC.
        </li>
        <li>
          <b>I4VEC2_COMPARE</b> compares pairs of integers stored in two I4VECs.
        </li>
        <li>
          <b>I4VEC2_SORT_A</b> ascending sorts a vector of pairs of integers.
        </li>
        <li>
          <b>I4VEC2_SORTED_UNIQUE</b> finds unique elements in a sorted I4VEC2.
        </li>
        <li>
          <b>INDEX_BOX2_NEXT_2D</b> produces indices on the surface of a box in 2D.
        </li>
        <li>
          <b>INDEX_BOX2_NEXT_3D</b> produces indices on the surface of a box in 3D.
        </li>
        <li>
          <b>PERM_CHECK</b> checks that a vector represents a permutation.
        </li>
        <li>
          <b>PERM_INV</b> inverts a permutation "in place".
        </li>
        <li>
          <b>POINTS_NEAREST_POINT_NAIVE_2D</b> finds the nearest point to a given point in 2D.
        </li>
        <li>
          <b>POINTS_NEAREST_POINT_NAIVE_3D</b> finds the nearest point to a given point in 3D.
        </li>
        <li>
          <b>POINTS_NEAREST_POINT_NAIVE_ND</b> finds the nearest point to a given point in ND.
        </li>
        <li>
          <b>POINTS_NEAREST_POINTS_NAIVE_2D</b> finds the nearest point to given points in 2D.
        </li>
        <li>
          <b>POINTS_NEAREST_POINTS_NAIVE_3D</b> finds the nearest point to given points in 3D.
        </li>
        <li>
          <b>R4_NINT</b> returns the nearest integer to an R4.
        </li>
        <li>
          <b>R8_HUGE</b> returns a "huge" R8 value.
        </li>
        <li>
          <b>R8_TO_BIN_EVEN</b> determines the appropriate "bin" for C in [A,B].
        </li>
        <li>
          <b>R8_TO_BIN_EVEN2</b> determines the appropriate "bin" for C in [A,B].
        </li>
        <li>
          <b>R8_UNIFORM</b> returns a scaled pseudorandom R8.
        </li>
        <li>
          <b>R8_UNIFORM_01</b> returns a unit pseudorandom R8.
        </li>
        <li>
          <b>R82_TO_BIN_EVEN2</b> determines the appropriate "bin" for an R82 value.
        </li>
        <li>
          <b>R82_TO_BIN_EVEN3</b> determines the appropriate "bin" for an R82 value.
        </li>
        <li>
          <b>R82_UNIFORM</b> returns a random R82 value in a given range.
        </li>
        <li>
          <b>R82VEC_PART_QUICK_A</b> reorders an R82 vector as part of a quick sort.
        </li>
        <li>
          <b>R82VEC_PERMUTE</b> permutes an R82VEC in place.
        </li>
        <li>
          <b>R82VEC_PRINT</b> prints an R82VEC.
        </li>
        <li>
          <b>R82VEC_SORT_HEAP_INDEX_A</b> does an indexed heap ascending sort of an R82VEC.
        </li>
        <li>
          <b>R82VEC_SORT_QUICK_A</b> ascending sorts an R82VEC using quick sort.
        </li>
        <li>
          <b>R82VEC_UNIFORM</b> returns a random R82VEC in a given range.
        </li>
        <li>
          <b>R83_TO_BIN_EVEN2</b> determines the appropriate "bin" for an R83.
        </li>
        <li>
          <b>R83_TO_BIN_EVEN3</b> determines the appropriate "bin" for an R83.
        </li>
        <li>
          <b>R83VEC_PART_QUICK_A</b> reorders an R83VEC as part of a quick sort.
        </li>
        <li>
          <b>R83VEC_SORT_QUICK_A</b> ascending sorts an R83VEC using quick sort.
        </li>
        <li>
          <b>R83VEC_UNIFORM</b> returns a random R83VEC in a given range.
        </li>
        <li>
          <b>R8MAT_PRINT</b> prints an R8MAT, with an optional title.
        </li>
        <li>
          <b>R8MAT_PRINT_SOME</b> prints some of an R8MAT.
        </li>
        <li>
          <b>R8MAT_TRANSPOSE_PRINT</b> prints an R8MAT, transposed.
        </li>
        <li>
          <b>R8MAT_TRANSPOSE_PRINT_SOME</b> prints some of an R8MAT, transposed.
        </li>
        <li>
          <b>R8VEC_BRACKET</b> searches a sorted array for successive brackets of a value.
        </li>
        <li>
          <b>R8VEC_EQ</b> is true if every pair of entries in two vectors is equal.
        </li>
        <li>
          <b>R8VEC_GT</b> == ( A1 > A2 ) for real vectors.
        </li>
        <li>
          <b>R8VEC_LT</b> == ( A1 < A2 ) for real vectors.
        </li>
        <li>
          <b>R8VEC_PRINT</b> prints a R8VEC.
        </li>
        <li>
          <b>R8VEC_SWAP</b> swaps the entries of two R8VEC's.
        </li>
        <li>
          <b>R8VEC_UNIFORM</b> fills an R8VEC with scaled pseudorandom values.
        </li>
        <li>
          <b>S_LEN_TRIM</b> returns the length of a string to the last nonblank.
        </li>
        <li>
          <b>SORT_HEAP_EXTERNAL</b> externally sorts a list of items into ascending order.
        </li>
        <li>
          <b>TIMESTAMP</b> prints the current YMDHMS date as a time stamp.
        </li>
        <li>
          <b>TUPLE_NEXT2</b> computes the next element of an integer tuple space.
        </li>
      </ul>
    </p>

    <p>
      You can go up one level to <a href = "../cpp_src.html">
      the C++ source codes</a>.
    </p>

    <hr>

    <i>
      Last revised on 28 January 2011.
    </i>

    <!-- John Burkardt -->

  </body>

  <!-- Initial HTML skeleton created by HTMLINDEX. -->

</html>