《深入浅出MFC》2/e■ 第0章 你㆒定要知道(導讀) 37 Mapping 和Command Routing。 Scribble Step3-增加「笔划宽度对话框」(第10 章):这个版本做出「画笔宽 度对话框」,使用者可以在其中设定细笔宽度和粗笔宽度。预设的细笔为两个 图素(pixel)宽,粗笔为五个图素宽。 从这个版本中可以学习如何以对话框编辑器设计对话框模板,以ClassWizard 增设对 把一个CObject 对象指针 放入串行尾端。 CArray::Add 把一个元素放入数组中。 CArray 的[ ] 运算子 可取出数组的元素。 UINT m_nPenWidth (代表笔的宽度) CScribble Step1 Document:(本图为了说明方便,以CObList 代替实际使用之CTypedPtrList) CObList 的每个元素都是一个CObject 指针。 NewStroke。这个函数将产生一个新的CStroke 对象,并把它加到串行之中。 很显然这应该在鼠标左键按下时发生(我们将在CScribbleView 之中处理鼠标 消息)。本函数动作如下: 这就产生了一个新线条,设定了线条宽度,并将新线条加入串行尾端。 DeleteContent。利用CObList::RemoveHead 把串行的最前端元素拿掉。 Serialize。这个函数负责文件读写。由于文件掌管线条串行,线条串行又掌管0 码力 | 1009 页 | 11.08 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化funcA funcB funcC 内存信息查看工具: dmidecode • 可以看到小彭老师电脑上插了 2 块内存,频率都是 2667 MHz ,数据的宽度是 64 位( 8 字节)。 • 理论极限带宽 = 频率 * 宽度 * 数量 2667*16*2=42672 MB/s • 那么,频率相同的情况下,可以考虑插两块 8GB 的内存, 比插一块 16GB 的内存更快,不过价格可能还是翻倍的。 循环展开 • 注意到 offset 循环只有 4 的大小,所以加 一下 unroll 指令让编译器自动循环展开吧 。 • 微软编译器可能是用 #pragma unroll 4 AVX 指令:宽度为 8 的浮点矢量 • __m128 一次处理四个 float ,改成 __m256 一次处理八个 float ,应该会更快吧?的确变 快了。 • 不过因为 res 有四个寄存器, 4*4*8=1280 码力 | 147 页 | 18.88 MB | 1 年前3
Hello 算法 1.0.0b4 C++版容器的容量等于高度和宽度的乘积(即面积),其中高度由较短的隔板决定,宽度是两个隔板 的数组索引之差。 请在数组中选择两个隔板,使得组成的容器的容量最大,返回最大容量。 15. 贪心 hello‑algo.com 325 Figure 15‑7. 最大容量问题的示例数据 容器由任意两个隔板围成,因此本题的状态为两个隔板的索引,记为 [?, ?] 。 根据题意,容量等于高度乘以宽度,其中高度由短 板决定,宽度是两隔板的索引之差。设容量为 ???[?, ?] , 则可得计算公式: ???[?, ?] = min(ℎ?[?], ℎ?[?]) × (? − ?) 设数组长度为 ? ,两个隔板的组合数量(即状态总数)为 ?2 ? = ?(?−1) 2 个。最直接地,我们可以穷举所有 状态,从而求得最大容量,时间复杂度为 ?(?2) 。 贪心策略确定 这道题还有更高效率的解法。如下图所示,现选取一个状态 我们发现,如果此时将长板 ? 向短板 ? 靠近,则容量一定变小。这是因为在移动长板 ? 后: ‧ 宽度 ? − ? 肯定变小。 ‧ 高度由短板决定,因此高度只可能不变(? 仍为短板)或变小(移动后的 ? 成为短板)。 Figure 15‑9. 向内移动长板后的状态 反向思考,我们只有向内收缩短板 ? ,才有可能使容量变大。因为虽然宽度一定变小,但高度可能会变大(移 动后的短板 ? 可能会变长)。 15. 贪心0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.1.0 C++ 版容器的容量等于高度和宽度的乘积(面积),其中高度由较短的隔板决定,宽度是两个隔板的数组索引 之差。 请在数组中选择两个隔板,使得组成的容器的容量最大,返回最大容量。示例如图 15‑7 所示。 图 15‑7 最大容量问题的示例数据 容器由任意两个隔板围成,因此本题的状态为两个隔板的索引,记为 [?, ?] 。 根据题意,容量等于高度乘以宽度,其中高度由短板决定,宽度是两隔板的数组索引之差。设容量为 所示,若此时将长板 ? 向短板 ? 靠近,则容量一定变小。 这是因为在移动长板 ? 后,宽度 ? − ? 肯定变小;而高度由短板决定,因此高度只可能不变(? 仍为短板)或 变小(移动后的 ? 成为短板)。 图 15‑9 向内移动长板后的状态 反向思考,我们只有向内收缩短板 ? ,才有可能使容量变大。因为虽然宽度一定变小,但高度可能会变大(移 动后的短板 ? 可能会变长)。例如在图 15‑10 中,移动短板后面积变大。0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0b5 C++版容器的容量等于高度和宽度的乘积(即面积),其中高度由较短的隔板决定,宽度是两个隔板 的数组索引之差。 请在数组中选择两个隔板,使得组成的容器的容量最大,返回最大容量。 第 15 章 贪心 hello‑algo.com 358 图 15‑7 最大容量问题的示例数据 容器由任意两个隔板围成,因此本题的状态为两个隔板的索引,记为 [?, ?] 。 根据题意,容量等于高度乘以宽度,其中高度由短板决定,宽度是两隔板的索引之差。设容量为 定,宽度是两隔板的索引之差。设容量为 ???[?, ?] , 则可得计算公式: ???[?, ?] = min(ℎ?[?], ℎ?[?]) × (? − ?) 设数组长度为 ? ,两个隔板的组合数量(即状态总数)为 ?2 ? = ?(?−1) 2 个。最直接地,我们可以穷举所有 状态,从而求得最大容量,时间复杂度为 ?(?2) 。 1. 贪心策略确定 这道题还有更高效率的解法。如图 15‑8 所示,若此时将长板 ? 向短板 ? 靠近,则容量一定变小。 这是因为在移动长板 ? 后,宽度 ? − ? 肯定变小;而高度由短板决定,因此高度只可能不变(? 仍为短板)或 变小(移动后的 ? 成为短板)。 图 15‑9 向内移动长板后的状态 反向思考,我们只有向内收缩短板 ? ,才有可能使容量变大。因为虽然宽度一定变小,但高度可能会变大(移 动后的短板 ? 可能会变长)。例如在图 15‑10 中,移动短板后面积变大。0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0 C++版容器的容量等于高度和宽度的乘积(面积),其中高度由较短的隔板决定,宽度是两个隔板的 数组索引之差。 请在数组中选择两个隔板,使得组成的容器的容量最大,返回最大容量。示例如图 15‑7 所示。 图 15‑7 最大容量问题的示例数据 容器由任意两个隔板围成,因此本题的状态为两个隔板的索引,记为 [?, ?] 。 根据题意,容量等于高度乘以宽度,其中高度由短板决定,宽度是两隔板的数组索引之差。设容量为 所示,若此时将长板 ? 向短板 ? 靠近,则容量一定变小。 这是因为在移动长板 ? 后,宽度 ? − ? 肯定变小;而高度由短板决定,因此高度只可能不变(? 仍为短板)或 变小(移动后的 ? 成为短板)。 图 15‑9 向内移动长板后的状态 反向思考,我们只有向内收缩短板 ? ,才有可能使容量变大。因为虽然宽度一定变小,但高度可能会变大(移 动后的短板 ? 可能会变长)。例如在图 15‑10 中,移动短板后面积变大。0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版容器的容量等于高度和宽度的乘积(面积),其中高度由较短的隔板决定,宽度是两个隔板的数组索引 之差。 请在数组中选择两个隔板,使得组成的容器的容量最大,返回最大容量。示例如图 15‑7 所示。 图 15‑7 最大容量问题的示例数据 容器由任意两个隔板围成,因此本题的状态为两个隔板的索引,记为 [?, ?] 。 根据题意,容量等于高度乘以宽度,其中高度由短板决定,宽度是两隔板的数组索引之差。设容量为 所示,若此时将长板 ? 向短板 ? 靠近,则容量一定变小。 这是因为在移动长板 ? 后,宽度 ? − ? 肯定变小;而高度由短板决定,因此高度只可能不变(? 仍为短板)或 变小(移动后的 ? 成为短板)。 图 15‑9 向内移动长板后的状态 反向思考,我们只有向内收缩短板 ? ,才有可能使容量变大。因为虽然宽度一定变小,但高度可能会变大(移 动后的短板 ? 可能会变长)。例如在图 15‑10 中,移动短板后面积变大。0 码力 | 379 页 | 18.48 MB | 10 月前3
共 7 条
- 1













