zoukankan      html  css  js  c++  java
  • Monotone and Sorted Matrix Search ( Arithmetic and Algebra) CGAL 4.13 -User Manual

    monotone_matrix_search() and sorted_matrix_search() are techniques that deal with the problem of efficiently finding largest entries in matrices with certain structural properties. Many concrete problems can be modelled as matrix search problems, and for some of them we provide explicit solutions that allow you to solve them without knowing about the matrix search technique. Examples are, the computation of all furthest neighbors for the vertices of a convex polygon, maximal k-gons inscribed into a planar point set, and computing rectangular p-centers. 

    monotone_matrix_search() 和 sorted_matrix_search()处理的问题是在一定结构属性的矩阵中高效寻找最大入口。很多具体的问题可以建模为矩阵搜索问题,有些问题我们可以在你不知道矩阵搜索技术的情况下提供显式解决问题的方法。这方面的例子有:计算一个凸多边形的顶点集的所有最远邻居,一个平面点集的内接最大k边形(k-gon)和求一个矩形p心。

    Example

    本例我们建立一个随机的向量 a=(ai)i=1,,(由0-99中均匀分布产生)并创建一个笛卡尔矩阵M,矩阵中包含所有ai+aj,i,j∈{1,,5},如果a排序,则M也排序。则我们可以使用 sorted_matrix_search() 来计算M中a的最大入口的上界。

    In the following program we build a random vector a=(ai)i=1,,5 (elements drawn uniformly from {0,,99}) and construct a Cartesian matrix M containing as elements all sums ai+aj,i,j{1,,5}. If a is sorted, M is sorted as well. So we can apply sorted_matrix_search() to compute the upper bound for the maximal entry of a in M.


    File Matrix_search/sorted_matrix_search.cpp

    #include <CGAL/Random.h>
    #include <CGAL/Cartesian_matrix.h>
    #include <CGAL/sorted_matrix_search.h>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    #include <boost/functional.hpp>
     
    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::get_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 << ") ";
     
    // 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 =
    &M, &M + 1,
    CGAL::sorted_matrix_search_traits_adaptor(
    boost::bind2nd(std::greater_equal<Value>(), bound), M));
    std::cout << "Upper bound for " << bound << " is "
    << upper_bound << "." << std::endl;
     
    return 0;
    }
  • 相关阅读:
    Sqlserver 2008:sp_msforeachdb 坑爹的错误陷阱
    安装官方 Synaptics 驱动,终于解决 HP Pavilion G4 笔记本 讨厌的触摸板锁定问题!
    Sqlserver 2008+:变更数据捕获(CDC) 和 更改跟踪(CT)
    PHP.ini 性能优化
    PHP Notice: Undefined index: ... 问题的解决方案
    查询类方法代码分析
    页面跳转方法总结大全
    如何关闭searchIndexer.exe进程
    如何正确运用PHP ini_set函数
    PHP中的串行化变量和序列化对象
  • 原文地址:https://www.cnblogs.com/myboat/p/9998938.html
Copyright © 2011-2022 走看看