Hello 算法 1.0.0b4 C++版
高级数据结构:比如在红黑树、B 树中,我们需要知道一个节点的父节点,这可以通过在节点中保存一 个指向父节点的指针来实现,类似于双向链表。 4. 数组与链表 hello‑algo.com 60 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 后一个网页。双向链表的特性使得这种操作变得简单。 ‧ LRU 算法:在缓存淘汰算法(LRU)中,我们需要快速找到最近最少使用的数据,以及支持快速地添 数组,从而引入扩容机制。有兴趣的同学可以尝试自行实现。 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3. 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序依次处理队列中的订单。在双十一 期间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 5. 栈与队列 hello‑algo.com 81 ‧ 各类待办事项。任何需要实现“先来后到”功 你的目标是选择一组物品,使得总重量不超过载重量,且 总价值最大。如果每次都选择性价比最高(价值 / 重量)的物品,那么贪心算法在一些情况下可以得到 最优解。 4. 股票买卖问题:给定一组股票的历史价格,你可以进行多次买卖,但如果你已经持有股票,那么在卖出 之前不能再买,目标是获取最大利润。 5. 霍夫曼编码:霍夫曼编码是一种用于无损数据压缩的贪心算法。通过构建霍夫曼树,每次选择出现频率0 码力 | 343 页 | 27.39 MB | 1 年前3Hello 算法 1.1.0 C++ 版
双向链表常用于需要快速查找前一个和后一个元素的场景。 ‧ 高级数据结构:比如在红黑树、B 树中,我们需要访问节点的父节点,这可以通过在节点中保存一个指 向父节点的引用来实现,类似于双向链表。 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 后一个网页。双向链表的特性使得这种操作变得简单。 ‧ LRU 算法:在缓存淘汰(LRU)算法中,我们需要快速找到最近最少使用的数据,以及支持快速添加 组,从而引入扩容机制。有兴趣的读者可以尝试自行实现。 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序处理队列中的订单。在双十一期 间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等, 队列在这些场景中可以有效地维护处理顺序。 分数背包问题:给定一组物品和一个载重量,你的目标是选择一组物品,使得总重量不超过载重量,且 总价值最大。如果每次都选择性价比最高(价值 / 重量)的物品,那么贪心算法在一些情况下可以得到 最优解。 ‧ 股票买卖问题:给定一组股票的历史价格,你可以进行多次买卖,但如果你已经持有股票,那么在卖出 之前不能再买,目标是获取最大利润。 ‧ 霍夫曼编码:霍夫曼编码是一种用于无损数据压缩的贪心算法。通过构建霍夫曼树,每次选择出现频率0 码力 | 379 页 | 18.47 MB | 1 年前3Hello 算法 1.0.0b5 C++版
双向链表常被用于需要快速查找前一个和下一个元素的场景。 ‧ 高级数据结构:比如在红黑树、B 树中,我们需要访问节点的父节点,这可以通过在节点中保存一个指 向父节点的引用来实现,类似于双向链表。 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 后一个网页。双向链表的特性使得这种操作变得简单。 ‧ LRU 算法:在缓存淘汰算法(LRU)中,我们需要快速找到最近最少使用的数据,以及支持快速地添 数组,从而引入扩容机制。有兴趣的同学可以尝试自行实现。 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序依次处理队列中的订单。在双十一 期间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 第 5 章 栈与队列 hello‑algo.com 98 ‧ 各类待办事项。任何需要实现“先来后 分数背包问题:给定一组物品和一个载重量,你的目标是选择一组物品,使得总重量不超过载重量,且 总价值最大。如果每次都选择性价比最高(价值 / 重量)的物品,那么贪心算法在一些情况下可以得到 最优解。 ‧ 股票买卖问题:给定一组股票的历史价格,你可以进行多次买卖,但如果你已经持有股票,那么在卖出 之前不能再买,目标是获取最大利润。 ‧ 霍夫曼编码:霍夫曼编码是一种用于无损数据压缩的贪心算法。通过构建霍夫曼树,每次选择出现频率0 码力 | 377 页 | 30.69 MB | 1 年前3Hello 算法 1.0.0 C++版
双向链表常用于需要快速查找前一个和后一个元素的场景。 ‧ 高级数据结构:比如在红黑树、B 树中,我们需要访问节点的父节点,这可以通过在节点中保存一个指 向父节点的引用来实现,类似于双向链表。 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 后一个网页。双向链表的特性使得这种操作变得简单。 ‧ LRU 算法:在缓存淘汰(LRU)算法中,我们需要快速找到最近最少使用的数据,以及支持快速添加 组,从而引入扩容机制。有兴趣的读者可以尝试自行实现。 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序处理队列中的订单。在双十一期 间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等, 队列在这些场景中可以有效地维护处理顺序。 分数背包问题:给定一组物品和一个载重量,你的目标是选择一组物品,使得总重量不超过载重量,且 总价值最大。如果每次都选择性价比最高(价值 / 重量)的物品,那么贪心算法在一些情况下可以得到 最优解。 ‧ 股票买卖问题:给定一组股票的历史价格,你可以进行多次买卖,但如果你已经持有股票,那么在卖出 之前不能再买,目标是获取最大利润。 ‧ 霍夫曼编码:霍夫曼编码是一种用于无损数据压缩的贪心算法。通过构建霍夫曼树,每次选择出现频率0 码力 | 378 页 | 17.59 MB | 1 年前3Hello 算法 1.2.0 简体中文 C++ 版
双向链表常用于需要快速查找前一个和后一个元素的场景。 ‧ 高级数据结构:比如在红黑树、B 树中,我们需要访问节点的父节点,这可以通过在节点中保存一个指 向父节点的引用来实现,类似于双向链表。 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 后一个网页。双向链表的特性使得这种操作变得简单。 ‧ LRU 算法:在缓存淘汰(LRU)算法中,我们需要快速找到最近最少使用的数据,以及支持快速添加 组,从而引入扩容机制。有兴趣的读者可以尝试自行实现。 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序处理队列中的订单。在双十一期 间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等, 队列在这些场景中可以有效地维护处理顺序。 分数背包问题:给定一组物品和一个载重量,你的目标是选择一组物品,使得总重量不超过载重量,且 总价值最大。如果每次都选择性价比最高(价值 / 重量)的物品,那么贪心算法在一些情况下可以得到 最优解。 ‧ 股票买卖问题:给定一组股票的历史价格,你可以进行多次买卖,但如果你已经持有股票,那么在卖出 之前不能再买,目标是获取最大利润。 ‧ 霍夫曼编码:霍夫曼编码是一种用于无损数据压缩的贪心算法。通过构建霍夫曼树,每次选择出现频率0 码力 | 379 页 | 18.48 MB | 9 月前3Hello 算法 1.0.0b1 C++版
态数组),从而引入扩容机制。有兴趣的同学可以尝试自行实现。 5.2.3. 两种实现对比 与栈的结论一致,在此不再赘述。 5.2.4. 队列典型应用 ‧ 淘宝订单。购物者下单后,订单就被加入到队列之中,随后系统再根据顺序依次处理队列中的订单。在 双十一时,在短时间内会产生海量的订单,如何处理「高并发」则是工程师们需要重点思考的问题。 ‧ 各种待办事项。任何需要实现“先来后到”的功能,例如打印机的任务队列、餐厅的出餐队列等等。0 码力 | 187 页 | 14.71 MB | 1 年前3Hello 算法 1.0.0b2 C++版
两种实现对比 与栈的结论一致,在此不再赘述。 5. 栈与队列 hello‑algo.com 72 5.2.4. 队列典型应用 ‧ 淘宝订单。购物者下单后,订单就被加入到队列之中,随后系统再根据顺序依次处理队列中的订单。在 双十一时,在短时间内会产生海量的订单,如何处理「高并发」则是工程师们需要重点思考的问题。 ‧ 各种待办事项。任何需要实现“先来后到”的功能,例如打印机的任务队列、餐厅的出餐队列等等。0 码力 | 197 页 | 15.72 MB | 1 年前3现代C++ 教程:高速上手C++11/14/17/20
特性并不需要全部掌握,只需针对自己的使用需求和特定的应用场景,学习、查阅最适合自己的新特性 7 相关代码 第 1 章迈向现代 C++ 即可。 同时,本书在介绍这些特性的过程中,尽可能简单明了的介绍了这些特性产生的历史背景和技术需 求,这为理解这些特性、运用这些特性提供了很大的帮助。 此外,笔者希望读者在阅读本书后,能够努力在新项目中直接使用 C++17,并努力将旧项目逐步迁 移到 C++17。也算是笔者为推进现代 等特性也均 被弃用。前面提到的这些特性如果你从未使用或者听说过,也请不要尝试去了解他们,应该向新标准靠 拢,直接学习新特性。毕竟,技术是向前发展的。 1.2 与 C 的兼容性 出于一些不可抗力、历史原因,我们不得不在 C++ 中使用一些 C 语言代码(甚至古老的 C 语言代 码),例如 Linux 系统调用。在现代 C++ 出现之前,大部分人当谈及『C 与 C++ 的区别是什么』时, 普遍 out.get() << ".\n"; }(); 不必担心,本书的后续章节将为你介绍这一切。 进一步阅读的参考文献 • C++ 语言导学. Bjarne Stroustrup • C++ 历史 • C++ 特性在 GCC/Clang 等编译器中的支持情况 • C++98 与 C99 之间的区别 11 第 2 章语言可用性的强化 第 2 章语言可用性的强化 当我们声明、定义一个0 码力 | 83 页 | 2.42 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
install ninja (有趣的事实: CMake 也可以通过 pip install cmake 安装……) • 事实上, MSBuild 是单核心的构建系统, Makefile 虽然多核心但因历史兼容原因效率一 般。 • 而 Ninja 则是专为性能优化的构建系统,他和 CMake 结合都是行业标准了。 Ninja 和 Makefile 简单的对比 性能上: Ninja > Makefile vimrc 分享 github.com/archibate/vimrc 第 9 章:分支与判断 BOOL 类型的值 • 通常来说 BOOL 类型的变量只有 ON/OFF 两种取值。 • 但是由于历史原因, TRUE/FALSE 和 YES/NO 也可以表示 BOOL 类型。 • 个人建议同学们始终使用 ON/OFF 避免混淆。 • 当然 ON/NO 好像也挺顺口的 x • https://stackoverflow no-in-generator-expressions • https://cmake.org/cmake/help/v3.7/command/if.html if 的特点:不需要加 ${} ,会自动尝试作为变量名求值 由于历史原因, if 的括号中有着特殊的语法,如果是一个字符串,比如 MYVAR ,则他会先 看是否有 ${MYVAR} 这个变量。如果有这个变量则会被替换为变量的值来进行接下来的比较, 否则保持原来字符串不变。0 码力 | 166 页 | 6.54 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming
。如果预判成功,的确走了分支 A ,那么只会浪费 10% 的算力; 如果预判失败,最后走了分支 B ,那就不得不把预先执行分支 A 的数据全部删了,浪费 90% 的算力。这就是 CPU 的分支预测,根据历史的分支记录总结经验,不断调整两个分 支预执行的比例。其实就像训练神经网络一样,一直喂给他正确的数据,他就越来越自信。 • 随着 CPU 预判分支 A 成功的次数越来越多, CPU 对自己的结果就越来越自信,并进一 得出的,或者说他存在内存中,随时可 能被改写, CPU 难以预判执行到 call [pointer] 的时候这个指针会指向哪里,无法预取。 • CPU 伺候函数指针的方法和条件跳转一样,也是根据历史记录总结经验,多次执行后 CPU 会根据之前每次跳转的地址推测下一次可能也是同样的地址,并试图预取这个地址。 • 例如:定义一个函数指针 void (*func)(int x); 则对他的调用0 码力 | 47 页 | 8.45 MB | 1 年前3
共 20 条
- 1
- 2