Hello 算法 1.2.0 简体中文 Swift 版算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,达到最差时间复杂度 ?(?) 。 ‧ 当 nums = [1, ?, ? n } var nums = Array(1 ... n) // 随机打乱数组元素 nums.shuffle() return nums } /* 查找数组 nums 中数字 1 所在索引 */ func findOne(nums: [Int]) -> Int { 第 2 章 复杂度分析 www.hello‑algo.com 41 for i in nums.indices { 杂度可以体现算法在随机输入数据下的 运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相等的,那么算法的平均循环次数就是数组长度的一半 ?/2 ,平 均时间复杂度为 Θ(?/2) = Θ(?) 。 但对于较为复杂的算法,计算平均时间复杂度往往比较困难,因为很难分析出在数据分布下的整体数学期望。0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.1.0 Swift版算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,达到最差时间复杂度 ?(?) 。 ‧ 当 nums = [1, ?, ? n } var nums = Array(1 ... n) // 随机打乱数组元素 nums.shuffle() return nums } /* 查找数组 nums 中数字 1 所在索引 */ func findOne(nums: [Int]) -> Int { 第 2 章 复杂度分析 hello‑algo.com 41 for i in nums.indices { // 杂度可以体现算法在随机输入数据下的 运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相等的,那么算法的平均循环次数就是数组长度的一半 ?/2 ,平 均时间复杂度为 Θ(?/2) = Θ(?) 。 但对于较为复杂的算法,计算平均时间复杂度往往比较困难,因为很难分析出在数据分布下的整体数学期望。0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0b2 Swift版某些算法的时间复杂度不是恒定的,而是与输入数据的分布有关。举一个例子,输入一个长度为 ? 数组 nums , 其中 nums 由从 1 至 ? 的数字组成,但元素顺序是随机打乱的;算法的任务是返回元素 1 的索引。我们可以得 出以下结论: ‧ 当 nums = [?, ?, ..., 1],即当末尾元素是 1 时,则需完整遍历数组,此时达到 最差时间复杂度 ?(?) ; ‧ 当 nums = [1, n } var nums = Array(1 ... n) // 随机打乱数组元素 nums.shuffle() return nums } /* 查找数组 nums 中数字 1 所在索引 */ func findOne(nums: [Int]) -> Int { for i in nums.indices { // 当元素 1 在数组头部时,达到最佳时间复杂度 O(1) // 的 运行效率,用 Θ 记号(Theta Notation)来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相等的,那么算法的平均循环次数则是数组长度的一半 ? 2 ,平均 时间复杂度为 Θ(? 2) = Θ(?) 。 但在实际应用中,尤其是较为复杂的算法,计算平均时间复杂度比较困难,因为很难简便地分析出在数据分布0 码力 | 199 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0 Swift版算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,达到最差时间复杂度 ?(?) 。 ‧ 当 nums = [1, ?, ? n } var nums = Array(1 ... n) // 随机打乱数组元素 nums.shuffle() return nums } /* 查找数组 nums 中数字 1 所在索引 */ func findOne(nums: [Int]) -> Int { 第 2 章 复杂度分析 hello‑algo.com 41 for i in nums.indices { // 复杂度可以体现算法在随机输入数据下的 运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相等的,那么算法的平均循环次数就是数组长度的一半 ?/2 ,平 均时间复杂度为 Θ(?/2) = Θ(?) 。 但对于较为复杂的算法,计算平均时间复杂度往往比较困难,因为很难分析出在数据分布下的整体数学期望。0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.0.0b5 Swift版算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,达到最差时间复杂度 ?(?) 。 ‧ 当 nums = [1, ?, ? n } var nums = Array(1 ... n) // 随机打乱数组元素 nums.shuffle() return nums } /* 查找数组 nums 中数字 1 所在索引 */ func findOne(nums: [Int]) -> Int { 第 2 章 复杂度分析 hello‑algo.com 39 for i in nums.indices { // 复杂度可以体现算法在随机输入数据下的运行效率, 用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相等的,那么算法的平均循环次数就是数组长度的一半 ?/2 ,平 均时间复杂度为 Θ(?/2) = Θ(?) 。 但对于较为复杂的算法,计算平均时间复杂度往往是比较困难的,因为很难分析出在数据分布下的整体数学0 码力 | 376 页 | 30.70 MB | 1 年前3
Hello 算法 1.0.0b1 Swift版某些算法的时间复杂度不是恒定的,而是与输入数据的分布有关。举一个例子,输入一个长度为 ? 数组 nums , 其中 nums 由从 1 至 ? 的数字组成,但元素顺序是随机打乱的;算法的任务是返回元素 1 的索引。我们可以得 出以下结论: ‧ 当 nums = [?, ?, ..., 1],即当末尾元素是 1 时,则需完整遍历数组,此时达到 最差时间复杂度 ?(?) ; ‧ 当 nums = [1, n } var nums = Array(1 ... n) // 随机打乱数组元素 nums.shuffle() return nums } /* 查找数组 nums 中数字 1 所在索引 */ func findOne(nums: [Int]) -> Int { for i in nums.indices { // 当元素 1 在数组头部时,达到最佳时间复杂度 O(1) // 的 运行效率,用 Θ 记号(Theta Notation)来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相等的,那么算法的平均循环次数则是数组长度的一半 ? 2 ,平均 时间复杂度为 Θ(? 2) = Θ(?) 。 但在实际应用中,尤其是较为复杂的算法,计算平均时间复杂度比较困难,因为很难简便地分析出在数据分布0 码力 | 190 页 | 14.71 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Swift 版演算法的時間效率往往不是固定的,而是與輸入資料的分佈有關。假設輸入一個長度為 ? 的陣列 nums ,其 中 nums 由從 1 至 ? 的數字組成,每個數字只出現一次;但元素順序是隨機打亂的,任務目標是返回元素 1 的索引。我們可以得出以下結論。 ‧ 當 nums = [?, ?, ..., 1] ,即當末尾元素是 1 時,需要完整走訪陣列,達到最差時間複雜度 ?(?) 。 ‧ 當 nums = [1, ?, ? n } var nums = Array(1 ... n) // 隨機打亂陣列元素 nums.shuffle() return nums } /* 查詢陣列 nums 中數字 1 所在索引 */ func findOne(nums: [Int]) -> Int { 第 2 章 複雜度分析 www.hello‑algo.com 41 for i in nums.indices { 可以體現演算法在隨機輸入資料 下的執行效率,用 Θ 記號來表示。 對於部分演算法,我們可以簡單地推算出隨機資料分佈下的平均情況。比如上述示例,由於輸入陣列是被打 亂的,因此元素 1 出現在任意索引的機率都是相等的,那麼演算法的平均迴圈次數就是陣列長度的一半 ?/2 ,平均時間複雜度為 Θ(?/2) = Θ(?) 。 但對於較為複雜的演算法,計算平均時間複雜度往往比較困難,因為很難分析出在資料分佈下的整體數學期0 码力 | 379 页 | 18.79 MB | 10 月前3
共 7 条
- 1













