#优先队列 #元素 #数据结构 #离散 #优化 #帕累托 #集合

do_util

离散优化实用库(数据结构)

1个不稳定版本

0.1.0 2022年2月7日

#2164 in 算法

MIT 协议

54KB
1K SLoC

离散优化实用

实现各种有用的数据结构用于离散优化。这个crate正在积极开发中,欢迎提交Pull requests :)。

集合数据结构

各种数据结构以有效地维护集合

  • 稀疏集合: 维护正整数的集合。允许O(1)的插入、删除、计数、删除除一个元素外的所有元素。这种数据结构创建成本较高,但操作非常快。更多信息请参阅这篇文章

基准测试

子集/超集查询

允许快速执行子集或超集查询。

  • 列表: 简单的列表存储。遍历整个列表以查找子集/超集
  • 集合Trie: 更多信息请参阅这篇文章。对于子集查询非常快,对于超集查询较慢。如果集合中的元素数量较少,则效率较高。
  • HAT-trie: 更多信息请参阅这篇文章

基准测试

帕累托优先队列

用于在n维帕累托前沿上快速执行插入/删除/查找最小值/支配检查的数据结构。每个元素还提供了一个用于最小(分别是最小值)提取的"指南"值。

深受优秀的帕累托库(Python和C++) [1] 启发。每个帕累托前沿存储元素,使得没有元素支配另一个元素。主要区别在于,这个crate中的数据结构允许快速查找最小元素。此外,使用这个crate,可以定义比维度支配更一般的支配规则。

  • 列表帕累托前沿: 简单的数据结构,使用向量简单地存储元素。这个数据结构很简单,通常适用于较小的
  • Kd树: 每个节点包含一个元素并将空间分为两部分的树结构。对于许多点,这种数据结构效率很高。
  • 点区域树: 每个节点将空间分为2**d个子区域的树结构。对于许多点,这种数据结构效率很高,但需要对维度进行初始的下限/上限约束。
  • R树: 存储在边界框中的元素的数据结构。边界框可能相交。
  • R*-tree

基准测试

随机n维点。

参考文献

Alan Freitas,基于空间数据结构的面向用户的Pareto前沿和Pareto存档,群体和进化计算,第65卷,2021年,100915,ISBN 2210-6502,https://doi.org/10.1016/j.swevo.2021.100915。(https://www.sciencedirect.com/science/article/pii/S2210650221000766

无运行时依赖