 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南• (用于伺候 Ubuntu 喜欢把库文件套娃在 /usr/lib/x86_64-linux-gnu 目录下) https://zhuanlan.zhihu.com/p/60479441 举例说明 find_package 搜索路径 • 例如你是 64 位的 Linux 系统, find_package(Qt5 REQUIRED) 会依次搜索: • /usr/lib/cmake/Qt5/Qt5Config cmake • /usr/Qt5/lib/x86_64-linux-gnu/Qt5/Qt5Config.cmake • /usr/Qt5/share/Qt5/Qt5Config.cmake 举例说明 find_package 搜索路径 • 例如你是 64 位的 Windows 系统, find_package(Qt5 REQUIRED) 会依次搜索: • C:/Program Files/Qt5Config Files/Qt5/lib/x86_64-windows-gnu/Qt5/Qt5Config.cmake • C:/Program Files/Qt5/share/Qt5/Qt5Config.cmake 举例说明 find_package 搜索路径 • 还有一点, C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南• (用于伺候 Ubuntu 喜欢把库文件套娃在 /usr/lib/x86_64-linux-gnu 目录下) https://zhuanlan.zhihu.com/p/60479441 举例说明 find_package 搜索路径 • 例如你是 64 位的 Linux 系统, find_package(Qt5 REQUIRED) 会依次搜索: • /usr/lib/cmake/Qt5/Qt5Config cmake • /usr/Qt5/lib/x86_64-linux-gnu/Qt5/Qt5Config.cmake • /usr/Qt5/share/Qt5/Qt5Config.cmake 举例说明 find_package 搜索路径 • 例如你是 64 位的 Windows 系统, find_package(Qt5 REQUIRED) 会依次搜索: • C:/Program Files/Qt5Config Files/Qt5/lib/x86_64-windows-gnu/Qt5/Qt5Config.cmake • C:/Program Files/Qt5/share/Qt5/Qt5Config.cmake 举例说明 find_package 搜索路径 • 还有一点,- 可以有额外后缀,且不分大小写(无论 Linux 还是 Windows ), 例如: • C:/Program Files/Qt5/cmake/Qt5Config 0 码力 | 56 页 | 6.87 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程上执行。 • 不过调用 kernel 时,不能直接 kernel() ,而 是要用 kernel<<<1, 1>>>() 这样的三重尖括 号语法。为什么?这里面的两个 1 有什么用 ?稍后会说明。 • 运行以后,就会在 GPU 上执行 printf 了。 • 这里的 kernel 函数在 GPU 上执行,称为核 函数,用 __global__ 修饰的就是核函数。 没有反应?同步一下! kernel 好像没有执行过一样,只有 CPU 上的代码被执行了。 指定多个版本号 • 可以指定多个版本号,之间用分号分割。 • 运行时可以自动选择最适合当前显卡的版 本号,通常用于打包发布的时候。 • 不过这样会导致 GPU 编译器重复编译很 多遍,每次针对不同的架构,所以编译会 变得非常慢,生成的可执行文件也会变大 。 • 通常在自己的电脑上用时,同学们只要根 据自己显卡的指定一个版本号即可。 中的特殊变量之一,只有在 核函数里才可以访问。 • 可以看到线程编号从 0 开始计数,打印出 了 0 , 1 , 2 。这也是我们指定了线程数 量为 3 的缘故。 • 等等,为什么后面有个 .x ?稍后再说明。 获取线程数量 • 还可以用 blockDim.x 获取当前线程数量 ,也就是我们在尖括号里指定的 3 。 • 可是为什么叫 blockDim ?我觉得应该叫 threadNum 才比较合理?0 码力 | 142 页 | 13.52 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程上执行。 • 不过调用 kernel 时,不能直接 kernel() ,而 是要用 kernel<<<1, 1>>>() 这样的三重尖括 号语法。为什么?这里面的两个 1 有什么用 ?稍后会说明。 • 运行以后,就会在 GPU 上执行 printf 了。 • 这里的 kernel 函数在 GPU 上执行,称为核 函数,用 __global__ 修饰的就是核函数。 没有反应?同步一下! kernel 好像没有执行过一样,只有 CPU 上的代码被执行了。 指定多个版本号 • 可以指定多个版本号,之间用分号分割。 • 运行时可以自动选择最适合当前显卡的版 本号,通常用于打包发布的时候。 • 不过这样会导致 GPU 编译器重复编译很 多遍,每次针对不同的架构,所以编译会 变得非常慢,生成的可执行文件也会变大 。 • 通常在自己的电脑上用时,同学们只要根 据自己显卡的指定一个版本号即可。 中的特殊变量之一,只有在 核函数里才可以访问。 • 可以看到线程编号从 0 开始计数,打印出 了 0 , 1 , 2 。这也是我们指定了线程数 量为 3 的缘故。 • 等等,为什么后面有个 .x ?稍后再说明。 获取线程数量 • 还可以用 blockDim.x 获取当前线程数量 ,也就是我们在尖括号里指定的 3 。 • 可是为什么叫 blockDim ?我觉得应该叫 threadNum 才比较合理?0 码力 | 142 页 | 13.52 MB | 1 年前3
 Hello 算法 1.0.0b4 C++版据结构进行实现,但最终执行效率 可能相差很大。 Figure 1‑4. 数据结构与算法的关系 我们可以把数据结构与算法类比为拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 1. 初识算法 hello‑algo.com 11 Figure 1‑5. 拼装积木 两者的详细对应关系如下表所示。 数据结构与算法 LEGO < n; i++) { // +1(每轮都执行 i ++) cout << 0 << endl; // +1 2. 复杂度 hello‑algo.com 17 } } ?(?) 是一次函数,说明时间增长趋势是线性的,因此可以得出时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为「大 ? 记号 Big‑? Notation」,表示函数 ?(?) 的「渐近上界 不同语言的需求。 3.4.2. GBK 字符集 后来人们发现,EASCII 码仍然无法满足许多语言的字符数量要求。例如,汉字大约有近十万个,光日常使 用的就有几千个。中国国家标准总局于 1980 年发布了「GB2312」字符集,其收录了 6763 个汉字,基本满 足了汉字的计算机处理需要。 然而,GB2312 无法处理部分的罕见字和繁体字。之后在 GB2312 的基础上,扩展得到了「GBK」字符集,它0 码力 | 343 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 C++版据结构进行实现,但最终执行效率 可能相差很大。 Figure 1‑4. 数据结构与算法的关系 我们可以把数据结构与算法类比为拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 1. 初识算法 hello‑algo.com 11 Figure 1‑5. 拼装积木 两者的详细对应关系如下表所示。 数据结构与算法 LEGO < n; i++) { // +1(每轮都执行 i ++) cout << 0 << endl; // +1 2. 复杂度 hello‑algo.com 17 } } ?(?) 是一次函数,说明时间增长趋势是线性的,因此可以得出时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为「大 ? 记号 Big‑? Notation」,表示函数 ?(?) 的「渐近上界 不同语言的需求。 3.4.2. GBK 字符集 后来人们发现,EASCII 码仍然无法满足许多语言的字符数量要求。例如,汉字大约有近十万个,光日常使 用的就有几千个。中国国家标准总局于 1980 年发布了「GB2312」字符集,其收录了 6763 个汉字,基本满 足了汉字的计算机处理需要。 然而,GB2312 无法处理部分的罕见字和繁体字。之后在 GB2312 的基础上,扩展得到了「GBK」字符集,它0 码力 | 343 页 | 27.39 MB | 1 年前3
 Hello 算法 1.0.0b5 C++版有对应最优的数据结构,但最终执行效率可能相 差很大。 图 1‑4 数据结构与算法的关系 数据结构与算法犹如图 1‑5 所示的拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 第 1 章 初识算法 hello‑algo.com 14 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为积木 将数据结构与算法类比为积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供多种编程语言的实现。 � 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 0 << endl; // +1 } } 设算法的操作数量是一个关于输入数据大小 ? 的函数,记为 ?(?) ,则以上函数的的操作数量为: ?(?) = 3 + 2? ?(?) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为「大 ? 记号 big‑? notation」,表示函数 ?(?) 的「渐近上界0 码力 | 377 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 C++版有对应最优的数据结构,但最终执行效率可能相 差很大。 图 1‑4 数据结构与算法的关系 数据结构与算法犹如图 1‑5 所示的拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 第 1 章 初识算法 hello‑algo.com 14 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为积木 将数据结构与算法类比为积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供多种编程语言的实现。 � 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 0 << endl; // +1 } } 设算法的操作数量是一个关于输入数据大小 ? 的函数,记为 ?(?) ,则以上函数的的操作数量为: ?(?) = 3 + 2? ?(?) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为「大 ? 记号 big‑? notation」,表示函数 ?(?) 的「渐近上界0 码力 | 377 页 | 30.69 MB | 1 年前3
 Hello 算法 1.1.0 C++ 版算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系 数据结构与算法犹如图 1‑5 所示的拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 第 1 章 初识算法 hello‑algo.com 15 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 0 << endl; // +1 } } 设算法的操作数量是一个关于输入数据大小 ? 的函数,记为 ?(?) ,则以上函数的操作数量为: ?(?) = 3 + 2? ?(?) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为大 ? 记号(big‑? notation),表示函数 ?(?) 的 渐近上界(asymptotic0 码力 | 379 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 C++ 版算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系 数据结构与算法犹如图 1‑5 所示的拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 第 1 章 初识算法 hello‑algo.com 15 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 0 << endl; // +1 } } 设算法的操作数量是一个关于输入数据大小 ? 的函数,记为 ?(?) ,则以上函数的操作数量为: ?(?) = 3 + 2? ?(?) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为大 ? 记号(big‑? notation),表示函数 ?(?) 的 渐近上界(asymptotic0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.0.0 C++版算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系 数据结构与算法犹如图 1‑5 所示的拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 第 1 章 初识算法 hello‑algo.com 15 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 � 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 0 << endl; // +1 } } 设算法的操作数量是一个关于输入数据大小 ? 的函数,记为 ?(?) ,则以上函数的操作数量为: ?(?) = 3 + 2? ?(?) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为「大 ? 记号 big‑? notation」,表示函数 ?(?) 的「渐近上界0 码力 | 378 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 C++版算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系 数据结构与算法犹如图 1‑5 所示的拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 第 1 章 初识算法 hello‑algo.com 15 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 � 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 0 << endl; // +1 } } 设算法的操作数量是一个关于输入数据大小 ? 的函数,记为 ?(?) ,则以上函数的操作数量为: ?(?) = 3 + 2? ?(?) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为「大 ? 记号 big‑? notation」,表示函数 ?(?) 的「渐近上界0 码力 | 378 页 | 17.59 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 C++ 版算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系 数据结构与算法犹如图 1‑5 所示的拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 第 1 章 初识算法 www.hello‑algo.com 15 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 0 << endl; // +1 } } 设算法的操作数量是一个关于输入数据大小 ? 的函数,记为 ?(?) ,则以上函数的操作数量为: ?(?) = 3 + 2? ?(?) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为大 ? 记号(big‑? notation),表示函数 ?(?) 的 渐近上界(asymptotic0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 C++ 版算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系 数据结构与算法犹如图 1‑5 所示的拼装积木。一套积木,除了包含许多零件之外,还附有详细的组装说明书。 我们按照说明书一步步操作,就能组装出精美的积木模型。 第 1 章 初识算法 www.hello‑algo.com 15 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 0 << endl; // +1 } } 设算法的操作数量是一个关于输入数据大小 ? 的函数,记为 ?(?) ,则以上函数的操作数量为: ?(?) = 3 + 2? ?(?) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为大 ? 记号(big‑? notation),表示函数 ?(?) 的 渐近上界(asymptotic0 码力 | 379 页 | 18.48 MB | 10 月前3
 C++高性能并行编程与优化 -  课件 - 02 现代 C++ 入门:RAII 内存管理com 。(不要用 baidu.com ,那个是搜广告用的) • 如果感兴趣,我可以增添一节专门讲动态多态。 回家作业! • 已经发布到: https://github.com/parallel101/hw02 • 仓库的 README.md 里有详细的作业要求和说明。请按要求修改其中的代码,使得双向 链表类 List 的拷贝构造函数能正常工作,且内存能够安全释放。 • 通过 pull request0 码力 | 96 页 | 16.28 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 02 现代 C++ 入门:RAII 内存管理com 。(不要用 baidu.com ,那个是搜广告用的) • 如果感兴趣,我可以增添一节专门讲动态多态。 回家作业! • 已经发布到: https://github.com/parallel101/hw02 • 仓库的 README.md 里有详细的作业要求和说明。请按要求修改其中的代码,使得双向 链表类 List 的拷贝构造函数能正常工作,且内存能够安全释放。 • 通过 pull request0 码力 | 96 页 | 16.28 MB | 1 年前3
 《深入浅出MFC》2/eto read your new books. x hon.bbs@bbs.ee.ncu.edu.tw 我非常喜欢你的书,不管是著作或是翻译,给人的感觉真的是"深入浅出",我喜欢你用浅 近的比喻说明,来解释一些比较深入和抽象的东西,读你的书,总让我有突然"顿悟" 的感 觉,欣喜自己能在迷时找到良师。 武汉"wking" 《深入浅出MFC》2/eto read your new books. x hon.bbs@bbs.ee.ncu.edu.tw 我非常喜欢你的书,不管是著作或是翻译,给人的感觉真的是"深入浅出",我喜欢你用浅 近的比喻说明,来解释一些比较深入和抽象的东西,读你的书,总让我有突然"顿悟" 的感 觉,欣喜自己能在迷时找到良师。 武汉"wking"- Microsoft 请问,想要从DOS 跨足到Windows 程序设计有哪些书值得推荐呢? hschin.bbs@bbs.cs.nthu.edu.tw:建议你看侯俊杰的深入浅出MFC,里面除了对窗口程序 的架构作基础性的说明,让你了解一些基础概论,也说了不少窗口程序设计的课题,是 非常不错的一本书。 xiii News / BBS 论坛(CompBook and/or programming) 请问VISUAL tw:Inside Visual C++ 4.0 不是初学者用的书,因为它未从 最基本观念讲起。深入浅出MFC 前半本都在描述(或说仿真) MFC 的内部技术,甚至挖 出MFC 部份原始程序代码来说明,透过这本书来学MFC 会学得很扎实,不过自己要先 对Windows 这个操作系统的运作方式有一程度的了解,不然会看不懂,以某方面来说, 也不是初学者用的书。基本上侯俊杰写的书不论文笔或是内容都相当的好,相当有购买 0 码力 | 1009 页 | 11.08 MB | 1 年前3
 Hello 算法 1.0.0b1 C++版它们 应用到日常生活中。接下来,我将介绍两个具体例子来佐证。 例一:拼积木。一套积木,除了有许多部件之外,还会附送详细的拼装说明书。我们按照说明书上一步步操作, 即可拼出复杂的积木模型。 如果从数据结构与算法的角度看,大大小小的「积木」就是数据结构,而「拼装说明书」上的一系列步骤就是 算法。 例二:查字典。在字典中,每个汉字都有一个对应的拼音,而字典是按照拼音的英文字母表顺序排列的。假设 com 16 for (int i = 0; i < n; i++) { // +1(每轮都执行 i ++) cout << 0 << endl; // +1 } } ?(?) 是个一次函数,说明时间增长趋势是线性的,因此易得时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号被称为「大 ? 记号 Big‑? Notation」,代表函数 ?(?) 的「渐近上界 asymptotic 1 ),直到找到一个空位,则将元素 插入到该空位中。 查找元素:若出现哈希冲突,则使用相同步长执行线性查找,会遇到两种情况: 1. 找到对应元素,返回 value 即可; 2. 若遇到空位,则说明查找键值对不在哈希表中; Figure 6‑5. 线性探测 线性探测存在以下缺陷: ‧ 不能直接删除元素。删除元素会导致桶内出现一个空位,在查找其他元素时,该空位有可能导致程序认 为元素不存在(即上述第0 码力 | 187 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 C++版它们 应用到日常生活中。接下来,我将介绍两个具体例子来佐证。 例一:拼积木。一套积木,除了有许多部件之外,还会附送详细的拼装说明书。我们按照说明书上一步步操作, 即可拼出复杂的积木模型。 如果从数据结构与算法的角度看,大大小小的「积木」就是数据结构,而「拼装说明书」上的一系列步骤就是 算法。 例二:查字典。在字典中,每个汉字都有一个对应的拼音,而字典是按照拼音的英文字母表顺序排列的。假设 com 16 for (int i = 0; i < n; i++) { // +1(每轮都执行 i ++) cout << 0 << endl; // +1 } } ?(?) 是个一次函数,说明时间增长趋势是线性的,因此易得时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号被称为「大 ? 记号 Big‑? Notation」,代表函数 ?(?) 的「渐近上界 asymptotic 1 ),直到找到一个空位,则将元素 插入到该空位中。 查找元素:若出现哈希冲突,则使用相同步长执行线性查找,会遇到两种情况: 1. 找到对应元素,返回 value 即可; 2. 若遇到空位,则说明查找键值对不在哈希表中; Figure 6‑5. 线性探测 线性探测存在以下缺陷: ‧ 不能直接删除元素。删除元素会导致桶内出现一个空位,在查找其他元素时,该空位有可能导致程序认 为元素不存在(即上述第0 码力 | 187 页 | 14.71 MB | 1 年前3
共 22 条
- 1
- 2
- 3













