【发布时间】:2018-12-19 13:54:45
【问题描述】:
示例:B+ 树
给定树中的 N 个元组,每个内部节点最多 di 子节点和每个叶子最多 dl 值,如果我没记错的话,B+ 树的最小高度将是 h = ceil(log_di((N + dl - 1) / dl))。
仅当/ 表示整数除法并且我可以将(N + dl - 1) / dl 替换为static_cast<double>(N) / dl 时才适用。
#include <cmath>
int minHeight(int N)
{
constexpr int di = 256;
constexpr int dl = 255;
return std::lround(std::ceil(log((N + (dl - 1)) / dl) / log(di)));
}
我的兴趣在于模式:(N + d - 1) /d。这似乎在计算大于或等于被除数 (N) 的除数 (d) 的最小倍数时使用。
问题
- 此模式是否有与之相关的名称?在设计数据结构和算法时有多常见?
- 如果不常见,是否有另一种方法可以用 C++ 编写此代码以更易于理解?
【问题讨论】:
标签: c++ integer-division