- 博客(8)
- 收藏
- 关注
原创 数据结构与算法分析C-第6章优先队列(堆)
队列先进后出的特点可以用来管理任务,但是队列中的任务没有优先级,只能按循序执行。但是类似于进程调度、外部排序、贪婪算法这样的程序,并不能依赖先来后到的顺序,==优先队列(priority queue)==就是用来处理这样的应用的。二叉堆(binary heap),普遍用于优先队列,因此有时也直接用堆(heap)来描述优先队列。正如AVL树一样,对堆的一次操作可能破坏这两个性质中的一个,因此,堆的操作必须要到堆的所有性质都被满足时才能终止。有可能的例外是在底层,底层上的元素从左到右填入。
2025-07-03 19:06:47
629
原创 数据结构与算法分析C-第5章 散列
散列表可以用来以常数平均时间实现Insert和Find操作。当使用散列表时,注意诸如装填因子这样的细节是特别重要的,否则时间界将不再有效。当关键字不是短串或整数时,仔细选择散列函数也是很重要的。编译器使用散列表跟踪源代码中声明的变量。这种数据结构叫做符号表(symboltable)。散列表是这种问题的理想应用,因为只有Insert和Find要运行。标识符一般都不长,因此其散列函数能够迅速被算出。散列表对于任何图论问题都是有用的,在图论问题中,节点都有实际的名字而不是数字。
2025-06-28 16:47:24
869
原创 数据结构与算法分析C-第4章 树
对于大量输入的数据,链表的线性访问时间太慢,不宜使用。树的大部分操作的运行平均时间均为O(LogN)。树的定义方法:根:在上图的树中,节点A是这颗树的根。树叶(leaf):节点F有一个父亲A并且有儿子K、L和M。每一个节点可以有任意多个儿子,也可能是零个儿子。没有儿子的节点称为树叶;上图中的树叶是B、C、H、I、P、Q、K、L、M和N。兄弟(sibling):具有相同父亲的节点为兄弟;因此,K、L和M都是兄弟。用类似的方法可以定义祖父(grandparent)和孙子(grandchild)关系。路径(
2025-06-24 18:45:29
1759
原创 std::addressof
在 GCC 和 Clang 的实现中,当存在内置函数 __builtin_addressof 时,std::addressof 使用这个内置函数来获取参数的地址。在C++中,std::addressof 是一个模板函数,它的作用是获取对象或函数的实际地址,即使在类重载了地址操作符 & 的情况下也能正常工作。在这个示例中,尽管 A 类重载了 & 操作符,std::addressof 仍然能够返回对象 a 的真实地址。这证明了 std::addressof 在处理重载了 & 操作符的对象时的有效性和必要性。
2025-06-09 10:00:52
327
原创 数据结构与算法分析C-第2章 算法分析
定义:如果存在正常数c和n0,使得当N≥n0时T(N)≤cf(N),则记为T(N) = O(f(N))。定义:如果存在正常数c和n0,使得当N≥n0时T(N)≥cg(N),则记为T(N) = Ω(g(N))。定义:T(N) = Θ(h(N)),当且仅当T(N) = O(h(N))且T(N) = Ω(h(N))。定义:如果T(N) = O(p(N))且T(N) ≠ Θ(p(N)),则T(N) = o(p(N))。
2025-06-08 16:27:12
664
原创 QT开发-日志管理
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S
2025-04-28 11:32:10
610
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人