<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>