Hello 算法 1.2.0 简体中文 Dart 版——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 能够帮助到你! i 目 录 第 0 章 前言 1 0.1 关于本书 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 第 16 章 附录 361 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 16.2 一起参与创作 . .0 码力 | 378 页 | 18.46 MB | 10 月前3
Hello 算法 1.0.0 Dart版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 第 16 章 附录 363 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 16.2 一起参与创作 . . 你回顾与梳理算法知识体系,仓库源代码可 以当作“刷题工具库”或“算法字典”来使用。 若你是算法“大神”,我们期待收到你的宝贵建议,或者一起参与创作。 � 前置条件 你需要至少具备任一语言的编程基础,能够阅读和编写简单代码。 0.1.2 内容结构 本书的主要内容如图 0‑1 所示。 ‧ 复杂度分析:数据结构和算法的评价维度与方法。时间复杂度和空间复杂度的推算方法、常见类型、示 例等。 专有名词和有特指含义的词句会使用“引号” 标注,以避免歧义。 ‧ 重要名词、重点内容和总结性语句会 加粗,这类文字值得特别关注。 ‧ 当涉及编程语言之间不一致的名词时,本书均以 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等0 码力 | 377 页 | 17.56 MB | 1 年前3
Hello 算法 1.1.0 Dart版——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 能够帮助到你! i 目 录 第 0 章 前言 1 0.1 关于本书 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 第 16 章 附录 361 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 16.2 一起参与创作 . .0 码力 | 378 页 | 18.45 MB | 1 年前3
Hello 算法 1.0.0b5 Dart版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 第 16 章 附录 367 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 16.2 一起参与创作 . . 助您回顾与梳理算法知识体系,仓库源代码可以 被当作“刷题工具库”或“算法字典”来使用。 若您是算法大神,我们期待收到您的宝贵建议,或者一起参与创作。 � 前置条件 您需要至少具备任一语言的编程基础,能够阅读和编写简单代码。 0.1.2 内容结构 本书主要内容如图 0‑1 所示。 ‧ 复杂度分析:数据结构和算法的评价维度与方法。时间复杂度、空间复杂度的推算方法、常见类型、示 例等。 括号标注,例如「数组 array」 。建议记住它们,以便阅读文献。 ‧ 加粗的文字 表示重点内容或总结性语句,这类文字值得特别关注。 ‧ 当涉及到编程语言之间不一致的名词时,本书均以 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等0 码力 | 376 页 | 30.67 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Dart 版res = fib(n - 1) + fib(n - 2); // 返回結果 f(n) return res; } 觀察以上程式碼,我們在函式內遞迴呼叫了兩個函式,這意味著從一個呼叫產生了兩個呼叫分支。如圖 2‑6 所示,這樣不斷遞迴呼叫下去,最終將產生一棵層數為 ? 的遞迴樹(recursion tree)。 圖 2‑6 費波那契數列的遞迴樹 從本質上看,遞迴體現了“將問題分解為更小子問題”的思維範式,這種分治策略至關重要。 com 212 迴圈完成後,? 指向最左邊的 target ,? 指向首個小於 target 的元素,因此索引 ? 就是插入點。 圖 10‑6 二分搜尋重複元素的插入點的步驟 觀察以下程式碼,判斷分支 nums[m] > target 和 nums[m] == target 的操作相同,因此兩者可以合併。 即便如此,我們仍然可以將判斷條件保持展開,因為其邏輯更加清晰、可讀性更好。 第 10 章 時,跳過所有已被選擇的節點,即剪枝。 如圖 13‑6 所示,假設我們第一輪選擇 1 ,第二輪選擇 3 ,第三輪選擇 2 ,則需要在第二輪剪掉元素 1 的分 支,在第三輪剪掉元素 1 和元素 3 的分支。 圖 13‑6 全排列剪枝示例 第 13 章 回溯 www.hello‑algo.com 283 觀察圖 13‑6 發現,該剪枝操作將搜尋空間大小從 ?(??) 減小至 ?(?!) 。 20 码力 | 378 页 | 18.77 MB | 10 月前3
共 5 条
- 1













