Hello 算法 1.0.0b2 C++版yabo083. 本书的代码审阅工作由 justin‑tse, krahets, nuomi1, Reanon, sjinzh 完成,感谢他们的辛勤付出! 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读。” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 链表、栈、队列、 散列表、树、堆、图等数据结构,内容包括定义、优劣势、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:查找算法、排序算法、搜索与回溯、动态规划、分治算法,内容包括定义、使用场景、优劣势、时 空效率、实现方法、示例题目等。 0. 写在前面 hello‑algo.com 2 Figure 0‑1. Hello 算法内容结构 0.1.3. 致谢 本书的成书过程中,我获得了许多人的帮助,包括但不限于: 算法学习路线 总体上看,我认为可将学习数据结构与算法的过程分为三个阶段。 1. 算法入门。熟悉各种数据结构的特点、用法,学习各种算法的原理、流程、用途、效率等。 2. 刷算法题。可以先从热门题单开刷,推荐剑指 Offer、LeetCode Hot 100,先积累至少 100 道题量,熟 悉大多数的算法问题。刚开始刷题时,“遗忘”是最大的困扰点,但这是很正常的,请不要担心。学习中 有一种概念叫“周0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.1.0 C++ 版com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 。数组、链表、栈、队列、哈希表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤 和示例问题等。 第 0 章 前言 hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 文章。这些作品为本书提供了优秀的范本,确保 了本书内容的准确性与品质。在此感谢所有老师和前辈的杰出贡献! 本书倡导手脑并用的学习方式,在这一点上我深受《动手学深度学习》的启发。在此向各位读者强烈推荐这 本优秀的著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 Tip 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.10 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0b1 C++版yabo083. 本书的代码审阅工作由 justin‑tse, krahets, nuomi1, Reanon, sjinzh 完成,感谢他们的辛勤付出! 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读。” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 链表、栈、队列、 散列表、树、堆、图等数据结构,内容包括定义、优劣势、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:查找算法、排序算法、搜索与回溯、动态规划、分治算法,内容包括定义、使用场景、优劣势、时 空效率、实现方法、示例题目等。 0. 写在前面 hello‑algo.com 2 Figure 0‑1. Hello 算法内容结构 0.1.3. 致谢 本书的成书过程中,我获得了许多人的帮助,包括但不限于: 算法学习路线 总体上看,我认为可将学习数据结构与算法的过程分为三个阶段。 1. 算法入门。熟悉各种数据结构的特点、用法,学习各种算法的原理、流程、用途、效率等。 2. 刷算法题。可以先从热门题单开刷,推荐剑指 Offer、LeetCode Hot 100,先积累至少 100 道题量,熟 悉大多数的算法问题。刚开始刷题时,“遗忘”是最大的困扰点,但这是很正常的,请不要担心。学习中 有一种概念叫“周0 码力 | 187 页 | 14.71 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 www.hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 。数组、链表、栈、队列、哈希表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤 和示例问题等。 第 0 章 前言 www.hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 文章。这些作品为本书提供了优秀的范本,确保 了本书内容的准确性与品质。在此感谢所有老师和前辈的杰出贡献! 本书倡导手脑并用的学习方式,在这一点上我深受《动手学深度学习》的启发。在此向各位读者强烈推荐这 本优秀的著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 Tip 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.10 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b4 C++版krahets, nuomi1, Reanon, sjinzh 完 成(按照首字母顺序排列)。感谢他们付出的时间与精力,正是他们确保了各语言代码的规范与统一。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读。” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 。数组、链表、栈、队列、散列表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤、 示例题目等。 0. 前言 hello‑algo.com 2 Figure 0‑1. Hello 算法内容结构 0.1.3. 致谢 在本书的创作过程中,我得到了许多人的帮助,包括但不限于: 文章。这些作品为本书提供了优秀的范本,确保 了本书内容的准确性与品质。在此感谢所有老师和前辈们的杰出贡献! 本书倡导手脑并用的学习方式,在这一点上深受《动手学深度学习》的启发。在此向各位读者强烈推荐这本 优秀著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2. 如何使用本书 � 为了获得最佳的阅读体验,建议您通读本节内容。 0. 前言 hello‑algo0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0 C++版github.com/krahets/hello‑algo 仓库。动画在 PDF 内的 展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 。数组、链表、栈、队列、哈希表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤 和示例问题等。 第 0 章 前言 hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 文章。这些作品为本书提供了优秀的范本,确保 了本书内容的准确性与品质。在此感谢所有老师和前辈的杰出贡献! 本书倡导手脑并用的学习方式,在这一点上我深受《动手学深度学习》的启发。在此向各位读者强烈推荐这 本优秀的著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 � 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.0.0b5 C++版com/krahets/hello‑algo 仓库。动画在 PDF 内的 展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读。” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 。数组、链表、栈、队列、哈希表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤、 示例题目等。 第 0 章 前言 hello‑algo.com 3 图 0‑1 Hello 算法内容结构 0.1.3 致谢 在本书的创作过程中,我得到了许多人的帮助,包括但不限于: 文章。这些作品为本书提供了优秀的范本,确保 了本书内容的准确性与品质。在此感谢所有老师和前辈们的杰出贡献! 本书倡导手脑并用的学习方式,在这一点上深受《动手学深度学习》的启发。在此向各位读者强烈推荐这本 优秀著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 � 为了获得最佳的阅读体验,建议您通读本节内容。 第 0 章 前言0 码力 | 377 页 | 30.69 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理已经初始化时,将当前 Pig 销毁,同时将另一个 Pig 拷贝进 来。 • Pig pig; // 无参构造 • pig = pig2; // 拷贝赋值 • 追求性能时推荐用拷贝构造,因为可以避免一次无参构造,拷贝赋值是出于需要临时修改 对象的灵活性需要。 • 这个函数同样可以由 = delete 和 = default 控制是否默认生成。 • 注: return 子窗口并不“拥有”父窗口。 • 其实主要是一个父窗口可以有多个子窗口 ,只有规定子窗口从属于父窗口才能解决 引用计数的问题…… 循环引用:解决方案 2 • 还有一种更适应“父子窗口”这一场景的解决 方案。刚才提到原始指针的应用场景是“当 该对象不属于我,但他释放前我必然被释 放时”。这里我们可以发现父窗口的释放必 然导致子窗口的释放。因此我们完全可以 把 m_parent 变成原始指针。 • 这样也不需要 这样也不需要 weak_ptr 判断是否 expired() 了。 循环引用:解决方案 2 (续) • 还可以更好!刚才提到 unique_ptr 的应 用场景是“当该对象仅仅属于我时”。既然都 用了原始指针(假定他释放前我必然被释 放)。因为因此我们完全可以把 m_child 变成一个标志这“完全所有权”的 unique_ptr 。 • 这样也不需要 shared_ptr 维护一个原子0 码力 | 96 页 | 16.28 MB | 1 年前3
现代C++ 教程:高速上手C++11/14/17/20代之前产生 C++ 的相关特性做了非常相对全 面的介绍,读者可以自行根据下面的目录选取感兴趣的内容进行学习,快速熟悉需要了解的内容。这些 特性并不需要全部掌握,只需针对自己的使用需求和特定的应用场景,学习、查阅最适合自己的新特性 7 相关代码 第 1 章迈向现代 C++ 即可。 同时,本书在介绍这些特性的过程中,尽可能简单明了的介绍了这些特性产生的历史背景和技术需 求,这为理解这些特性、运用这些特性提供了很大的帮助。 表达式是现代 C++ 中最重要的特性之一,而 Lambda 表达式,实际上就是提供了一个类 似匿名函数的特性,而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用 的。这样的场景其实有很多很多,所以匿名函数几乎是现代编程语言的标配。 基础 Lambda 表达式的基本语法如下: [捕获列表](参数列表) mutable(可选) 异常属性 -> 返回类型 { // 函数体 tuple_index(new_tuple, i) << std::endl; 总结 本章简单介绍了现代 C++ 中新增的容器,它们的用法和传统 C++ 中已有的容器类似,相对简单, 可以根据实际场景丰富的选择需要使用的容器,从而获得更好的性能。 std::tuple 虽然有效,但是标准库提供的功能有限,没办法满足运行期索引和迭代的需求,好在我 们还有其他的方法可以自行实现。 第 5 章智能指针与内存管理0 码力 | 83 页 | 2.42 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅:用标准库的递归锁 std::recursive_mutex 解决 2 :创建另一个任务域,这样不同域之间就不会窃取工作 解决 3 :同一个任务域,但用 isolate 隔离,禁止其内部的工作被窃取 (推荐) 第 5 章:任务分配 https://link.springer.com/chapter/10.1007%2F978-1-4842-4398-5_12 并行:如何均匀分配任务到每个线程? • 因为 tbb::concurrent_vector 内存不连续 的特点,通过索引访问,比通过迭代器访 问的效率低一些。 • 因此不推荐像 a[i] 这样通过索引随机访问 其中的元素, *(it + i) 这样需要迭代器跨步 访问的也不推荐。 推荐通过迭代器顺序访问 • 最好的方式是用 begin() 和 end() 的迭代 器区间,按顺序访问。 parallel_for 也支持迭代器 94 倍 并行筛选 4 如果需要筛选后的数据是连续的,即 a 是个 std::vector ,这时就需要用 mutex 锁定,避免数据竞争 。 加速比: 4.92 倍 并行筛选 5 (小彭老师推荐方案) 先对 a 预留一定的内存,避免频繁扩容影响性能。 加速比: 5.98 倍 并行筛选 6 使用 tbb::spin_mutex 替代 std::mutex 。 spin_mutex (基0 码力 | 116 页 | 15.85 MB | 1 年前3
共 25 条
- 1
- 2
- 3













