Hello 算法 1.0.0b4 C++版2. 刷算法题。建议从热门题目开刷,如剑指 Offer和LeetCode Hot 100,先积累至少 100 道题目,熟悉 主流的算法问题。初次刷题时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按 照“艾宾浩斯遗忘曲线”来复习题目,通常在进行 3‑5 轮的重复后,就能将其牢记在心。 3. 搭建知识体系。在学习方面,我们可以阅读算法专栏文章、解题框架和算法教材,以不断丰富知识体 hello‑algo.com 46 3.4.3. Unicode 字符集 随着计算机的蓬勃发展,字符集与编码标准百花齐放,而这带来了许多问题。一方面,这些字符集一般只定 义了特定语言的字符,无法在多语言环境下正常工作;另一方面,同一种语言也存在多种字符集标准,如果 两台电脑安装的是不同的编码标准,则在信息传递时就会出现乱码。 那个时代的人们就在想:如果推出一个足够完整的字符集,将世界范围内的所有语言和符号都收录其中,不 进行哈希表扩容,直至冲突消失为止。此方法简单粗暴且有效,但效率太低,因为哈希表扩容需要进行大量 的数据搬运与哈希值计算。为了提升效率,我们切换一下思路: 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括链式地址和开放寻址。 6.2.1. 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.1.0 C++ 版的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 复习题目,通常在进行 3~5 轮的重复后,就能将其牢记在心。推荐的题单和刷题计划请见此 GitHub 仓库。 3. 阶段三:搭建知识体系。在学习方面,我 hello‑algo.com 61 3.4.3 Unicode 字符集 随着计算机技术的蓬勃发展,字符集与编码标准百花齐放,而这带来了许多问题。一方面,这些字符集一般 只定义了特定语言的字符,无法在多语言环境下正常工作。另一方面,同一种语言存在多种字符集标准,如 果两台计算机使用的是不同的编码标准,则在信息传递时就会出现乱码。 那个时代的研究人员就在想:如果推出一个足够完整的字符集,将世界范围内的所有语言和符号都收录其 指向哪里都不会对该链表产生影响。 从数据结构与算法(做题)的角度看,不断开没有关系,只要保证程序的逻辑是正确的就行。从标准库的角 度看,断开更加安全、逻辑更加清晰。如果不断开,假设被删除节点未被正常回收,那么它会影响后继节点 的内存回收。 Q:在链表中插入和删除操作的时间复杂度是 ?(1) 。但是增删之前都需要 ?(?) 的时间查找元素,那为什 么时间复杂度不是 ?(?) 呢? 如果是0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版阶段二:刷算法题。建议从热门题目开刷,如“剑指 Offer”和“LeetCode Hot 100”,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。 我们可以按照“艾宾浩斯遗忘曲线”来复习题目,通常在进行 3~5 轮的重复后,就能将其牢记在心。 3. 阶段三:搭建知识体系。在学习方面,我们可以阅读算法专栏文章、解题框架和算法教材,以不断丰富 hello‑algo.com 61 3.4.3 Unicode 字符集 随着计算机技术的蓬勃发展,字符集与编码标准百花齐放,而这带来了许多问题。一方面,这些字符集一般 只定义了特定语言的字符,无法在多语言环境下正常工作。另一方面,同一种语言存在多种字符集标准,如 果两台计算机使用的是不同的编码标准,则在信息传递时就会出现乱码。 那个时代的研究人员就在想:如果推出一个足够完整的字符集,将世界范围内的所有语言和符号都收录其 Q:在删除节点中,需要断开该节点与其后继节点之间的引用指向吗? 从数据结构与算法(做题)的角度看,不断开没有关系,只要保证程序的逻辑是正确的就行。从标准库的角 度看,断开更加安全、逻辑更加清晰。如果不断开,假设被删除节点未被正常回收,那么它会影响后继节点 的内存回收。 89 第 5 章 栈与队列 � 栈如同叠猫猫,而队列就像猫猫排队。 两者分别代表先入后出和先入先出的逻辑关系。 第 5 章 栈与队列 hello‑algo0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 复习题目,通常在进行 3~5 轮的重复后,就能将其牢记在心。推荐的题单和刷题计划请见此 GitHub 仓库。 3. 阶段三:搭建知识体系。在学习方面,我 hello‑algo.com 61 3.4.3 Unicode 字符集 随着计算机技术的蓬勃发展,字符集与编码标准百花齐放,而这带来了许多问题。一方面,这些字符集一般 只定义了特定语言的字符,无法在多语言环境下正常工作。另一方面,同一种语言存在多种字符集标准,如 果两台计算机使用的是不同的编码标准,则在信息传递时就会出现乱码。 那个时代的研究人员就在想:如果推出一个足够完整的字符集,将世界范围内的所有语言和符号都收录其 指向哪里都不会对该链表产生影响。 从数据结构与算法(做题)的角度看,不断开没有关系,只要保证程序的逻辑是正确的就行。从标准库的角 度看,断开更加安全、逻辑更加清晰。如果不断开,假设被删除节点未被正常回收,那么它会影响后继节点 的内存回收。 Q:在链表中插入和删除操作的时间复杂度是 ?(1) 。但是增删之前都需要 ?(?) 的时间查找元素,那为什 么时间复杂度不是 ?(?) 呢? 如果是0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b5 C++版2. 刷算法题。建议从热门题目开刷,如剑指 Offer和LeetCode Hot 100,先积累至少 100 道题目,熟悉 主流的算法问题。初次刷题时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按 照“艾宾浩斯遗忘曲线”来复习题目,通常在进行 3‑5 轮的重复后,就能将其牢记在心。 3. 搭建知识体系。在学习方面,我们可以阅读算法专栏文章、解题框架和算法教材,以不断丰富知识体 hello‑algo.com 59 3.4.3 Unicode 字符集 随着计算机的蓬勃发展,字符集与编码标准百花齐放,而这带来了许多问题。一方面,这些字符集一般只定 义了特定语言的字符,无法在多语言环境下正常工作。另一方面,同一种语言也存在多种字符集标准,如果 两台电脑安装的是不同的编码标准,则在信息传递时就会出现乱码。 那个时代的研究人员就在想:如果推出一个足够完整的字符集,将世界范围内的所有语言和符号都收录其 进行哈希表扩容,直至冲突消失为止。此方法简单粗暴且有效,但效率太低,因为哈希表扩容需要进行大量 的数据搬运与哈希值计算。为了提升效率,我们可以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 C++ 版理、流程、用途 和效率等方面的內容。 2. 階段二:刷演算法題。建議從熱門題目開刷,先積累至少 100 道題目,熟悉主流的演算法問題。初次刷 題時,“知識遺忘”可能是一個挑戰,但請放心,這是很正常的。我們可以按照“艾賓浩斯遺忘曲線”來 複習題目,通常在進行 3~5 輪的重複後,就能將其牢記在心。推薦的題單和刷題計劃請見此 GitHub 倉庫。 3. 階段三:搭建知識體系。在學習方面,我 hello‑algo.com 61 3.4.3 Unicode 字符集 隨著計算機技術的蓬勃發展,字符集與編碼標準百花齊放,而這帶來了許多問題。一方面,這些字符集一般 只定義了特定語言的字元,無法在多語言環境下正常工作。另一方面,同一種語言存在多種字符集標準,如 果兩臺計算機使用的是不同的編碼標準,則在資訊傳遞時就會出現亂碼。 那個時代的研究人員就在想:如果推出一個足夠完整的字符集,將世界範圍內的所有語言和符號都收錄其 指向哪裡都不會對該鏈結串列產生影響。 從資料結構與演算法(做題)的角度看,不斷開沒有關係,只要保證程式的邏輯是正確的就行。從標準庫的 角度看,斷開更加安全、邏輯更加清晰。如果不斷開,假設被刪除節點未被正常回收,那麼它會影響後繼節 點的記憶體回收。 Q:在鏈結串列中插入和刪除操作的時間複雜度是 ?(1) 。但是增刪之前都需要 ?(?) 的時間查詢元素,那 為什麼時間複雜度不是 ?(?) 呢?0 码力 | 379 页 | 18.79 MB | 10 月前3
《深入浅出MFC》2/e程序。目标纯粹是为了做一个导入,并与Win32 console 程序做一比较。 我所挑选的两个单纯的MFC 类别是CStdioFile 和CString: 在MFC 之中,CFile 用来处理正常的文件I/O 动作。CStdioFile 衍生自CFile,一个 CStdioFile 对象代表以C runtime 函数fopen 所开启的一个stream 文件。Stream 文件 有缓冲区 哪里呢?就在所谓的执行线程函数。执行线程与执行线程之间,不必考虑控制权释放的问题, 因为Win32 操作系统是强制性多任务。 执行线程的结束有两种情况,一种是寿终正寝,一种是未得善终。前者是执行线程函数正常 结束退出,那么执行线程也就自然而然终结了。这时候系统会调用ExitThread 做些善后清 理工作(其实执行线程中也可以自行调用此函数以结束自己)。但是像上面那个例子,执 行线程根本是个无穷 LE_ 最低,NORMAL_ 次 之,HIGH_ 又次之,REALTIME_ 最高。在每一个等级之中,你可以使用SetThreadPriority 设定精确的优先权,并且可以稍高或稍低于该等级的正常值(范围是两个点数)。你可 以把SetThreadPriority 想象是一种微调动作。 除了以上五种微调,另外还可以指定两种微调常数: 这些情况可以以图1-8 作为总结。 50 优先权等级0 码力 | 1009 页 | 11.08 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming嘴巴,手 看比站 15 分钟 眼睛 吃饭 30 分钟 嘴巴,手 拉粑粑 20 分钟 屁股 去医院 10 分钟 全身 无条件跳转指令 • 还有一个小问题,就是执行正常的分支走到“拉 粑粑”后,还会去医院。 • 为了在正常分支里不去医院,我们在“拉粑粑”后 面加一条无条件跳转指令,不论条件如何,直 接跳转到去医院的下一条指令,也就是程序结 束。 • if (! 烫伤 ) { • 然而跳转指令的存在使得流水线的并行变得很困难了。例如我们本来可以烧开水和刷牙同 时进行节省时间的,但是因为烧好开水以后还要判断“是否烫伤”才能决定接下来是正常刷牙 还是去医院。这意味着流水线不得不在跳转指令前后发生断层(俗称流水线里的气泡)。 不得不等待烧开水这个任务结束,才能确定接下来要执行哪个剧本:正常继续早餐,还是 说要前往医院。 洗脸 刷牙 烧开水 吃饭 看比站 拉粑粑 5 5 10 20 刷牙 吃饭 看比站0 码力 | 47 页 | 8.45 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串len 为 12 , ptr 指向 ’ h’ ,字符串内可以包含 ‘ \0’ , cout 能正常打印完整 字符串 printf 指定类型繁琐 • printf 必须告诉他是字符串( %s )还是整数( %d )还是 字符( %c ),必须和右边的参数一致,初学者容易搞错 。 • 而且即使搞错了也能正常编译通过(一些高级的编译器会 给出警告),但是运行结果不对,或者还有可能崩溃。 泛型的 如果字符串的开头不是数字,则 stoi 会抛出 std::invalid_argument 异常,可以用 catch 捕 获。 • 但是开头可以有空格,例如 stoi(“ 42yuan”) 可以正常得到 42 ,但 stoi(“my42yuan”) 就会 出错。 • 开头也可以是正负号(‘ +’ 或 ‘ -’ ),会被当成数字的一部分,例如 stoi(“-42”) 会得到 -42 。 • 这称之为小字符串优化,小字符串的上限是 15 字节,而不是 16 字节,为什么?看到这里的 _S_local_capacity + 1 了没,他是为 了给 ‘ \0’ 留个空位,为的是让 c_str 总能正常得到 0 结尾字符串。 所以因为要支持 c_str , string 其实比 vector 多一个负担:需要 额外一个字节的空间来存放 ‘ \0’ 。 string 的小字符串优化 • string0 码力 | 162 页 | 40.20 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南CMake 版本 3.15 以上才能运行。 如果用户的 CMake 版本小于 3.15 ,会出现“ CMake 版本不足”的提示。 假设我现在构建一个需要版本 3.99 的 CMake 项目 会正常报错提示版本过低,而不是等到某处用到 3.99 版本才有的特性时才出错。 可以通过 cmake --version 查看当前版本 也可以通过 CMAKE_VERSION 这个变量来获得当前 CMake 件,并根据里面的配置信息创建 TBB::tbb 这个伪对象(他实际指向真正的 tbb 库文件路径 /usr/lib/libtbb.so ),之后通过 target_link_libraries 链接 TBB::tbb 就可以正常工作了。 TBB::tbb 的秘密:自带了一些 PUBLIC 属性 TBB::tbb 是一个伪对象 (imported) ,除了他会指向 /usr/lib/libtbb.so 之外, TBBConfig MATCHES “Hello”) 但是因为找不到名为 Hello 的变量,所以会被直接当成普通的字符串来处理。 也就是 if (“Hello” MATCHES “Hello”) 从而会执行真分支,结果正常。 万一好巧不巧,正好定义了 Hello 这个变量呢? 然而假如存在 Hello 这个变量,其值为 “ world” 。 那么 if (${MYVAR} MATCHES “Hello”) 会被翻译成0 码力 | 166 页 | 6.54 MB | 1 年前3
共 19 条
- 1
- 2













