 《深入浅出MFC》2/e发现该书如获至宝。数月前购买了深入浅出MFC,并利用闲暇时间翻阅学习(包括如厕 时间... )。 我的学习曲线比较不同,我比较倾向于了解事情的因,而不是该如何做事情。比方说,「应 该使用MFC 的哪个类别」或「要改写哪个虚拟函数」,对我而言还不如「CWinApp 何时何 地调用了我的什么函数」或「CDocManager 到底做了什么」来得有趣(嗯,虽说是一样重 要啦)。这些「事情的因」在您的书中有大量详细的介绍。 有一个程度的了解后再去看侯sir 写的深入 浅出MFC... 保证让你功力大增~~ Rosario.bbs@bbs.ntu.edu.tw:深入浅出MFC 这本比较好~~~不过之前最好买侯老师的多 型与虚拟拟,把C++ 弄清楚。最后看起深入Visual C++ 就会吸收很快。 请问,想要从DOS 跨足到Windows 程序设计有哪些书值得推荐呢? hschin.bbs@bbs.cs.nthu.edu event driven, multitasking, multithreading, console programming。 ■ C++ 重要技术:类别与对象、this 指针与继承、静态成员、虚拟函数与多态、 深入淺出 MFC 28 模板(template)类别、异常处理(exception handling)。 ■ MFC 六大技术之简化仿真(Console 程序) 第二篇【欲善工事先利其器】提供给对Visual0 码力 | 1009 页 | 11.08 MB | 1 年前3 《深入浅出MFC》2/e发现该书如获至宝。数月前购买了深入浅出MFC,并利用闲暇时间翻阅学习(包括如厕 时间... )。 我的学习曲线比较不同,我比较倾向于了解事情的因,而不是该如何做事情。比方说,「应 该使用MFC 的哪个类别」或「要改写哪个虚拟函数」,对我而言还不如「CWinApp 何时何 地调用了我的什么函数」或「CDocManager 到底做了什么」来得有趣(嗯,虽说是一样重 要啦)。这些「事情的因」在您的书中有大量详细的介绍。 有一个程度的了解后再去看侯sir 写的深入 浅出MFC... 保证让你功力大增~~ Rosario.bbs@bbs.ntu.edu.tw:深入浅出MFC 这本比较好~~~不过之前最好买侯老师的多 型与虚拟拟,把C++ 弄清楚。最后看起深入Visual C++ 就会吸收很快。 请问,想要从DOS 跨足到Windows 程序设计有哪些书值得推荐呢? hschin.bbs@bbs.cs.nthu.edu event driven, multitasking, multithreading, console programming。 ■ C++ 重要技术:类别与对象、this 指针与继承、静态成员、虚拟函数与多态、 深入淺出 MFC 28 模板(template)类别、异常处理(exception handling)。 ■ MFC 六大技术之简化仿真(Console 程序) 第二篇【欲善工事先利其器】提供给对Visual0 码力 | 1009 页 | 11.08 MB | 1 年前3
 Hello 算法 1.0.0b1 C++版0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将处于主导作用, 其它项的影响都可以被忽略。 以下表格给出了一些例子,其中有一些夸张的值,是想要向大家强调 系数无法撼动阶数 这一结论。在 ? 趋于 无穷大时,这些常数都是“浮云”。 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?(?) 2?2 + 3? + 2 ?(?2) } 「遍历数组」和「遍历链表」等操作,时间复杂度都为 ?(?) ,其中 ? 为数组或链表的长度。 � 数据大小 ? 是根据输入数据的类型来确定的。比如,在上述示例中,我们直接将 ? 看作输入数 据大小;以下遍历数组示例中,数据大小 ? 为数组的长度。 // === File: time_complexity.cpp === /* 线性阶(遍历数组) */ int arrayTraversal(vector Hello 算法 1.0.0b1 C++版0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将处于主导作用, 其它项的影响都可以被忽略。 以下表格给出了一些例子,其中有一些夸张的值,是想要向大家强调 系数无法撼动阶数 这一结论。在 ? 趋于 无穷大时,这些常数都是“浮云”。 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?(?) 2?2 + 3? + 2 ?(?2) } 「遍历数组」和「遍历链表」等操作,时间复杂度都为 ?(?) ,其中 ? 为数组或链表的长度。 � 数据大小 ? 是根据输入数据的类型来确定的。比如,在上述示例中,我们直接将 ? 看作输入数 据大小;以下遍历数组示例中,数据大小 ? 为数组的长度。 // === File: time_complexity.cpp === /* 线性阶(遍历数组) */ int arrayTraversal(vector- & 0 码力 | 187 页 | 14.71 MB | 1 年前3
 Hello 算法 1.0.0b2 C++版0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将处于主导作用, 其它项的影响都可以被忽略。 以下表格给出了一些例子,其中有一些夸张的值,是想要向大家强调 系数无法撼动阶数 这一结论。在 ? 趋于 无穷大时,这些常数都是“浮云”。 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?(?) 2?2 + 3? + 2 ?(?2) } 「遍历数组」和「遍历链表」等操作,时间复杂度都为 ?(?) ,其中 ? 为数组或链表的长度。 � 数据大小 ? 是根据输入数据的类型来确定的。比如,在上述示例中,我们直接将 ? 看作输入数 据大小;以下遍历数组示例中,数据大小 ? 为数组的长度。 // === File: time_complexity.cpp === /* 线性阶(遍历数组) */ int arrayTraversal(vector Hello 算法 1.0.0b2 C++版0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将处于主导作用, 其它项的影响都可以被忽略。 以下表格给出了一些例子,其中有一些夸张的值,是想要向大家强调 系数无法撼动阶数 这一结论。在 ? 趋于 无穷大时,这些常数都是“浮云”。 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?(?) 2?2 + 3? + 2 ?(?2) } 「遍历数组」和「遍历链表」等操作,时间复杂度都为 ?(?) ,其中 ? 为数组或链表的长度。 � 数据大小 ? 是根据输入数据的类型来确定的。比如,在上述示例中,我们直接将 ? 看作输入数 据大小;以下遍历数组示例中,数据大小 ? 为数组的长度。 // === File: time_complexity.cpp === /* 线性阶(遍历数组) */ int arrayTraversal(vector- & 0 码力 | 197 页 | 15.72 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 12 从计算机组成原理看 C 语言指针,而有符号可以表示 -127 到 127 。 • 但是有一个问题,那 00000000 就表示 0 , 10000000 就表示 -0 ,而 0 有没有负号其 实无所谓, 0 和 -0 根本是同一个数,却有着不同的表示,这显然不对吧? • 因此,可以如 10000000 实际上表示 -1 , 11111111 则表示 -128 ,让负数部分整体“平 移”一位,这样就不会出现 -0 这种奇怪的东 目前看来是用不到。 知识拓展 • 虽然 64 位计算机的寄存器能处理 64 位的整数,实际上的内存地址并没有 64 位。 • 实际上地址的高 16 位始终和第 48 位一致(符号扩展),也就是虚拟地址空间只有 48 位。 • 而经过 MMU 映射后实际给内存的地址只有 39 位,因此如今的 x64 架构实际上只能访 问 512GB 内存,如果插了超过这个大小的内存条他也不会认出来。 printf 的参数,而 printf 却会把这 4 个字节作为 浮点来处理。由于浮点的指数位处于高位,但整数 是 3 ,导致高位全是 0 ,所以 printf 误读出来的 float 会是一个很小的数 ( 2^-127 左右)。 abs 函数:取出绝对值 • 而刚刚的例子中我们的 abs 返回类型其实始 终是 int ,被送到 printf 里却以 “ %f” 的方式 去读出,所以出错了。0 码力 | 128 页 | 2.95 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 12 从计算机组成原理看 C 语言指针,而有符号可以表示 -127 到 127 。 • 但是有一个问题,那 00000000 就表示 0 , 10000000 就表示 -0 ,而 0 有没有负号其 实无所谓, 0 和 -0 根本是同一个数,却有着不同的表示,这显然不对吧? • 因此,可以如 10000000 实际上表示 -1 , 11111111 则表示 -128 ,让负数部分整体“平 移”一位,这样就不会出现 -0 这种奇怪的东 目前看来是用不到。 知识拓展 • 虽然 64 位计算机的寄存器能处理 64 位的整数,实际上的内存地址并没有 64 位。 • 实际上地址的高 16 位始终和第 48 位一致(符号扩展),也就是虚拟地址空间只有 48 位。 • 而经过 MMU 映射后实际给内存的地址只有 39 位,因此如今的 x64 架构实际上只能访 问 512GB 内存,如果插了超过这个大小的内存条他也不会认出来。 printf 的参数,而 printf 却会把这 4 个字节作为 浮点来处理。由于浮点的指数位处于高位,但整数 是 3 ,导致高位全是 0 ,所以 printf 误读出来的 float 会是一个很小的数 ( 2^-127 左右)。 abs 函数:取出绝对值 • 而刚刚的例子中我们的 abs 返回类型其实始 终是 int ,被送到 printf 里却以 “ %f” 的方式 去读出,所以出错了。0 码力 | 128 页 | 2.95 MB | 1 年前3
 Hello 算法 1.0.0b4 C++版。与仅阅读 代码相比,编写代码的过程往往能带来更多收获。 Figure 0‑3. 运行代码示例 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用, 其他项的影响都可以被忽略。 以下表格展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大 时,这些常数变得无足轻重。 2. 复杂度 hello‑algo.com 19 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 暂存空间可以进一步划分为三个部分: ‧「暂存数据」用于保存算法运行过程中的各种常量、变量、对象等。 ‧「栈帧空间」用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函 数返回后,栈帧空间会被释放。 ‧「指令空间」用于保存编译后的程序指令,在实际统计中通常忽略不计。 因此,在分析一段程序的空间复杂度时,我们一般统计 暂存数据、输出数据、栈帧空间 三部分。 Figure0 码力 | 343 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 C++版。与仅阅读 代码相比,编写代码的过程往往能带来更多收获。 Figure 0‑3. 运行代码示例 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用, 其他项的影响都可以被忽略。 以下表格展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大 时,这些常数变得无足轻重。 2. 复杂度 hello‑algo.com 19 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 暂存空间可以进一步划分为三个部分: ‧「暂存数据」用于保存算法运行过程中的各种常量、变量、对象等。 ‧「栈帧空间」用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函 数返回后,栈帧空间会被释放。 ‧「指令空间」用于保存编译后的程序指令,在实际统计中通常忽略不计。 因此,在分析一段程序的空间复杂度时,我们一般统计 暂存数据、输出数据、栈帧空间 三部分。 Figure0 码力 | 343 页 | 27.39 MB | 1 年前3
 Hello 算法 1.0.0b5 C++版与阅读代码相比,编写代码的过程往往能带来更多收获。动手学,才是真的学。 图 0‑3 运行代码示例 运行代码的前置工作主要分为三步。 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以在图 0‑4 所示的位置,点击“Download 趋于无穷大时,最高阶的项将发挥主导作用, 其他项的影响都可以被忽略。 第 2 章 复杂度分析 hello‑algo.com 30 表 2‑1 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大时, 这些常数变得无足轻重。 表 2‑1 不同操作数量对应的时间复杂度 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?( (int num : nums) { count++; } return count; } 值得注意的是,输入数据大小 ? 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 第 2 章 复杂度分析 hello‑algo.com 32 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增0 码力 | 377 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 C++版与阅读代码相比,编写代码的过程往往能带来更多收获。动手学,才是真的学。 图 0‑3 运行代码示例 运行代码的前置工作主要分为三步。 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以在图 0‑4 所示的位置,点击“Download 趋于无穷大时,最高阶的项将发挥主导作用, 其他项的影响都可以被忽略。 第 2 章 复杂度分析 hello‑algo.com 30 表 2‑1 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大时, 这些常数变得无足轻重。 表 2‑1 不同操作数量对应的时间复杂度 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?( (int num : nums) { count++; } return count; } 值得注意的是,输入数据大小 ? 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 第 2 章 复杂度分析 hello‑algo.com 32 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增0 码力 | 377 页 | 30.69 MB | 1 年前3
 现代C++ 教程:高速上手C++11/14/17/20初始化是一个非常重要的语言特性,最常见的就是在对象进行初始化时进行使用。在传统 C++ 中, 不同的对象有着不同的初始化方法,例如普通数组、POD (Plain Old Data,即没有构造、析构和虚函 数的类或结构体)类型都可以使用 {} 进行初始化,也就是我们所说的初始化列表。而对于类对象的初始 化,要么需要通过拷贝构造、要么就需要使用 () 进行。这些不同方法都针对各自对象,不能通用。例如: #include ,但有两种经典的处理 手法: 1. 递归模板函数 26 2.5 模板 第 2 章语言可用性的强化 递归是非常容易想到的一种手段,也是最经典的处理方法。这种方法不断递归地向函数传递模板参 数,进而达到递归遍历所有模板参数的目的: #include 现代C++ 教程:高速上手C++11/14/17/20初始化是一个非常重要的语言特性,最常见的就是在对象进行初始化时进行使用。在传统 C++ 中, 不同的对象有着不同的初始化方法,例如普通数组、POD (Plain Old Data,即没有构造、析构和虚函 数的类或结构体)类型都可以使用 {} 进行初始化,也就是我们所说的初始化列表。而对于类对象的初始 化,要么需要通过拷贝构造、要么就需要使用 () 进行。这些不同方法都针对各自对象,不能通用。例如: #include ,但有两种经典的处理 手法: 1. 递归模板函数 26 2.5 模板 第 2 章语言可用性的强化 递归是非常容易想到的一种手段,也是最经典的处理方法。这种方法不断递归地向函数传递模板参 数,进而达到递归遍历所有模板参数的目的: #include- template - void printf1(T0 value) { std::cout typename U> auto add(T t, U u) { return t+u; } 其中模板的参数 T 和 U 为具体的类型。但还有一种常见模板参数形式可以让不同字面量成为模板参 数,即非类型模板参数: template - class buffer_t { public: T& alloc(); void free(T& 0 码力 | 83 页 | 2.42 MB | 1 年前3
 Hello 算法 1.1.0 C++ 版“如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机问世之前,算法 时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大时, 这些常数变得无足轻重。 表 2‑2 不同操作数量对应的时间复杂度 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?( (int num : nums) { count++; } return count; } 值得注意的是,输入数据大小 ? 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为0 码力 | 379 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 C++ 版“如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机问世之前,算法 时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大时, 这些常数变得无足轻重。 表 2‑2 不同操作数量对应的时间复杂度 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?( (int num : nums) { count++; } return count; } 值得注意的是,输入数据大小 ? 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.0.0 C++版时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大时, 这些常数变得无足轻重。 表 2‑2 不同操作数量对应的时间复杂度 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?( (int num : nums) { count++; } return count; } 值得注意的是,输入数据大小 ? 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为 以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 � 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉 及地址空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲0 码力 | 378 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 C++版时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大时, 这些常数变得无足轻重。 表 2‑2 不同操作数量对应的时间复杂度 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?( (int num : nums) { count++; } return count; } 值得注意的是,输入数据大小 ? 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为 以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 � 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉 及地址空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲0 码力 | 378 页 | 17.59 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 C++ 版“如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机问世之前,算法 时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大时, 这些常数变得无足轻重。 表 2‑2 不同操作数量对应的时间复杂度 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?( (int num : nums) { count++; } return count; } 值得注意的是,输入数据大小 ? 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 C++ 版“如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机问世之前,算法 时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大时, 这些常数变得无足轻重。 表 2‑2 不同操作数量对应的时间复杂度 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?( (int num : nums) { count++; } return count; } 值得注意的是,输入数据大小 ? 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为0 码力 | 379 页 | 18.48 MB | 10 月前3
共 27 条
- 1
- 2
- 3













