Hello 算法 1.0.0b1 Swift版
Int) { val = x height = 0 } } 「结点高度」是最远叶结点到该结点的距离,即走过的「边」的数量。需要特别注意,叶结点的高度为 0 ,空结 点的高度为 ‑1。我们封装两个工具函数,分别用于获取与更新结点的高度。 // === File: avl_tree.swift === /* 获取结点高度 */ func height(node: TreeNode?) right)) + 1 } 结点平衡因子 结点的「平衡因子 Balance Factor」是 结点的左子树高度减去右子树高度,并定义空结点的平衡因子为 0 。 同样地,我们将获取结点平衡因子封装成函数,以便后续使用。 7. 树 hello‑algo.com 116 // === File: avl_tree.swift === /* 获取平衡因子 */ func balanceFactor(node: 应采用的旋转方法 > 0 (即左偏树) ≥ 0 右旋 > 0 (即左偏树) < 0 先左旋后右旋 < 0 (即右偏树) ≤ 0 左旋 < 0 (即右偏树) > 0 先右旋后左旋 为方便使用,我们将旋转操作封装成一个函数。至此,我们可以使用此函数来旋转各种失衡情况,使失衡结点 重新恢复平衡。 // === File: avl_tree.swift === /* 执行旋转操作,使该子树重新恢复平衡 */0 码力 | 190 页 | 14.71 MB | 1 年前3Hello 算法 1.0.0b2 Swift版
Int) { val = x height = 0 } } 「结点高度」是最远叶结点到该结点的距离,即走过的「边」的数量。需要特别注意,叶结点的高度为 0 ,空结 点的高度为 ‑1。我们封装两个工具函数,分别用于获取与更新结点的高度。 // === File: avl_tree.swift === /* 获取结点高度 */ func height(node: TreeNode?) right)) + 1 } 结点平衡因子 结点的「平衡因子 Balance Factor」是 结点的左子树高度减去右子树高度,并定义空结点的平衡因子为 0 。 同样地,我们将获取结点平衡因子封装成函数,以便后续使用。 7. 树 hello‑algo.com 116 // === File: avl_tree.swift === /* 获取平衡因子 */ func balanceFactor(node: 应采用的旋转方法 > 0 (即左偏树) ≥ 0 右旋 > 0 (即左偏树) < 0 先左旋后右旋 < 0 (即右偏树) ≤ 0 左旋 < 0 (即右偏树) > 0 先右旋后左旋 为方便使用,我们将旋转操作封装成一个函数。至此,我们可以使用此函数来旋转各种失衡情况,使失衡结点 重新恢复平衡。 // === File: avl_tree.swift === /* 执行旋转操作,使该子树重新恢复平衡 */0 码力 | 199 页 | 15.72 MB | 1 年前3Hello 算法 1.2.0 简体中文 Swift 版
我们可以将数据结构与算法类比为拼装积木,积木代表数据,积木的形状和连接方式等代表数据结构, 拼装积木的步骤则对应算法。 1. Q & A Q:作为一名程序员,我在日常工作中从未用算法解决过问题,常用算法都被编程语言封装好了,直接用就 可以了;这是否意味着我们工作中的问题还没有到达需要算法的程度? 如果把具体的工作技能比作是武功的“招式”的话,那么基础科目应该更像是“内功”。 我认为学算法(以及其他基础科目) 100 。图 6‑2 以 key 学号 和 value 姓名为例,展示了哈希函数的工作原理。 图 6‑2 哈希函数工作原理 以下代码实现了一个简单哈希表。其中,我们将 key 和 value 封装成一个类 Pair ,以表示键值对。 // === File: array_hash_map.swift === /* 键值对 */ class Pair: Equatable { public 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。 2. 任意节点的左、右子树也是二叉搜索树,即同样满足条件 1. 。 图 7‑16 二叉搜索树 7.4.1 二叉搜索树的操作 我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变量 root ,指向树的根节点。 1. 查找节点 给定目标节点值 num ,可以根据二叉搜索树的性质来查找。如图 7‑17 所示,我们声明一个节点0 码力 | 379 页 | 18.48 MB | 9 月前3Hello 算法 1.1.0 Swift版
100 。图 6‑2 以 key 学号 和 value 姓名为例,展示了哈希函数的工作原理。 图 6‑2 哈希函数工作原理 以下代码实现了一个简单哈希表。其中,我们将 key 和 value 封装成一个类 Pair ,以表示键值对。 // === File: array_hash_map.swift === /* 键值对 */ class Pair: Equatable { public 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。 2. 任意节点的左、右子树也是二叉搜索树,即同样满足条件 1. 。 图 7‑16 二叉搜索树 7.4.1 二叉搜索树的操作 我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变量 root ,指向树的根节点。 1. 查找节点 给定目标节点值 num ,可以根据二叉搜索树的性质来查找。如图 7‑17 所示,我们声明一个节点 right)) + 1 } 2. 节点平衡因子 节点的平衡因子(balance factor)定义为节点左子树的高度减去右子树的高度,同时规定空节点的平衡因子 为 0 。我们同样将获取节点平衡因子的功能封装成函数,方便后续使用: 第 7 章 树 hello‑algo.com 161 // === File: avl_tree.swift === /* 获取平衡因子 */ func balanceFactor(node:0 码力 | 379 页 | 18.47 MB | 1 年前3Hello 算法 1.0.0b5 Swift版
100 。图 6‑2 以 key 学号 和 value 姓名为例,展示了哈希函数的工作原理。 图 6‑2 哈希函数工作原理 以下代码实现了一个简单哈希表。其中,我们将 key 和 value 封装成一个类 Pair ,以表示键值对。 // === File: array_hash_map.swift === /* 键值对 */ class Pair { var key: Int var 任意节点的左、右子树也是二叉搜索树,即同样满足条件 1. 。 第 7 章 树 hello‑algo.com 147 图 7‑16 二叉搜索树 7.4.1 二叉搜索树的操作 我们将二叉搜索树封装为一个类 ArrayBinaryTree ,并声明一个成员变量 root ,指向树的根节点。 1. 查找节点 给定目标节点值 num ,可以根据二叉搜索树的性质来查找。如图 7‑17 所示,我们声明一个节点 com 157 2. 节点平衡因子 节点的「平衡因子 balance factor」定义为节点左子树的高度减去右子树的高度,同时规定空节点的平衡因 子为 0 。我们同样将获取节点平衡因子的功能封装成函数,方便后续使用。 // === File: avl_tree.swift === /* 获取平衡因子 */ func balanceFactor(node: TreeNode?) -> Int0 码力 | 376 页 | 30.70 MB | 1 年前3Hello 算法 1.0.0 Swift版
100 。图 6‑2 以 key 学号 和 value 姓名为例,展示了哈希函数的工作原理。 图 6‑2 哈希函数工作原理 以下代码实现了一个简单哈希表。其中,我们将 key 和 value 封装成一个类 Pair ,以表示键值对。 // === File: array_hash_map.swift === /* 键值对 */ class Pair: Equatable { public 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。 2. 任意节点的左、右子树也是二叉搜索树,即同样满足条件 1. 。 图 7‑16 二叉搜索树 7.4.1 二叉搜索树的操作 我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变量 root ,指向树的根节点。 1. 查找节点 给定目标节点值 num ,可以根据二叉搜索树的性质来查找。如图 7‑17 所示,我们声明一个节点 right)) + 1 } 2. 节点平衡因子 节点的「平衡因子 balance factor」定义为节点左子树的高度减去右子树的高度,同时规定空节点的平衡因 子为 0 。我们同样将获取节点平衡因子的功能封装成函数,方便后续使用: 第 7 章 树 hello‑algo.com 163 // === File: avl_tree.swift === /* 获取平衡因子 */ func balanceFactor(node:0 码力 | 378 页 | 17.59 MB | 1 年前3A Brief Immersion - 傅若愚
FUNCTIONALLY 完⼯之后的样⼦ 看起来棒棒哒! THINK FUNCTIONALLY THINK FUNCTIONALLY 第⼀步,定义⼀个叫做Async的 东西,将异步过程封装起来 其中⽤到的Result如下: THINK FUNCTIONALLY THINK FUNCTIONALLY 注意到它是⼀个Functor,所以 第⼆步,定义⼀个map函数 THINK0 码力 | 40 页 | 3.39 MB | 1 年前3Pop in Swift - 李洁信
timeText = "\(NSDate().timeIntervalSince1970-news.updatedAt)秒前" } } Merits • 将UI配置和响应操作封装成protocol,代码更复⽤用 • UI改动对代码影响很⼩小 • 代码扁平化 Q&A 参考 - The Swift Programming Language (Swift 2.1) -0 码力 | 60 页 | 875.09 KB | 1 年前3
共 8 条
- 1