advanced |
More exactly, a matrix (over a totally ordered set S) is sorted, iff
Now let be a set of n sorted matrices over S and f be a monotone predicate on S, i.e.
If we assume there is any feasible element in one of the matrices in , there certainly is a smallest such element. This is the one we are searching for.
The feasibility test as well as some other parameters can (and have to) be customized through a traits class.
#include <CGAL/sorted_matrix_search.h>
| ||
|
|
returns the element x in one of the sorted matrices from the range , for which t.is_feasible( x) is true and t.compare( x, y) is true for all other y values from any matrix for which t.is_feasible( y) is true.
Precondition
Requirement
File: examples/Matrix_search/sorted_matrix_search.cpp
#include <CGAL/Random.h> #include <CGAL/Cartesian_matrix.h> #include <CGAL/sorted_matrix_search.h> #include <CGAL/functional.h> #include <vector> #include <algorithm> #include <iterator> typedef int Value; typedef std::vector<Value> Vector; typedef Vector::iterator Value_iterator; typedef std::vector<Vector> Vector_cont; typedef CGAL::Cartesian_matrix<std::plus<int>, Value_iterator, Value_iterator> Matrix; int main() { // set of vectors the matrices are build from: Vector_cont vectors; // generate a random vector and sort it: Vector a; const int n = 5; for (int i = 0; i < n; ++i) a.push_back(CGAL::default_random(100)); std::sort(a.begin(), a.end()); std::cout << "a = ( "; std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout," ")); std::cout << ")\n"; // build a Cartesian matrix from a: Matrix M(a.begin(), a.end(), a.begin(), a.end()); // search for an upper bound for max(a): Value bound = a[n-1]; Value upper_bound = CGAL::sorted_matrix_search( &M, &M + 1, CGAL::sorted_matrix_search_traits_adaptor( CGAL::bind_2(std::greater_equal<Value>(), bound), M)); std::cout << "Upper bound for " << bound << " is " << upper_bound << "." << std::endl; return 0; } // ---------------------------------------------------------------------------- // ** EOF // ----------------------------------------------------------------------------
advanced |