小编sim*_*onz的帖子

T树相对于B +/-树有什么优势?

我已经探索了T树和B-/B +树的定义.从网上的论文中我了解到B-tree在分层内存中表现更好,例如磁盘驱动器和缓存内存.

我无法理解的是为什么T树甚至用于平坦记忆?

它们被宣传为AVL树的节省空间的替代品.

在最坏的情况下,T树的所有叶节点只包含一个元素,并且所有内部节点都包含允许的最小量,接近满.这意味着平均只使用分配空间的一半.除非我弄错了,当B树的节点半满时,这与B树的最坏情况相同.

假设两个树都在节点中本地存储密钥,但是使用指针来引用记录,唯一的区别是B树必须存储每个分支的指针.这通常会导致高达50%的开销或更少(超过T树),具体取决于密钥的大小.实际上,这接近于AVL树中预期的开销,假设没有父指针,嵌入在节点中的记录,嵌入在记录中的键.这是阻止我们使用B树的预期效率增益吗?

T树通常在AVL树之上实现.AVL树比B树更平衡.这可以与T树的应用相关联吗?

b-tree binary-search-tree data-structures

12
推荐指数
1
解决办法
2071
查看次数

如何在Doxygen评论中直接包含LaTeX片段?

我希望能够通过一些合适的编辑器在外部编辑一些Doxygen注释的LaTeX部分.我只会在复杂的环境中使用它.为此,我想我可以使用仅限LaTeX的文件,并将它们包含在Doxygen中.我没有创建Doxygen的别名\begin,并\end进行语法兼容.

(例如,我知道如何设置Emacs/AUCTex以使用没有前导码和文档结构的LaTeX片段.)

有没有办法在Doxygen评论中包含.tex文件的内容?我寻找类似的东西\htmlinclude,但对于TeX文件.考虑到我对只有TeX外部源的要求,有没有办法模拟功能?

latex doxygen

5
推荐指数
1
解决办法
3080
查看次数

在C++中是否有一种可移植的替代指针关系比较?

我缺乏语言的行业经验.但是在业余时间,我遇到了几个需要比较指针的地方,最好是标准定义的行为.

第一种情况,如果我决定在我的应用程序中使用有序二叉树作为容器(而不是哈希表)并且我希望相等是对象的标识(即相等意味着相同的实例),那么我发现没有可移植的方法来做到这一点.

其次,如果我想测试"完整对象"和它们的子对象之间的包含关系,我似乎再没有可移植的方法.那就是如果我有两个void*指针"p"和"q",并且我有"q"所指向的对象的大小,我看不出来测试"p"是否是非静态成员变量"q"与否.我没有从标准中的第5.9段("关系运营商")中找到鼓励.例如,后一种情况出现在这个提升论坛帖子的垃圾收集器中.我喜欢这个一般的想法并开始探索它,但是某些部分似乎以不可移植的方式使用指针和分配语义.

那就是我想知道如何contains从以下代码中获取该函数的可移植性:

#include <stddef.h>
#include <assert.h>

struct A {
    int x;
} a;

struct B {
    int y;
} b;

bool contains(const void *outer, size_t size, const void *inner)
{
    return (outer <= inner) &&
        (inner < static_cast<const char *>(outer) + size);
}

int main()
{
    assert(contains(&a, sizeof(a), &a.x));
    assert(contains(&b, sizeof(b), &b.y));
    assert(!contains(&a, sizeof(a), &b.y));
    assert(!contains(&b, sizeof(b), &a.x));
}
Run Code Online (Sandbox Code Playgroud)

谢谢和最好的问候.

PS:
好的,在再次查阅标准之后,我看到它明确地说明了,正如GMan在他的回答中所说的那样less,函子如less_equal指针和提供指针的总排序.我想这也暗示顺序将与内置的比较符一致<<=,但是这点可以更迂腐解决.当指针不指向同一数组或同一对象的子对象时,内置运算符是不可预测的.我的意思是,这个总顺序中的独特性测试是什么 - 指针的二进制表示?例如,如果没有明确定义的方式与内置运算符进行比较,那么void*指针的总顺序中的不相同是什么意思? …

c++ comparison pointers

1
推荐指数
1
解决办法
223
查看次数