Hello 算法 1.0.0b4 C++版权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能达到最优。然而在实际情况中,同时优化时间复 杂度和空间复杂度通常是非常困难的。 降低时间复杂度通常需要以提升空间复杂度为代价,反之亦然。我们将牺牲内存空间来提升算法运行速度的 思路称为“以空间换时间”;反之,则称为“以时间换空间”。 选择哪种思路取决于我们更看重哪个方面。在大多数情况下,时间比空间更宝贵,因此以空间换时间通常是 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (1.N) 255 ±∞ NaN 特别地,次正规数显著提升了浮点数的精度,这是因为: ‧ 最小正正规数为 2−126 ≈ 1.18 × 10−38 。 ‧ 最小正次正规数为 2−126 × 2−23 ≈ 1.4 × 10−45 。 双精度 double 从存储空间的角度看,使用 UTF‑8 表示英文字符非常高效,因为它仅需 1 个字节;使用 UTF‑16 编码某些非 英文字符(例如中文)会更加高效,因为它只需要 2 个字节,而 UTF‑8 可能需要 3 个字节。从兼容性的角度 看,UTF‑8 的通用性最佳,许多工具和库都优先支持 UTF‑8 。 3. 数据结构 hello‑algo.com 48 3.4.5. 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用0 码力 | 343 页 | 27.39 MB | 1 年前3
现代C++ 教程:高速上手C++11/14/17/20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2 与 C 的兼容性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 进一步阅读的参考文献 量避免使用。但是,已弃用的特性依然是标准库的一部分,并且出于兼容性的考虑,大部分 特性其实会『永久』保留。 • 不再允许字符串字面值常量赋值给一个 char *。如果需要用字符串字面值常量赋值和初始化一个 char *,应该使用 const char * 或者 auto。 char *str = "hello world!"; // 将出现弃用警告 8 1.2 与 C 的兼容性 第 1 章迈向现代 C++ • std::function)、export 等特性也均 被弃用。前面提到的这些特性如果你从未使用或者听说过,也请不要尝试去了解他们,应该向新标准靠 拢,直接学习新特性。毕竟,技术是向前发展的。 1.2 与 C 的兼容性 出于一些不可抗力、历史原因,我们不得不在 C++ 中使用一些 C 语言代码(甚至古老的 C 语言代 码),例如 Linux 系统调用。在现代 C++ 出现之前,大部分人当谈及『C 与 C++ 的区别是什么』时,0 码力 | 83 页 | 2.42 MB | 1 年前3
Hello 算法 1.0.0b5 C++版hello‑algo.com 13 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便使得算法高效运行。 数据结构设计是一个充满权衡的过程。如果想要在某方面取得提升,往往需要在另一方面作出妥协。下面举 两个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能达到最优。然而在实际情况中,同时优化时间复 杂度和空间复杂度通常是非常困难的。 降低时间复杂度通常需要以提升空间复杂度为代价,反之亦然。我们将牺牲内存空间来提升算法运行速度的 思路称为“以空间换时间”;反之,则称为“以时间换空间”。 选择哪种思路取决于我们更看重哪个方面。在大多数情况下,时间比空间更宝贵,因此“以空间换时间”通 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (1.N) 255 ±∞ NaN 值得说明的是,次正规数显著提升了浮点数的精度。最小正正规数为 2−126 ,最小正次正规数为 2−126×2−23 。 双精度 double 也采用类似 float 的表示方法,在此不做赘述。 第 3 章 数据结构 hello‑algo0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.1.0 C++ 版hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能达到最优。然而在实际情况中,同时优化时间复 杂度和空间复杂度通常非常困难。 降低时间复杂度通常需要以提升空间复杂度为代价,反之亦然。我们将牺牲内存空间来提升算法运行速度的 思路称为“以空间换时间”;反之,则称为“以时间换空间”。 选择哪种思路取决于我们更看重哪个方面。在大多数情况下,时间比空间更宝贵,因此“以空间换时间”通 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (1.N) 255 ±∞ NaN 值得说明的是,次正规数显著提升了浮点数的精度。最小正正规数为 2−126 ,最小正次正规数为 2−126×2−23 。 双精度 double 也采用类似于 float 的表示方法,在此不做赘述。 第 3 章 数据结构 hello‑algo0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能达到最优。然而在实际情况中,同时优化时间复 杂度和空间复杂度通常非常困难。 降低时间复杂度通常需要以提升空间复杂度为代价,反之亦然。我们将牺牲内存空间来提升算法运行速度的 思路称为“以空间换时间”;反之,则称为“以时间换空间”。 选择哪种思路取决于我们更看重哪个方面。在大多数情况下,时间比空间更宝贵,因此“以空间换时间”通 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (1.N) 255 ±∞ NaN 值得说明的是,次正规数显著提升了浮点数的精度。最小正正规数为 2−126 ,最小正次正规数为 2−126×2−23 。 双精度 double 也采用类似于 float 的表示方法,在此不做赘述。 第 3 章 数据结构 hello‑algo0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版本项目旨在创建一本开源、免费、对新手友好的数据结构与算法入门教程。 ‧ 全书采用动画图解,内容清晰易懂、学习曲线平滑,引导初学者探索数据结构与算法的知识地图。 ‧ 源代码可一键运行,帮助读者在练习中提升编程技能,了解算法工作原理和数据结构底层实现。 ‧ 提倡读者互助学习,欢迎大家在评论区提出问题与分享见解,在交流讨论中共同进步。 0.1.1 读者对象 若你是算法初学者,从未接触过算法,或者已 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 如果把具体的工作技能比作是武功的“招式”的话,那么基础科目应该更像是“内功”。 我认为学算法(以及其他基础科目)的意义不是在于在工作中从零实现它,而是基于学到的知识,在解决问 题时能够作出专业的反应和判断,从而提升工作的整体质量。举一个简单例子,每种编程语言都内置了排序 函数: ‧ 如果我们没有学过数据结构与算法,那么给定任何数据,我们可能都塞给这个排序函数去做了。运行顺 畅、性能不错,看上去并没有什么问题。0 码力 | 379 页 | 18.48 MB | 10 月前3
《深入浅出MFC》2/e为程序进入点,可 以调用C runtime 函数。但,当然,不可能调用Win32 API 函数。 程序能力 过去的DOS 程序仍然可以在Windows 的DOS Box 中跑(Win95 的兼容性极高, WinNT 的兼容性稍差)。 30 Console 程序当然更没有问题。由于console 程序可以调用部份的Win32 API(尤其是 KERNEL32.DLL 模块所提供的那一部份),所以它可以使用Windows 才执行。此等级最适合于系统监视软件,或屏幕保护软件。 ■ "normal" 是预设等级。系统可以动态改变优先权,但只限于"normal" 等级。 当进程变成前景,执行线程优先权提升为9,当进程变成背景,优先权降低为7。 ■ "high" 等级是为了立即反应的需要,例如使用者按下Ctrl+Esc 时立刻把工作管 理器(task manager)带出场。 ■ "realtime" 的this 指针。 this 指针 this 指针 60 3. 既然所有类别都有display 动作,把它提升到老祖宗CShape 去,然后再继承 之,好吗?不好,因为display 函数应该因不同的形状而动作不同。 4. 如果display 不能提升到基础类别去,我们就不能够以一个for 循环或while 循环干净漂亮地完成下列动作(此种动作模式在对象导向程序方法中重要无0 码力 | 1009 页 | 11.08 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 C++ 版本專案旨在建立一本開源、免費、對新手友好的資料結構與演算法入門教程。 ‧ 全書採用動畫圖解,內容清晰易懂、學習曲線平滑,引導初學者探索資料結構與演算法的知識地圖。 ‧ 源程式碼可一鍵執行,幫助讀者在練習中提升程式設計技能,瞭解演算法工作原理和資料結構底層實 現。 ‧ 提倡讀者互助學習,歡迎大家在評論區提出問題與分享見解,在交流討論中共同進步。 0.1.1 讀者物件 若你是演算法初學者,從未接觸過 空間佔用儘量少,以節省計算機記憶體。 ‧ 資料操作儘可能快速,涵蓋資料訪問、新增、刪除、更新等。 ‧ 提供簡潔的資料表示和邏輯資訊,以便演算法高效執行。 資料結構設計是一個充滿權衡的過程。如果想在某方面取得提升,往往需要在另一方面作出妥協。下面舉兩 個例子。 ‧ 鏈結串列相較於陣列,在資料新增和刪除操作上更加便捷,但犧牲了資料訪問速度。 ‧ 圖相較於鏈結串列,提供了更豐富的邏輯資訊,但需要佔用更大的記憶體空間。 如果把具體的工作技能比作是武功的“招式”的話,那麼基礎科目應該更像是“內功”。 我認為學演算法(以及其他基礎科目)的意義不是在於在工作中從零實現它,而是基於學到的知識,在解決 問題時能夠作出專業的反應和判斷,從而提升工作的整體質量。舉一個簡單例子,每種程式語言都內建了排 序函式: ‧ 如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。0 码力 | 379 页 | 18.79 MB | 10 月前3
Hello 算法 1.0.0b2 C++版权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能够达到最优,而实际上,同时优化时间复杂度和空 间复杂度是非常困难的。 降低时间复杂度,往往是以提升空间复杂度为代价的,反之亦然。我们把牺牲内存空间来提升算法运行速度的 思路称为「以空间换时间」;反之,称之为「以时间换空间」。选择哪种思路取决于我们更看重哪个方面。 2. 复杂度分析 hello‑algo.com 34 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (1.N) 255 ±∞ NaN 特别地,次正规数显著提升了小数精度: ‧ 最小正正规数为 2−126 ≈ 1.18 × 10−38 ; ‧ 最小正次正规数为 2−126 × 2−23 ≈ 1.4 × 10−45 ; 双精度 double 也采用类似 度;但结点访问效率低、占用 内存多。常见的链表类型有单向链表、循环链表、双向链表。 ‧ 列表又称动态数组,是基于数组实现的一种数据结构,其保存了数组的优势,且可以灵活改变长度。列 表的出现大大提升了数组的实用性,但副作用是会造成部分内存空间浪费。 ‧ 下表总结对比了数组与链表的各项特性。 数组 链表 存储方式 连续内存空间 离散内存空间 数据结构长度 长度不可变 长度可变 内存使用率0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0b1 C++版权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能够达到最优,而实际上,同时优化时间复杂度和空 间复杂度是非常困难的。 降低时间复杂度,往往是以提升空间复杂度为代价的,反之亦然。我们把牺牲内存空间来提升算法运行速度的 思路称为「以空间换时间」;反之,称之为「以时间换空间」。选择哪种思路取决于我们更看重哪个方面。 2. 复杂度分析 hello‑algo.com 34 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (1.N) 255 ±∞ NaN 特别地,次正规数显著提升了小数精度: ‧ 最小正正规数为 2−126 ≈ 1.18 × 10−38 ; ‧ 最小正次正规数为 2−126 × 2−23 ≈ 1.4 × 10−45 ; 双精度 double 也采用类似 度;但结点访问效率低、占用 内存多。常见的链表类型有单向链表、循环链表、双向链表。 ‧ 列表又称动态数组,是基于数组实现的一种数据结构,其保存了数组的优势,且可以灵活改变长度。列 表的出现大大提升了数组的实用性,但副作用是会造成部分内存空间浪费。 ‧ 下表总结对比了数组与链表的各项特性。 数组 链表 存储方式 连续内存空间 离散内存空间 数据结构长度 长度不可变 长度可变 内存使用率0 码力 | 187 页 | 14.71 MB | 1 年前3
共 21 条
- 1
- 2
- 3













