Hello 算法 1.2.0 简体中文 C++ 版Hello 算法 C++ 语言版 作者:靳宇栋(@krahets) 代码审阅:宫兰景(@Gonglja) Release 1.2.0 2024‑12‑06 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单、 强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材 也是一种常见做法,但对于面向求职的人来说,毕业论文、投递简历、准备笔试和面试已经消耗了大部分精 力,啃厚重的书往往变成了一项艰巨的挑战。 如果你也面临类似的困扰,那么很幸运这本书“找”到了你。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 O 我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention.”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.1.0 C++ 版Hello 算法 C++ 语言版 作者:靳宇栋(@krahets) 代码审阅:宫兰景(@Gonglja) Release 1.1.0 2024‑04‑15 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单、 强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材 也是一种常见做法,但对于面向求职的人来说,毕业论文、投递简历、准备笔试和面试已经消耗了大部分精 力,啃厚重的书往往变成了一项艰巨的挑战。 如果你也面临类似的困扰,那么很幸运这本书“找”到了你。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 O 我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention.”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版Hello 算法 C++ 语言版 作者:靳宇栋(@krahets) 代码审阅:宫兰景(@Gonglja) Release 1.0.0 2024‑02‑09 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单、 强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材 也是一种常见做法,但对于面向求职的人来说,毕业论文、投递简历、准备笔试和面试已经消耗了大部分精 力,啃厚重的书往往变成了一项艰巨的挑战。 如果你也面临类似的困扰,那么很幸运这本书“找”到了你。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 O 我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention.”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请 各位老师和同学批评指正。 本书中的代码附有可一键运行的源文件,托管于 github0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.0.0b5 C++版Hello 算法 C++ 语言版 靳宇栋(Krahets) Release 1.0.0b5 2023‑09‑10 序 两年前,我在力扣上分享了《剑指 Offer》系列题解,受到了许多同学的喜爱和支持。在与读者的交流期间, 最常收到的一个问题是“如何入门学习算法”。我逐渐对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单直接且有效。刷题就如同玩“扫雷”游戏,自学能力强的同 另一方面,展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,在输入 数据量较小时,算法 A 的运行时间比算法 B 更少;而输入数据量较大时,测试结果可能恰恰相反。因此,为 了得到有说服力的结论,我们需要测试各种规模的输入数据,而这需要耗费大量的计算资源。 2.1.2 理论估算 由于实际测试具有较大的局限性,我们可以考虑仅通过一些计算来评估算法的效率。这种估算方法被称为 「渐近复杂度分析 capacity 观察以上公式,当哈希表容量 capacity 固定时,哈希算法 hash() 决定了输出值,进而决定了键值对在哈希 表中的分布情况。 这意味着,为了减小哈希冲突的发生概率,我们应当将注意力集中在哈希算法 hash() 的设计上。 6.3.1 哈希算法的目标 为了实现“既快又稳”的哈希表数据结构,哈希算法应包含以下特点。 ‧ 确定性:对于相同的输入,哈希算法应始终产生相同的输出。这样才能确保哈希表是可靠的。0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0b4 C++版Hello 算法 C++ 语言版 靳宇栋(Krahets) Release 1.0.0b4 2023‑07‑26 序 两年前,我在力扣上分享了《剑指 Offer》系列题解,受到了许多朋友的喜爱与支持。在此期间,我回答了众 多读者的评论问题,其中最常见的一个问题是“如何入门学习算法”。我逐渐也对这个问题产生了浓厚的兴 趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单直接且有效。然而,刷题就如同玩“扫雷”游戏,自学能力 展开完整测试非常耗费资源。随着输入数据量的变化,算法会表现出不同的效率。例如,输入数据量较小时, 算法 A 的运行时间可能短于算法 B;而输入数据量较大时,测试结果可能相反。因此,为了得到有说服力的 结论,我们需要测试各种规模的输入数据,这样需要占用大量的计算资源。 理论估算 由于实际测试具有较大的局限性,我们可以考虑仅通过一些计算来评估算法的效率。这种估算方法被称为 「复杂度分析 Complexity capacity 观察以上公式,当哈希表容量 capacity 固定时,哈希算法 hash() 决定了输出值,进而决定了键值对在哈希 表中的分布情况。 这意味着,为了减小哈希冲突的发生概率,我们应当将注意力集中在哈希算法 hash() 的设计上。 6. 散列表 hello‑algo.com 107 6.3.1. 哈希算法的目标 为了实现“既快又稳”的哈希表数据结构,哈希算法应包含以下特点: ‧0 码力 | 343 页 | 27.39 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming的所有指令和数据删了 (浪费了 50% 的算力)。这就是说 CPU 第一次遇见一个分支时,两个分支都会被预执行 。 • 同一段程序被多次执行后,如果每次都是分支 A ,下一次 CPU 就会总结经验,预判到下 一次应该也是分支 A ,并且把 90% 的流水线用于预先执行分支 A 的剧本, 10% 的流水 线用于预先执行分支 B 。如果预判成功,的确走了分支 A ,那么只会浪费 10% 的算力; 如果预判失败,最后走了分支 如果预判失败,最后走了分支 B ,那就不得不把预先执行分支 A 的数据全部删了,浪费 90% 的算力。这就是 CPU 的分支预测,根据历史的分支记录总结经验,不断调整两个分 支预执行的比例。其实就像训练神经网络一样,一直喂给他正确的数据,他就越来越自信。 • 随着 CPU 预判分支 A 成功的次数越来越多, CPU 对自己的结果就越来越自信,并进一 步加大预执行分支 A 所占的比例,从最初的 50% 到 60%0 码力 | 47 页 | 8.45 MB | 1 年前3
《深入浅出MFC》2/e本书分为四大篇。第一篇提出学习MFC 程序设计之前的必要基础,包括Windows 程序的 基本观念以及C++ 的高阶议题。「学前基础」是相当主观的认定,不过,基于我个人的学习 经验以及教学经验,我的挑选应该颇具说服力。第二篇介绍Visual C++ 整合环境开发工具。 本篇只不过是提纲挈领而已,并不企图取代Visual C++ 使用手册。然而对于软件使用的老 手,此篇或已足以让您掌握Visual C++ 整合 类别库,附含在Borland C++ 之中。 Application Framework - 在对象导向领域中,这是一个专有名词。关于它的意义,本书 第5章有不少介绍。基本上它可以说是一个更有凝聚力,关联性更强的类别库。并不是 每一套C++ 类别库都有资格称为Application Framework,不过MFC 和OWL 都可入 列,IBM 的Open Class Library 也是。Application 利用各种同步机制(synchronous mechanism)如critical section、mutex、semaphore、 event,可以重新开发一套支持多执行线程的runtime 函数库。问题是,加上这样的能 力,可能导至程序代码大小和执行效率都遭受不良波及-- 即使你只激活了一个执行 线程。 Visual C++ 的折衷方案是提供两种版本的C runtime 函数库。一种版本给单线程程序 使用,一种版0 码力 | 1009 页 | 11.08 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 C++ 版Release 1.2.0 2024‑12‑06 序 兩年前,我在力扣上分享了“劍指 Offer”系列題解,受到了許多讀者的鼓勵與支持。在與讀者交流期間,我 最常被問到的一個問題是“如何入門演算法”。漸漸地,我對這個問題產生了濃厚的興趣。 兩眼一抹黑地刷題似乎是最受歡迎的方法,簡單、直接且有效。然而刷題就如同玩“踩地雷”遊戲,自學能 力強的人能夠順利將地雷逐個排掉,而基礎不足的人很可能被炸得焦頭爛額,並在挫折中步步退縮。通讀教 我深深認同費曼教授所言:“Knowledge isn’t free. You have to pay attention.”從這個意義上看,這本 書並非完全“免費”。為了不辜負你為本書所付出的寶貴“注意力”,我會竭盡所能,投入最大的“注意力” 來完成本書的創作。 本人自知學疏才淺,書中內容雖然已經過一段時間的打磨,但一定仍有許多錯誤,懇請各位老師與同學批評 指正。 本書中的程式碼附有可一鍵執行的原始檔,託管於 github 事實上,在電腦問世之前,演算法和資料結構就已經存在於世界的各個角落。早期的演算法相對簡單,例如 古代的計數方法與工具製作步驟等。隨著文明的進步,演算法逐漸變得更加精細和複雜。從巧奪天工的匠人 技藝、到解放生產力的工業產品、再到宇宙運行的科學規律,幾乎每一件平凡或令人驚嘆的事物背後,都隱 藏著精妙的演算法思想。 同樣,資料結構無處不在:大到社會網絡,小到地鐵路線,許多系統都可以建模為“圖”;大到一個國家,小0 码力 | 379 页 | 18.79 MB | 10 月前3
jsc::chunk_evenly Range Adaptor for Distributing Work Across Taskschange range adaptor 二 了 (6) Number of instructions & branches 力 std: :vievs::chunkO) 30 大 jsc::chunk_evenly(O) 力 std: :views::chunk() 国 jsc::chunk_evenly(O) 120 25 100 20 80 15 600 码力 | 1 页 | 1.38 MB | 6 月前3
Hello 算法 1.0.0b1 C++版Hello 算法 C++ 语言版 靳宇栋(Krahets) Release 1.0.0b1 2023‑03‑01 序 两年前,我在力扣上分享了《剑指 Offer》系列题解,受到了很多小伙伴的喜爱与支持。在此期间,我也回复 了许多读者的评论问题,遇到最多的问题是“如何入门学习算法”。我渐渐也对这个问题好奇了起来。 两眼一抹黑地刷题应该是最受欢迎的方式,简单粗暴且有效。然而,刷题就如同玩“扫雷”游戏,自学能力强 github.com/krahets/hello‑algo 仓库。动画在 PDF 内的展示 效果有限,可前往 hello‑algo.com 网页版获得更好的阅读体验。 致谢 本书在开源社区的群策群力下逐步成长,感谢每一位撰稿人,是他们的无私奉献让这本书变得更好,他 们是(按照 GitHub 自动生成的顺序):krahets, justin‑tse, sjinzh, Reanon, nuomi1 展开完整测试非常耗费资源。随着输入数据量的大小变化,算法会呈现出不同的效率表现。比如,有可能输入 数据量较小时,算法 A 运行时间短于算法 B ,而在输入数据量较大时,测试结果截然相反。因此,若想要达 到具有说服力的对比结果,那么需要输入各种体量数据,这样的测试需要占用大量计算资源。 理论估算 既然实际测试具有很大的局限性,那么我们是否可以仅通过一些计算,就获知算法的效率水平呢?答案 是肯定的,我们将此估算方法称为「复杂度分析0 码力 | 187 页 | 14.71 MB | 1 年前3
共 15 条
- 1
- 2













