跳转至

C++算法编程指南

简介

本项目是给算法编程的初学者编写的学习讲义,使用C++作为编程语言,难度系数大约为NOI竞赛的普及组和提高组。

Info

本讲义不涉及C++语言的基础语法,但是对指针、引用、STL库这些比较复杂的语言知识点还是会有兼顾。

讲义包括常用技巧、基础算法、基础数据结构、算法设计、中高级算法、中高级数据结构、经典例题七个部分。目前编写到基础数据结构的二叉树遍历,由于个人原因,暂时没有精力持续更新,暂停一段时间,何时继续开始目前尚无计划。

项目使用 GitHub Pages 作为主力发布站点:C++算法编程指南

ReadTheDocs 上的站点为备用站:C++算法编程指南

ReadTheDocs 上的备用站速度较慢,但是可以导出为PDF格式,且为预防主力站无法访问的不时之需,故将一直保持存在,内容将和主力站保持一致。

编写

因为讲义章节层次比较多,篇幅比较长,所以使用 reStructuredText 格式编写,使用 Sphinx 编译为静态网站,在 GitHub Pages 和 ReadTheDocs 两个网站发布。

目前 reStructuredText 的表现力和书写便捷性虽已不如 Markdown,但仍有一些优势,例如创建全站索引、章节自动编号、literalinclude 块引入代码文件、PDF 编译等。故本项目这样的大篇幅书籍形式暂时无法全面由 Markdown 取代。

现在正在对本项目已经写好的内容进行校对,同时探索将项目中的部分内容调整为 Markdown 笔记的格式。校对完成后启动在博客中编写算法笔记的工作,在本博客站的 Algorithms 部分中集中收录。

搜索页面的中文搜索功能已经加载,但是 GitHub Pages 的主力站使用的搜索引擎不如备用站的给力,ReadTheDocs没有使用sphinx-doc自带的搜索引擎,而是使用了一个更加强大的全文搜索引擎。效果是在备用站上中文关键字可以超过两个字,在主力站上每个中文关键字都不能超过两个汉字,只能拆成多个关键字来搜。

进度

  • 新增:4.4.5“二叉树(V) 后序遍历和遍历算法分析”(2020/9/7)
  • 新增:4.4.4“二叉树(IV) 中序遍历”(2020/8/25)
  • 新增:4.4.3“二叉树(III) 先序遍历与深度优先搜索”(2020/8/25)
  • 新增:4.4.2“二叉树(II) 层序遍历与宽度优先搜索”(2020/8/15)
  • 新增:4.4.1“二叉树(I) 基本知识”(2020/8/15)
  • 新增:4.4“树和森林”(2020/7/31)
  • 新增:4.3.4“STL容器:集合和映射”(2020/7/31)
  • 新增:4.3.3“冲突处理:链式哈希表”(2020/7/23)
  • 新增:4.3.2“冲突处理:冲突探测法”(2020/7/23)
  • 新增:4.3.1“哈希表:基本概念”(2020/7/11)
  • 新增:4.2.4“队列:C++实现、STL容器”和4.3“哈希表”(2020/7/4)
  • 新增:4.2.3“队列:基本概念”(2020/6/28)
  • 新增:4.2.2“栈的应用:表达式求值”(2020/6/20)
  • 新增:4.2.1“栈的基本概念和实现”(2020/6/5)
  • 新增:4.1.11“STL双链表容器list”(2020/6/2)
  • 新增:4.1.10“链表的应用(续)”,单链表归并和基数排序(2020/5/30)
  • 新增:4.1.9“链表的应用”,在单链表上实现插入排序、元素值分区和插入排序(2020/5/25)
  • 新增:4.1.8“链表的实现”(2020/5/19)
  • 新增:4.1.7“链表”(2020/5/16)
  • 校对:完成至5.1.3“贪心法(III) 整数的分分合合”,校对告一段落(2020/5/2)
  • 校对:完成至5.1.1“贪心法(I) 背包问题”(2020/5/1)
  • 校对:完成第3章全部内容的校对(2020/4/28)
  • 修正:搜索页支持中文搜索(2020/4/27)
  • 校对:完成3.5.6 ~ 3.5.8三节,第3.5部分“排序”全部校对完毕(2020/4/26)
  • 校对:完成3.5.5“非比较型排序算法”(2020/4/25)
  • 校对:完成6.1.1“欧拉线性筛与欧拉函数”、8.1“仪仗队”(2020/4/24)
  • 校对:完成至3.5.4“快速排序”(2020/4/23)
  • 校对:完成至3.5.2“插入排序”(2020/4/20)