CGAL的分析工具、哈希映射、联合查找、修饰符

1、计时器

        CGAL提供了用于测量用户进程时间和实时时间的类。 类Timer是用于用户进程时间的版本,类Real_timer是用于实时时间的版本。

        这两个类的实例都是具有状态的对象。状态可以是运行或停止。对象的状态由 t.start() 和 t.stop() 控制。计时器计算自创建或上次重置以来经过的时间。它只计算处于运行状态的时间。时间信息以秒为单位。计时器还计算它运行的间隔数,即计算自上次重置以来 start() 成员函数的调用次数。如果重置发生在计时器运行时,则计为第一个间隔。

2、内存大小

        CGAL提供通过Memory_sizer类访问程序使用的内存大小。虚拟内存大小和驻留大小都可用(驻留大小不包括换出的内存,也不包括尚未分页的内存)。

3、分析

        CGALProfiler提供了一种在程序执行期间计算给定代码行执行次数的方法。此类Profile_counter计数器可以添加到代码的关键位置,并在程序执行结束时,将计数打印在std::err上。可以使用宏CGAL Profiler将这些计数器方便地放置在任何位置。它们默认禁用,由全局宏CGAL_PROFILE激活。

4、唯一映射哈希表

        类Unique_hash_map实现了一组唯一键和一组数据值之间的单射映射。这是使用链式哈希方案实现的,并且访问操作需要O(1)预期时间。这样的映射很有用,例如,当键是指向唯一内存位置的指针、句柄、迭代器或循环器时。在这种情况下,默认哈希函数是Handle_hash_function。

5、并查集

        CGAL还提供了一个Union_find类,该类实现了将值分割为不相交集。这是通过按等级和路径压缩的联合来实现的。在n个元素上执行m个集合操作的时间是O(nα(m,n)),其中α(m,n)是Ackermann函数的增长极其缓慢的倒数。

6、受保护地访问内部表示

        高级数据结构通常保持内部数据表示的完整性,从而保护用户。数据结构的最小完整接口允许在有效表示的范围内进行操作。

        允许直接访问内部数据表示的其他操作可能会受益。一个例子是算法中的中间步骤,其中内部表示无效。我们提出了一种以安全方式实现访问的一般方法,这样高级数据结构可以在可能妥协的算法完成其工作后保证有效性。

CGAL的分析工具、哈希映射、联合查找、修饰符_第1张图片

       抽象基类 Modifier_base 声明了一个纯虚拟成员函数 operator(),它接受内部表示类型的单个引用参数。高级接口的成员函数 delegate() 用其内部表示调用此 operator()。实际修改器实现了此虚拟函数,从而可以访问内部表示。一旦修改器完成其工作,成员函数 delegate() 就会重新控制并检查内部表示的有效性。

        总结一下,用户可以根据内部表示实现和应用任意函数,并保持保护高级接口的好处。用户提供的修改器在任何情况下都必须返回有效的内部表示,或者高级接口中的检查器被允许(并且假定)中止程序。对于由多个指针更新或整数加法组成的操作,通过虚函数调用的间接性可以忽略不计。

你可能感兴趣的:(CGAL,哈希算法,算法)