Hello 算法 1.0.0b2 C++版?(?) = ?(?(?)) Figure 2‑2. 函数的渐近上界 本质上看,计算渐近上界就是在找一个函数 ?(?) ,使得在 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同的增 长级别(仅相差一个常数项 ? 的倍数)。 2. 复杂度分析 hello‑algo.com 17 � 渐近上界的数学味儿有点重,如果你感觉没有完全理解,无需担心,因为在实际使用中我们只 需要会推算即可,数学意义可以慢慢领悟。 = 100000; for (int i = 0; i < size; i++) count++; return count; } 线性阶 ?(?) 线性阶的操作数量相对输入数据大小成线性级别增长。线性阶常出现于单层循环。 // === File: time_complexity.cpp === /* 线性阶 */ int linear(int n) { int count = 0; 循环次数与数组长度成正比 for (int num : nums) { count++; } return count; } 平方阶 ?(?2) 平方阶的操作数量相对输入数据大小成平方级别增长。平方阶常出现于嵌套循环,外层循环和内层循环都为 ?(?) ,总体为 ?(?2) 。 // === File: time_complexity.cpp === /* 平方阶 */ int quadratic(int0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0b1 C++版?(?) = ?(?(?)) Figure 2‑2. 函数的渐近上界 本质上看,计算渐近上界就是在找一个函数 ?(?) ,使得在 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同的增 长级别(仅相差一个常数项 ? 的倍数)。 2. 复杂度分析 hello‑algo.com 17 � 渐近上界的数学味儿有点重,如果你感觉没有完全理解,无需担心,因为在实际使用中我们只 需要会推算即可,数学意义可以慢慢领悟。 = 100000; for (int i = 0; i < size; i++) count++; return count; } 线性阶 ?(?) 线性阶的操作数量相对输入数据大小成线性级别增长。线性阶常出现于单层循环。 // === File: time_complexity.cpp === /* 线性阶 */ int linear(int n) { int count = 0; 循环次数与数组长度成正比 for (int num : nums) { count++; } return count; } 平方阶 ?(?2) 平方阶的操作数量相对输入数据大小成平方级别增长。平方阶常出现于嵌套循环,外层循环和内层循环都为 ?(?) ,总体为 ?(?2) 。 // === File: time_complexity.cpp === /* 平方阶 */ int quadratic(int0 码力 | 187 页 | 14.71 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming做测试? • 优化级别在 -O1 以上时,对于只有两个分支的 if-else ,编译器往往会自动检测到可以优化,帮你 应用“妙用加减乘”了,无法体现手动优化的意义。 不同写法的性能测试 • 我们照常编写了测试用例,禁止内联优化,同样生成 10^7 个随机数( -512 到 512 区间)。 • 至于为什么采用需要三个分支的 clamp 做测试? • 优化级别在 -O1 以上时,对于只有两个分支的 函数体内。 • 微软编译器的同学,要把 __attribute__((noinline)) 换成 __declspec(noinline) 才能编译。 不同写法的性能测试 可以看到不论是哪个优化级别,“妙用加减乘”的效果都是碾压 ifelse 的。 “ 摆大烂”的效果和 ifelse 几乎一样,也就是说根本没用,三目运算符还是生成了 低效的跳转指令,自己不上进,还指望编译器来救你?你还不如坐等天上掉馅饼。0 码力 | 47 页 | 8.45 MB | 1 年前3
Hello 算法 1.1.0 C++ 版(?) 的一个渐近上界,记为 ?(?) = ?(?(?)) 。 如图 2‑8 所示,计算渐近上界就是寻找一个函数 ?(?) ,使得当 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同 的增长级别,仅相差一个常数项 ? 的倍数。 第 2 章 复杂度分析 hello‑algo.com 31 图 2‑8 函数的渐近上界 2.3.3 推算方法 渐近上界的数学味儿有点重,如果你感觉没有完全理 100000; for (int i = 0; i < size; i++) count++; return count; } 2. 线性阶 ?(?) 线性阶的操作数量相对于输入数据大小 ? 以线性级别增长。线性阶通常出现在单层循环中: // === File: time_complexity.cpp === /* 线性阶 */ int linear(int n) { int count = 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为 ?(?) ,因此总体的时间复杂度为 ?(?2) : // === File: time_complexity.cpp ===0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版(?) 的一个渐近上界,记为 ?(?) = ?(?(?)) 。 如图 2‑8 所示,计算渐近上界就是寻找一个函数 ?(?) ,使得当 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同 的增长级别,仅相差一个常数项 ? 的倍数。 第 2 章 复杂度分析 hello‑algo.com 31 图 2‑8 函数的渐近上界 2.3.3 推算方法 渐近上界的数学味儿有点重,如果你感觉没有完全理 100000; for (int i = 0; i < size; i++) count++; return count; } 2. 线性阶 ?(?) 线性阶的操作数量相对于输入数据大小 ? 以线性级别增长。线性阶通常出现在单层循环中: // === File: time_complexity.cpp === /* 线性阶 */ int linear(int n) { int count = 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为 ?(?) ,因此总体的时间复杂度为 ?(?2) : // === File: time_complexity.cpp ===0 码力 | 378 页 | 17.59 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践 • 小彭老师小技巧: • []{ xxx; yyy; return zzz; }() • 可以在表达式层面里插入一个语句块,本 质上是立即求值的 lambda 表达式(内部 是分号级别,外部是逗号级别)。 • 在函数体内也可以这样: • [&]{ xxx; yyy; return zzz; }() • 来在语句块内使用外部的局部变量。 带有构造函数和解构函数的类 • 实际上,只需定义一个带有构造函数和解构函0 码力 | 54 页 | 3.94 MB | 1 年前3
Hello 算法 1.0.0b4 C++版?(?) = ?(?(?)) Figure 2‑2. 函数的渐近上界 从本质上讲,计算渐近上界就是寻找一个函数 ?(?) ,使得当 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同 的增长级别,仅相差一个常数项 ? 的倍数。 2.2.4. 推算方法 渐近上界的数学味儿有点重,如果你感觉没有完全理解,也无需担心。因为在实际使用中,我们只需要掌握 推算方法,数学意义可以逐渐领悟。 2 100000; for (int i = 0; i < size; i++) count++; return count; } 线性阶 ?(?) 线性阶的操作数量相对于输入数据大小以线性级别增长。线性阶通常出现在单层循环中。 // === File: time_complexity.cpp === /* 线性阶 */ int linear(int n) { int count = : nums) { count++; } return count; } 2. 复杂度 hello‑algo.com 21 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层循 环都为 ?(?) ,因此总体为 ?(?2) 。 // === File: time_complexity.cpp === /* 平方阶 */0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版(?) 的一个渐近上界,记为 ?(?) = ?(?(?)) 。 如图 2‑8 所示,计算渐近上界就是寻找一个函数 ?(?) ,使得当 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同 的增长级别,仅相差一个常数项 ? 的倍数。 第 2 章 复杂度分析 www.hello‑algo.com 31 图 2‑8 函数的渐近上界 2.3.3 推算方法 渐近上界的数学味儿有点重,如果你感觉没 100000; for (int i = 0; i < size; i++) count++; return count; } 2. 线性阶 ?(?) 线性阶的操作数量相对于输入数据大小 ? 以线性级别增长。线性阶通常出现在单层循环中: // === File: time_complexity.cpp === /* 线性阶 */ int linear(int n) { int count = 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为 ?(?) ,因此总体的时间复杂度为 ?(?2) : // === File: time_complexity.cpp ===0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b5 C++版(?) 的一个渐近上界,记为 ?(?) = ?(?(?)) 。 如图 2‑8 所示,计算渐近上界就是寻找一个函数 ?(?) ,使得当 ? 趋向于无穷大时,?(?) 和 ?(?) 处于相同 的增长级别,仅相差一个常数项 ? 的倍数。 图 2‑8 函数的渐近上界 第 2 章 复杂度分析 hello‑algo.com 29 2.3.3 推算方法 渐近上界的数学味儿有点重,如果你感觉没有完全理 100000; for (int i = 0; i < size; i++) count++; return count; } 2. 线性阶 ?(?) 线性阶的操作数量相对于输入数据大小 ? 以线性级别增长。线性阶通常出现在单层循环中: // === File: time_complexity.cpp === /* 线性阶 */ int linear(int n) { int count = 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 第 2 章 复杂度分析 hello‑algo.com 32 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环都为 ?(?) ,因此总体为 ?(?2) : // === File: time_complexity.cpp === /* 平方阶 */0 码力 | 377 页 | 30.69 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程才能继续和用户交互。 • 下载完成前,整个界面都会处于“未响应”状 态,用户想做别的事情就做不了。 现代 C++ 中的多线程: std::thread • C++11 开始,为多线程提供了语言级别的 支持。他用 std::thread 这个类来表示线 程。 • std::thread 构造函数的参数可以是任意 lambda 表达式。 • 当那个线程启动时,就会执行这个 lambda0 码力 | 79 页 | 14.11 MB | 1 年前3
共 12 条
- 1
- 2













